6.4. 授权
Kafka 代理中的授权使用授权器插件实现。
在本节中,我们描述了如何使用 Kafka 提供的 StandardAuthorizer
插件。
或者,您可以使用自己的授权插件。例如,如果您使用 基于 OAuth 2.0 令牌的身份验证,您可以使用 OAuth 2.0 授权。
6.4.1. 启用 ACL 授权器
编辑 Kafka 配置属性文件以添加 ACL 授权器。通过在 authorizer.class.name
属性中指定完全限定名称来启用授权器:
启用授权器
authorizer.class.name=org.apache.kafka.metadata.authorizer.StandardAuthorizer
6.4.1.1. ACL 规则
ACL 授权器使用 ACL 规则来管理 Kafka 代理的访问。
ACL 规则以以下格式定义:
主体 P 被允许/拒绝来自主机 H的 <kafka_resource> R on <kafka_resource> R
例如,可以设置一个规则,以便用户 John 可以查看 主机 127.0.0.1 中的主题 注释。Host 是 John 进行连接的机器的 IP 地址。
在大多数情况下,用户是生成者或消费者应用程序:
Consumer01 可以对来自主机 127.0.0.1 的消费者组账户有写入权限。
如果给定资源没有 ACL 规则,则所有操作都会被拒绝。通过在 Kafka 配置文件中将属性 allow.everyone.if.no.acl.found
设置为 true
来更改此行为。
6.4.1.2. 主体
principal(主体)代表用户的身份。ID 格式取决于客户端用来连接到 Kafka 的身份验证机制:
-
在没有身份验证的情况下连接时,user
:ANONYMOUS
. 使用简单身份验证机制(如 PLAIN 或 SCRAM)连接时,user:<
username
>。例如
User:admin
orUser:user1
。使用 TLS 客户端身份验证
连接时,user:<DistinguishedName
>。例如
User:CN=user1,O=MyCompany,L=Prague,C=CZ
。-
使用
Kerberos 连接时,user:<Kerberos username
>。
DistinguishedName 是与客户端证书区分的名称。
Kerberos 用户名是 Kerberos 主体的主要部分,在使用 Kerberos 连接时默认使用它。您可以使用 sasl.kerberos.principal.to.local.rules
属性来配置 Kafka 主体如何从 Kerberos 主体构建。
6.4.1.3. 用户身份验证
要使用授权,您需要启用身份验证并供您的客户端使用。否则,所有连接都将具有主体 User:ANONYMOUS
。
有关验证方法的详情请参考 第 6.3 节 “身份验证”。
6.4.1.4. 超级用户
超级用户被允许执行所有操作,无论 ACL 规则是什么。
超级用户使用属性 super.users
在 Kafka 配置文件中定义。
例如:
super.users=User:admin,User:operator
6.4.1.5. 副本代理身份验证
启用授权后,它将适用于所有监听程序和所有连接。这包括用于在代理间复制数据的 inter-broker 连接。如果启用授权,请确保使用身份验证进行代理连接,并授予代理使用足够权利的用户。例如,如果代理之间的身份验证使用 kafka-broker
用户,则超级用户配置必须包含用户名 super.users=User:kafka-broker
。
有关您可以使用 ACL 控制的 Kafka 资源操作的更多信息,请参阅 Apache Kafka 文档。
6.4.2. 添加 ACL 规则
当使用 ACL 授权器根据访问控制列表(ACL)控制对 Kafka 的访问时,您可以使用 kafka-acls.sh
工具添加新的 ACL 规则。
使用 kafka-acls.sh
参数选项来添加、列出和删除 ACL 规则,并执行其他功能。参数需要双假设惯例,如 --add
。
先决条件
- 已创建并授予了访问 Kafka 资源的适当权限。
- 每个主机上安装了 Apache Kafka 的流,且配置文件可用。
- 在 Kafka 代理中启用授权。
流程
使用
--add
选项运行kafka-acls.sh
。示例:
允许使用
MyConsumerGroup
消费者组从myTopic
读取user1
和user2
访问权限。opt/kafka/bin/kafka-acls.sh --bootstrap-server localhost:9092 --add --operation Read --topic myTopic --allow-principal User:user1 --allow-principal User:user2 opt/kafka/bin/kafka-acls.sh --bootstrap-server localhost:9092 --add --operation Describe --topic myTopic --allow-principal User:user1 --allow-principal User:user2 opt/kafka/bin/kafka-acls.sh --bootstrap-server localhost:9092 --add --operation Read --operation Describe --group MyConsumerGroup --allow-principal User:user1 --allow-principal User:user2
拒绝
user1
访问从 IP 地址主机127.0.0.1
读取myTopic
。opt/kafka/bin/kafka-acls.sh --bootstrap-server localhost:9092 --add --operation Describe --operation Read --topic myTopic --group MyConsumerGroup --deny-principal User:user1 --deny-host 127.0.0.1
添加
user1
作为带有MyConsumerGroup
的myTopic
的消费者。opt/kafka/bin/kafka-acls.sh --bootstrap-server localhost:9092 --add --consumer --topic myTopic --group MyConsumerGroup --allow-principal User:user1
6.4.3. 列出 ACL 规则
当使用 ACL 授权器根据访问控制列表(ACL)控制对 Kafka 的访问时,您可以使用 kafka-acls.sh
工具来列出现有的 ACL 规则。
先决条件
流程
使用
--list
选项运行kafka-acls.sh
。例如:
opt/kafka/bin/kafka-acls.sh --bootstrap-server localhost:9092 --list --topic myTopic Current ACLs for resource `Topic:myTopic`: User:user1 has Allow permission for operations: Read from hosts: * User:user2 has Allow permission for operations: Read from hosts: * User:user2 has Deny permission for operations: Read from hosts: 127.0.0.1 User:user1 has Allow permission for operations: Describe from hosts: * User:user2 has Allow permission for operations: Describe from hosts: * User:user2 has Deny permission for operations: Describe from hosts: 127.0.0.1
6.4.4. 删除 ACL 规则
当使用 ACL 授权器根据访问控制列表(ACL)控制对 Kafka 的访问时,您可以使用 kafka-acls.sh
工具删除现有 ACL 规则。
先决条件
流程
使用
--remove
选项运行kafka-acls.sh
。示例:
删除 ACL,允许
user1
和user2
使用MyConsumerGroup
消费者组从myTopic
读取。opt/kafka/bin/kafka-acls.sh --bootstrap-server localhost:9092 --remove --operation Read --topic myTopic --allow-principal User:user1 --allow-principal User:user2 opt/kafka/bin/kafka-acls.sh --bootstrap-server localhost:9092 --remove --operation Describe --topic myTopic --allow-principal User:user1 --allow-principal User:user2 opt/kafka/bin/kafka-acls.sh --bootstrap-server localhost:9092 --remove --operation Read --operation Describe --group MyConsumerGroup --allow-principal User:user1 --allow-principal User:user2
删除 ACL 添加
user1
作为带有MyConsumerGroup
的myTopic
的消费者。opt/kafka/bin/kafka-acls.sh --bootstrap-server localhost:9092 --remove --consumer --topic myTopic --group MyConsumerGroup --allow-principal User:user1
删除 ACL 拒绝
user1
从 IP 地址主机127.0.0.1
读取myTopic
的访问。opt/kafka/bin/kafka-acls.sh --bootstrap-server localhost:9092 --remove --operation Describe --operation Read --topic myTopic --group MyConsumerGroup --deny-principal User:user1 --deny-host 127.0.0.1