使用TLS的节点之间的Kafka授权



我在Kafka 2.6上使用授权ACL时遇到了麻烦。我有TLS设置,并且在我的客户端应用程序和所有kafka节点之间运行良好。我在server.properties文件中有acl属性

#TLS Portion
advertised.listeners=SSL://10.1.1.2:9092
listeners=SSL://:9092
ssl.keystore.location=/opt/kafka/keystore.jks
ssl.keystore.password=password
ssl.key.password=password
ssl.truststore.location=/opt/kafka/truststore.jks
ssl.truststore.password=password
ssl.enabled.protocols=TLSv1.2
ssl.client.auth=required
security.inter.broker.protocol=SSL
security.protocol=SSL
#ACL Portion
authorizer.class.name=kafka.security.authorizer.AclAuthorizer
allow.everyone.if.no.acl.found=false
super.users=User:CN=me@me.me

我已经为授权日志启用了DEBUG。如果我将allow.everyone~设置为true,它会起作用,因为它不再担心我认为的授权/ACL,并且目前super.users值正在用于我的客户端应用程序,并且根据DEBUG消息运行良好。

当我在每个节点上启动服务时,当节点看起来像是试图相互请求UpdateMetadata时,我会得到不允许的ClusterAction。

我已经应用了ACL条目,假设服务器CN=server.side

bin/kafka-acls.sh --authorizer kafka.security.authorizer.AclAuthorizer --authorizer-properties zookeeper.connect=10.1.1.5:2181 --add --allow-principal User:CN=server.side  --operation ClusterAction --cluster sample-cluster

跨所有节点,无骰子。

我尝试设置--operation ALL,但没有成功。我还试图用--bootstrap-server将命令指向节点,但这根本无法返回任何内容,我可能会出现超时错误(我猜它占用了ACL条目,但由于上述问题,无法将其传播到其他节点(。

我已经为各种权限方案的主题、消费者和生产者添加了ACL,但这似乎只发生在节点试图交叉通信的启动时。因此,我最终遇到了客户端应用程序消费者和生产者,他们可以连接,并被授权访问各自的主题,但最终没有LEADER元数据问题。

我一整天都在谷歌上;有人熟悉这个吗?TIA-

根据Authorization的Confluent文档。

每个代理必须能够与所有其他代理通信以进行复制,并且当它充当控制器时。您必须将broker主体添加为超级用户,否则Kafka将无法工作。

还有

在安全集群中,客户端请求和代理间操作都需要授权。代理间操作分为两类:集群和主题。集群操作是指管理集群所需的操作,如更新代理和分区元数据、更改分区的前导和同步副本集,以及触发受控关闭。

由于主题分区复制在内部的工作方式,代理主体必须是超级用户,这样代理才能正确地将主题从领导者复制到追随者。

因此,您应该将您的经纪人主体添加到super.users列表中。顺便说一句,您可以将ssl.principal.mapping.rules配置为提取主体名称,使其不包含CN=部分。例如:像CCD_ 6这样的规则会给你一个像me@me.me这样的主体。

最新更新