4.7. 授权


Kafka 代理中的授权使用授权器插件实现。

在本节中,我们描述了如何使用 Kafka 提供的 AclAuthorizer 插件。

或者,您可以使用自己的授权插件。例如,如果您使用 基于 OAuth 2.0 令牌的身份验证,您可以使用 OAuth 2.0 授权

4.7.1. 简单 ACL 授权器

Authorizer 插件(包括 AclAuthorizer )通过 authorizer.class.name 属性启用:

authorizer.class.name=kafka.security.auth.AclAuthorizer
Copy to Clipboard Toggle word wrap

所选授权器需要完全限定名称。对于 AclAuthorizer,完全限定名称为 kafka.security.auth.AclAuthorizer

4.7.1.1. ACL 规则

AclAuthorizer 使用 ACL 规则来管理 Kafka 代理的访问。

ACL 规则的格式定义:

主体 P 允许/拒绝来自主机 H 的 Kafka 资源 R 中的操作 O

例如,可以设置一个规则以便用户:

John 可以查看 主机 127.0.0.1中的主题 注释

Host 是 John 进行连接的机器的 IP 地址。

在大多数情况下,用户是生成者或消费者应用程序:

Consumer01 可以对来自主机 127.0.0.1 的消费者组账户写入权限。

如果没有 ACL 规则

如果给定资源没有 ACL 规则,则所有操作都会被拒绝。通过在 Kafka 配置文件 /opt/kafka/config/server.properties 中将属性 allow.everyone.if.no.acl.found 设置为 true 来更改此行为。

4.7.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 主体构建。

4.7.1.3. 用户身份验证

要使用授权,您需要启用身份验证并供您的客户端使用。否则,所有连接都将具有主体 User:ANONYMOUS

有关身份验证方法的更多信息,请参阅加密和身份验证

4.7.1.4. 超级用户

超级用户被允许执行所有操作,无论 ACL 规则是什么。

超级用户使用属性 super.users 在 Kafka 配置文件中定义。

例如:

super.users=User:admin,User:operator
Copy to Clipboard Toggle word wrap

4.7.1.5. 副本代理身份验证

启用授权后,它将适用于所有监听程序和所有连接。这包括用于在代理间复制数据的 inter-broker 连接。如果启用授权,请确保使用身份验证进行代理连接,并授予代理使用足够权利的用户。例如,如果代理之间的身份验证使用 kafka-broker 用户,则超级用户配置必须包含用户名 super.users=User:kafka-broker

4.7.1.6. 支持的资源

您可以将 Kafka ACL 应用到这些资源类型:

  • topics
  • 消费者组
  • 集群
  • TransactionId
  • DelegationToken

4.7.1.7. 支持的操作

AclAuthorizer 授权对资源的操作。

下表中带有 X 的字段标记每个资源支持的操作。

Expand
表 4.1. 资源支持的操作
 topics消费者组集群

X

X

 

X

  

创建

  

X

删除

X

  

更改

X

  

Describe

X

X

X

ClusterAction

  

X

All

X

X

X

4.7.1.8. ACL 管理选项

ACL 规则使用 bin/kafka-acls.sh 工具进行管理,该工具作为 Kafka 发布软件包的一部分提供。

使用 kafka-acls.sh 参数选项来添加、列出和删除 ACL 规则,并执行其他功能。

参数需要双假设惯例,如 --add

Expand
选项类型描述默认

add

操作

添加 ACL 规则。

 

remove

操作

删除 ACL 规则。

 

list

操作

列出 ACL 规则。

 

authorizer

操作

授权者的完全限定类名称。

kafka.security.auth.AclAuthorizer

authorizer-properties

Configuration

传递给授权器进行初始化的键/值对。

对于 AclAuthorizer,示例值为:zookeeper.connect=zoo1.my-domain.com:2181

 

bootstrap-server

资源

主机/端口对以连接到 Kafka 集群。

使用这个选项或 authorizer 选项,不能同时使用它们。

command-config

资源

要传递给 Admin Client 的配置文件,与 bootstrap-server 参数结合使用。

 

cluster

资源

将集群指定为 ACL 资源。

 

topic

资源

将主题名称指定为 ACL 资源。

一个星号(*),用作通配符转换为 所有主题

单个命令可以指定多个 --topic 选项。

 

group

资源

将消费者组名称指定为 ACL 资源。

单个命令可以指定多个 --group 选项。

 

transactional-id

资源

将事务 ID 指定为 ACL 资源。

事务发送意味着,生产者发送到多个分区的所有消息都必须成功发送或不发送它们。

使用通配符星号 (*) 代表所有 ID

 

delegation-token

资源

将委托令牌指定为 ACL 资源。

使用通配符星号 (*) 代表所有令牌

 

resource-pattern-type

Configuration

指定 add 参数的资源模式,或为 listremove 参数指定资源模式过滤器值。

使用 literalprefixed 作为一个资源名称的资源特征类型。

使用 anymatch 作为资源模式过滤器值,或者特定模式类型过滤器。

literal

allow-principal

主体

添加到允许 ACL 规则的主体。

单个命令可以指定多个 --allow-principal 选项。

 

deny-principal

主体

添加到拒绝 ACL 规则的主体。

单个命令可以指定多个 --deny-principal 选项。

 

主体

主体

list 参数一起使用的主体名称,用于返回主体的 ACL 列表。

单个命令可以指定多个 --principal 选项。

 

allow-host

主机

允许访问 --allow-principal 中列出的主体的 IP 地址。

不支持主机名或 CIDR 范围。

