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:adminUser: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 的字段标记每个资源支持的操作。

表 4.1. 资源的操作
 主题消费者组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(默认)

add

操作

添加 ACL 规则.

 

remove

操作

删除 ACL 规则.

 

list

操作

列出 ACL 规则.

 

authorizer

操作

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

kafka.security.auth.SimpleAclAuthorizer

authorizer-properties

Configuration

传递给授权者的键/值对进行初始化.

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

 

bootstrap-server

资源

用于连接到 Kafka 集群的主机/端口对。

使用这个选项或 authorizer 选项,而不是两者。

command-config

资源

要传递给 Admin 客户端的配置属性文件,与 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 选项。

 

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 在使用者组中)。

 

idempotent

快捷键

--producer 参数一起使用时启用幂等的快捷方式,以便信息只传送一次到分区。

如果生产者有权根据特定的事务 ID 发送消息,Idepmotence 会自动启用。

 

force

快捷键

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

 
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.