使用 Kerberos 保护 Kafka 和 Zookeeper
Securing Kafka and Zookeeper with Kerberos
我正在尝试在 zookeeper 和 kafka 之间设置一个 kerberos 标识。
我已按照此处提供的配置步骤进行操作:https://docs.confluent.io/4.1.1/kafka/authentication_sasl_gssapi.html#sasl-gssapi-broker。
kafka 代理成功连接到 zookeeper 集合,代理正在 znode 上设置 ACL。
在 Zookeeper 中,我可以看到 znode /brokers/ids,但是 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 文件的客户端部分使用它?如果是,我可以在每个代理上共享该用户的密钥表吗?
感谢您的帮助。
您可以从主体中删除主机并为所有代理使用相同的主机,您可以手动设置 acls(不理想),或者您也可以将这些添加到您的 zookeeper 配置中
kerberos.removeHostFromPrincipal = true
kerberos.removeRealmFromPrincipal = true
这三个选项中的任何一个都应该对此有所帮助。
属性 kerberos.removeHostFromPrincipal、kerberos.removeRealmFromPrincipal 对我不起作用。
在浏览了 zookeeper 3.4.14 版的源代码后,我将上面的 属性 作为 JVM 参数传递,例如
-Dzookeeper.kerberos.removeHostFromPrincipal=true
-Dzookeeper.kerberos.removeRealmFromPrincipal=true
此外,在我的情况下,因为它是跨域票证身份验证的情况,所以我添加了如下身份验证规则:
-Dzookeeper.security.auth_to_local=RULE:[2:](.*)
现在我的主题 ACLS 看起来像这样
getAcl /kafka-cluster/config/topics/test20
'world,'anyone
: r
'sasl,'zookeeper
: cdrwa
我正在尝试在 zookeeper 和 kafka 之间设置一个 kerberos 标识。
我已按照此处提供的配置步骤进行操作:https://docs.confluent.io/4.1.1/kafka/authentication_sasl_gssapi.html#sasl-gssapi-broker。
kafka 代理成功连接到 zookeeper 集合,代理正在 znode 上设置 ACL。
在 Zookeeper 中,我可以看到 znode /brokers/ids,但是 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 文件的客户端部分使用它?如果是,我可以在每个代理上共享该用户的密钥表吗?
感谢您的帮助。
您可以从主体中删除主机并为所有代理使用相同的主机,您可以手动设置 acls(不理想),或者您也可以将这些添加到您的 zookeeper 配置中
kerberos.removeHostFromPrincipal = true
kerberos.removeRealmFromPrincipal = true
这三个选项中的任何一个都应该对此有所帮助。
属性 kerberos.removeHostFromPrincipal、kerberos.removeRealmFromPrincipal 对我不起作用。 在浏览了 zookeeper 3.4.14 版的源代码后,我将上面的 属性 作为 JVM 参数传递,例如
-Dzookeeper.kerberos.removeHostFromPrincipal=true
-Dzookeeper.kerberos.removeRealmFromPrincipal=true
此外,在我的情况下,因为它是跨域票证身份验证的情况,所以我添加了如下身份验证规则:
-Dzookeeper.security.auth_to_local=RULE:[2:](.*)
现在我的主题 ACLS 看起来像这样
getAcl /kafka-cluster/config/topics/test20
'world,'anyone
: r
'sasl,'zookeeper
: cdrwa