如果指定了 --allow-principal,则默认为 * 代表"所有主机"。

deny-host

主机

拒绝访问 --deny-principal 中列出的主体的 IP 地址。

不支持主机名或 CIDR 范围。

如果指定了 --deny-principal,则默认为 * 代表"所有主机"。

operation

操作

允许或拒绝操作。

单个命令可以指定多个Multiple --operation 选项。

All

producer

快捷键

允许或拒绝消息制作者需要的所有操作的快捷方式(主题中为 WRITE 和 DESCRIBE,集群中为 CREATE)。

 

consumer

快捷键

允许或拒绝消息消费者所需的所有操作的快捷方式(主题为READ 和 DESCRIBE,READ on consumer group)。

 

idempotent

快捷键

--producer 参数一起使用时启用 idempotence 的快捷方式,以便消息精确向分区发送一次。

如果制作者被授权根据特定的事务 ID 发送消息,则会自动启用 Idepmotence。

 

force

快捷键

接受所有查询且不提示的快捷方式。

 

4.7.2. 启用授权

此流程描述了如何为 Kafka 代理中的授权启用 AclAuthorizer 插件。

先决条件

流程

  1. 编辑 /opt/kafka/config/server.properties Kafka 配置文件,以使用 AclAuthorizer

    authorizer.class.name=kafka.security.auth.AclAuthorizer
    Copy to Clipboard Toggle word wrap
  2. (重新)启动 Kafka 代理。

其他资源

4.7.3. 添加 ACL 规则

AclAuthorizer 使用访问控制列表(ACL),它定义了一组规则来描述用户可以执行的操作。

此流程描述了如何在 Kafka 代理中使用 AclAuthorizer 插件时添加 ACL 规则。

使用 kafka-acls.sh 工具添加规则,并存储在 ZooKeeper 中。

先决条件

流程

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

    示例:

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

      bin/kafka-acls.sh --authorizer-properties zookeeper.connect=zoo1.my-domain.com:2181 --add --operation Read --topic myTopic --allow-principal User:user1 --allow-principal User:user2
      
      bin/kafka-acls.sh --authorizer-properties zookeeper.connect=zoo1.my-domain.com:2181 --add --operation Describe --topic myTopic --allow-principal User:user1 --allow-principal User:user2
      
      bin/kafka-acls.sh --authorizer-properties zookeeper.connect=zoo1.my-domain.com:2181 --add --operation Read --operation Describe --group MyConsumerGroup --allow-principal User:user1 --allow-principal User:user2
      Copy to Clipboard Toggle word wrap
    • 拒绝 user1 访问从 IP 地址主机 127.0.0.1 读取 myTopic

      bin/kafka-acls.sh --authorizer-properties zookeeper.connect=zoo1.my-domain.com:2181 --add --operation Describe --operation Read --topic myTopic --group MyConsumerGroup --deny-principal User:user1 --deny-host 127.0.0.1
      Copy to Clipboard Toggle word wrap
    • 添加 user1 作为带有 MyConsumerGroupmyTopic 的消费者。

      bin/kafka-acls.sh --authorizer-properties zookeeper.connect=zoo1.my-domain.com:2181 --add --consumer --topic myTopic --group MyConsumerGroup --allow-principal User:user1
      Copy to Clipboard Toggle word wrap

其他资源

4.7.4. 列出 ACL 规则

此流程描述了如何在 Kafka 代理中使用 AclAuthorizer 插件时列出现有的 ACL 规则。

使用 kafka-acls.sh 实用程序列出规则。

先决条件

流程

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

    例如:

    $ bin/kafka-acls.sh --authorizer-properties zookeeper.connect=zoo1.my-domain.com:2181 --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
    Copy to Clipboard Toggle word wrap

其他资源

4.7.5. 删除 ACL 规则

此流程描述了如何在 Kafka 代理中使用 AclAuthorizer 插件时删除 ACL 规则。

使用 kafka-acls.sh 工具删除规则。

先决条件

流程

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

    示例:

  • 删除 ACL,允许 user1user2 使用 MyConsumerGroup 消费者组从 myTopic 读取。

    bin/kafka-acls.sh --authorizer-properties zookeeper.connect=zoo1.my-domain.com:2181 --remove --operation Read --topic myTopic --allow-principal User:user1 --allow-principal User:user2
    
    bin/kafka-acls.sh --authorizer-properties zookeeper.connect=zoo1.my-domain.com:2181 --remove --operation Describe --topic myTopic --allow-principal User:user1 --allow-principal User:user2
    
    bin/kafka-acls.sh --authorizer-properties zookeeper.connect=zoo1.my-domain.com:2181 --remove --operation Read --operation Describe --group MyConsumerGroup --allow-principal User:user1 --allow-principal User:user2
    Copy to Clipboard Toggle word wrap
  • 删除 ACL 添加 user1 作为带有 MyConsumerGroupmyTopic 的消费者。

    bin/kafka-acls.sh --authorizer-properties zookeeper.connect=zoo1.my-domain.com:2181 --remove --consumer --topic myTopic --group MyConsumerGroup --allow-principal User:user1
    Copy to Clipboard Toggle word wrap
  • 删除 ACL 拒绝 user1 从 IP 地址主机 127.0.0.1 读取 myTopic 的访问。

    bin/kafka-acls.sh --authorizer-properties zookeeper.connect=zoo1.my-domain.com:2181 --remove --operation Describe --operation Read --topic myTopic --group MyConsumerGroup --deny-principal User:user1 --deny-host 127.0.0.1
    Copy to Clipboard Toggle word wrap

其他资源

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat