6.4. 授权
Kafka 代理中的授权使用授权器插件实现。
在本节中,我们描述了如何使用 Kafka 提供的 AclAuthorizer 插件。
或者,您可以使用自己的授权插件。例如,如果您使用 基于 OAuth 2.0 令牌的身份验证,您可以使用 OAuth 2.0 授权。
6.4.1. 启用 ACL 授权器 复制链接链接已复制到粘贴板!
编辑 /opt/kafka/config/server.properties 文件以添加 ACL 授权器。通过在 authorizer.class.name 属性中指定完全限定名称来启用授权器:
启用授权器
authorizer.class.name=kafka.security.authorizer.AclAuthorizer
authorizer.class.name=kafka.security.authorizer.AclAuthorizer
对于 AclAuthorizer,完全限定名称为 kafka.security.authorizer.AclAuthorizer。
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 配置文件 /opt/kafka/config/server.properties 中将属性 allow.everyone.if.no.acl.found 设置为 true 来更改此行为。
6.4.1.2. 主体 复制链接链接已复制到粘贴板!
principal(主体)代表用户的身份。ID 格式取决于客户端用来连接到 Kafka 的身份验证机制:
-
在没有身份验证的情况下连接时,user
:ANONYMOUS. 使用简单身份验证机制(如 PLAIN 或 SCRAM)连接时,user:<
username>。例如
User:adminorUser: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
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
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:user2Copy to Clipboard Copied! Toggle word wrap Toggle overflow 拒绝
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
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.1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 添加
user1作为带有MyConsumerGroup的myTopic的消费者。opt/kafka/bin/kafka-acls.sh --bootstrap-server localhost:9092 --add --consumer --topic myTopic --group MyConsumerGroup --allow-principal User:user1
opt/kafka/bin/kafka-acls.sh --bootstrap-server localhost:9092 --add --consumer --topic myTopic --group MyConsumerGroup --allow-principal User:user1Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.4.3. 列出 ACL 规则 复制链接链接已复制到粘贴板!
当使用 ACL 授权器根据访问控制列表(ACL)控制对 Kafka 的访问时,您可以使用 kafka-acls.sh 工具来列出现有的 ACL 规则。
先决条件
流程
使用
--list选项运行kafka-acls.sh。例如:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
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
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:user2Copy to Clipboard Copied! Toggle word wrap Toggle overflow 删除 ACL 添加
user1作为带有MyConsumerGroup的myTopic的消费者。opt/kafka/bin/kafka-acls.sh --bootstrap-server localhost:9092 --remove --consumer --topic myTopic --group MyConsumerGroup --allow-principal User:user1
opt/kafka/bin/kafka-acls.sh --bootstrap-server localhost:9092 --remove --consumer --topic myTopic --group MyConsumerGroup --allow-principal User:user1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 删除 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
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.1Copy to Clipboard Copied! Toggle word wrap Toggle overflow