搜索

6.4. 授权

download PDF

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 or User: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

先决条件

流程

  • 使用 --add 选项运行 kafka-acls.sh

    示例:

  • 允许使用 MyConsumerGroup 消费者组从 myTopic 读取 user1user2 访问权限。

    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 作为带有 MyConsumerGroupmyTopic 的消费者。

    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,允许 user1user2 使用 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 作为带有 MyConsumerGroupmyTopic 的消费者。

    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
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.