4.7. 授权
Kafka 代理中的授权是使用授权器插件实现的。
在本节中,我们将介绍如何使用 Kafka 提供的 AclAuthorizer
插件。
或者,您可以使用自己的授权插件。例如,如果您 使用基于 OAuth 2.0 令牌的身份验证,您可以使用 OAuth 2.0 授权。
4.7.1. 简单 ACL 授权器
授权程序插件(包括 AclAuthorizer
)通过 authorizer.class.name
属性启用:
authorizer.class.name=kafka.security.auth.SimpleAclAuthorizer
所选授权人需填写完全限定名称。对于 AclAuthorizer
,完全限定名称为 kafka.security.auth.SimpleAclAuthorizer
。
4.7.1.1. ACL 规则
AclAuthorizer
使用 ACL 规则管理对 Kafka 代理的访问。
ACL 规则以以下格式定义:
允许来自主机 H的 Kafka 资源 R 上的主 P /拒绝操作 O
例如,可以设置规则以便用户:
John 可以查看 主机 127.0.0.1中的主题 注释
主机是 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. 主体
主体 表示用户的身份。ID 的格式取决于客户端用来连接到 Kafka 的身份验证机制:
-
User:ANONYMOUS
无身份验证连接时. User:<username>
使用简单验证机制(如 PLAIN 或 SCRAM)进行连接时.例如
User:admin
或User:user1
。User:<DistinguishedName>
使用 TLS 客户端身份验证进行连接时.例如
User:CN=user1,O=MyCompany,L=Prague,C=CZ
。-
User:<Kerberos username>
使用 Kerberos 进行连接时.
DistinguishedName 是与客户端证书的可分辨名称。
Kerberos 用户名 是 Kerberos 主体的主要部分,在使用 Kerberos 连接时默认使用它。您可以使用 sasl.kerberos.principal.to.local.rules
属性配置从 Kerberos 主体构建 Kafka 主体的方式。
4.7.1.3. 用户验证
要使用授权,您需要启用身份验证并供您的客户端使用。否则,所有连接都有主体 User:ANONYMOUS
。
有关身份验证方法的更多信息,请参阅 加密和身份验证。
4.7.1.4. 超级用户
无论 ACL 规则如何,超级用户都可执行所有操作。
超级用户在 Kafka 配置文件中使用属性 super.users
定义。
例如:
super.users=User:admin,User:operator
4.7.1.5. 副本代理验证
启用授权后,它将应用到所有监听器和所有连接。这包括用于在代理之间复制数据的代理间连接。因此,如果启用授权,请确保您对代理使用身份验证进行间隔,并授予代理使用的用户足够的权限。例如,如果代理之间的身份验证使用 kafka-broker
用户,那么超级用户配置必须包含用户名 super.users=User:kafka-broker
。
4.7.1.6. 支持的资源
您可以将 Kafka ACL 应用到这些资源类型:
- 主题
- 消费者组
- 集群
- transactionID
- DelegationToken
4.7.1.7. 支持的操作
AclAuthorizer
授权对资源的操作.
下表中带有 X
的字段标记每个资源支持的操作。
主题 | 消费者组 | Cluster | |
---|---|---|---|
读 | X | X | |
写 | X | ||
create | 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
。
选项 | 类型 | 描述 | Default(默认) |
---|---|---|---|
| 操作 | 添加 ACL 规则. | |
| 操作 | 删除 ACL 规则. | |
| 操作 | 列出 ACL 规则. | |
| 操作 | 授权人的完全限定类名称。 |
|
| Configuration | 传递给授权者的键/值对进行初始化.
对于 | |
| 资源 | 用于连接到 Kafka 集群的主机/端口对。 |
使用这个选项或 |
| 资源 |
要传递给 Admin 客户端的配置属性文件,与 | |
| 资源 | 将集群指定为 ACL 资源。 | |
| 资源 | 将主题名称指定为 ACL 资源。
星号(
单个命令可以指定多个 | |
| 资源 | 指定使用者组名称作为 ACL 资源。
单个命令可以指定多个 | |
| 资源 | 将事务 ID 指定为 ACL 资源。 事务发送意味着生产者向多个分区发送的所有消息都必须成功发送或全部发送。
星号( | |
| 资源 | 将委派令牌指定为 ACL 资源。
星号( | |
| Configuration |
为
使用
使用 |
|
| 主体 | 添加到允许 ACL 规则中的主体.
单个命令可以指定多个 | |
| 主体 | 添加至拒绝 ACL 规则中的主体.
单个命令可以指定多个 | |
| 主体 |
与
单个命令可以指定多个 | |
| 主机 |
允许访问 不支持主机名或 CIDR 范围。 |
如果指定了 |
| 主机 |
拒绝访问 不支持主机名或 CIDR 范围。 |
如果指定了 |
| 操作 | 允许或拒绝操作.
单个命令可以在单个命令中指定多个Multiple | all |
| 快捷键 | 允许或拒绝消息制作者需要的所有操作的快捷方式(群集上的 WRITE 和 DESCRIBE,即 CREATE)。 | |
| 快捷键 | 允许或拒绝消息使用者需要的所有操作的快捷方式(READ 和 DESCRIBE 针对主题,READ 在使用者组中)。 | |
| 快捷键 |
与 如果生产者有权根据特定的事务 ID 发送消息,Idepmotence 会自动启用。 | |
| 快捷键 | 接受所有查询且不提示的快捷方式。 |