用kerberos保护kafka和zookeeper

dphi5xsq  于 2021-06-08  发布在  Kafka
关注(0)|答案(2)|浏览(471)

我正试图在zookeeper和kafka之间设置kerberos标识。
我遵循了此处提供的配置步骤:https://docs.confluent.io/4.1.1/kafka/authentication_sasl_gssapi.html#sasl-gssapi经纪人。
Kafka代理成功连接到zookeeper集合,代理正在znodes上设置ACL。
在zookeeper中,我可以看到znodes/brokers/id,但是acl的设置如下:

'world,'anyone
: r
'sasl,'kafka/kafka-broker-01.c.aesthetic-way-193809.internal@MYREALM.COM
: cdrwa

第一个代理创建znode,放置其acl,并使其对所有要添加其id的节点都不可更改。
文件中说,我们应该对所有经纪人使用相同的委托人,但文件中的示例与此建议不符:

// ZooKeeper client authentication
 Client {
   com.sun.security.auth.module.Krb5LoginModule required
   useKeyTab=true
   storeKey=true
   keyTab="/etc/security/keytabs/kafka_server.keytab"
   principal="kafka/kafka1.hostname.com@EXAMPLE.COM";
};

我应该创建一个像kafka_zk_cli@myrealm.com 并在每个代理的jaas文件的客户机部分使用它?如果是,我可以在每个代理上共享此用户的keytab吗?
谢谢你的帮助。

1aaf6o9v

1aaf6o9v1#

您可以从主体中删除主机并对所有代理使用相同的主机,您可以手动设置ACL(不理想),也可以将这些添加到zookeeper配置中

kerberos.removeHostFromPrincipal = true
kerberos.removeRealmFromPrincipal = true

这三个选项中的任何一个都应该有帮助。

4bbkushb

4bbkushb2#

属性kerberos.removehostfromprincipal、kerberos.removeAllFromPrincipal不适用于我。在阅读了zookeeper 3.4.14版的源代码之后,我将上述属性作为jvm参数传递,例如

-Dzookeeper.kerberos.removeHostFromPrincipal=true
-Dzookeeper.kerberos.removeRealmFromPrincipal=true

同样在我的案例中,由于是跨领域票证授权,我添加了如下授权规则:

-Dzookeeper.security.auth_to_local=RULE:[2:$1](.*)

看看这个班https://github.com/apache/zookeeper/blob/release-3.4.14/zookeeper-server/src/main/java/org/apache/zookeeper/server/auth/saslservercallbackhandler.java
现在我的主题ACL是这样的

getAcl /kafka-cluster/config/topics/test20
'world,'anyone
: r
'sasl,'zookeeper
: cdrwa

相关问题