您的位置:

Kafka ACL 全面解析

一、Kafka ACL 介绍

Kafka ACL(Access Control Lists)又称为权限控制列表,是 Kafka 集群中控制访问和权限的一种方式。Kafka ACL 可以保证 Kafka 集群内部的安全,授权用户在 Kafka 集群中更细粒度的操作权限控制,例如控制主题、分区的读写、消费组的订阅操作等。

Kafka 为了满足不同的业务需求,提供了两种 ACL 格式:Kafka 标准 ACL 格式和 IBMs Ranger 兼容格式。其中标准 ACL 格式是 Kafka 自带,Ranger 格式是 IBM 提供的 Kafka 授权管理插件。

在使用 Kafka ACL 的过程中,我们需要进行以下三个步骤:

1. 定义访问控制列表规则

2. 为 Kafka 集群配置 ACL 规则

3. 对 Kafka 集群进行访问测试

二、Kafka ACL 格式

Kafka ACL 规则由三部分组成:Principal、Operation 和 Resource。

Principal 表示用户或者用户组。在 Kafka 中可以通过配置文件的方式进行配置。

Operation 表示各种操作,包括读操作、写操作、创建主题和删除主题等。

Resource 表示要进行操作的主题或者分区。

Kafka ACL 支持的操作类型:

1. Read:读取消息

2. Write:写入消息

3. Create:创建主题、分区等资源

4. Delete:删除主题、分区等资源

5. Alter:修改主题、分区等资源的属性

6. Describe:查看主题、分区等资源的元数据

7. ClusterAction:执行集群管理操作

三、使用 Kafka Standard ACL 格式配置 ACL

使用标准 ACL 格式配置 Kafka ACL 的步骤如下:

1. 配置 server.properties 文件中的 authorizer.class.name 属性为 Kafka authorizer 类

2. 使用 Kafka AclCommand 工具创建 Kafka ACL 规则

3. 在 server.properties 文件中配置 superusers 属性,这是一个超级用户列表,具有最高权限,可以访问所有资源

1. 配置 authorizer.class.name 属性

security.inter.broker.protocol=PLAINTEXTSASL 
sasl.enabled.mechanisms=PLAIN 
sasl.mechanism.inter.broker.protocol=PLAIN 
authorizer.class.name=kafka.security.auth.SimpleAclAuthorizer 
allow.everyone.if.no.acl.found=false 
allow.auto.topic.create=true

2. 使用 Kafka AclCommand 工具创建 Kafka ACL 规则

在创建 Kafka ACL 规则之前,需要定义 Principal、Operation 和 Resource,定义方式如下:

1. 定义 Principal:可以是用户或者是用户组

2. 定义 Operation:各种操作类型

3. 定义 Resource:要进行操作的主题或者分区

具体命令如下:

kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:2181 --add --allow-principal User:alice --operation Read --operation Create --topic test

3. 配置 superusers 属性

super.users=User:securekafkasuperusers

四、使用 IBM Ranger 兼容格式配置 ACL

Kafka 虽然提供了标准 ACL 格式,但是在实际应用中,我们也可以选择使用 IBM Ranger 兼容格式。IBM Ranger 集成了强大的授权管理插件,可以实现对 Kafka 集群的细粒度控制。

使用 Ranger 配置 Kafka ACL 的步骤如下:

1. 安装 IBM Ranger 插件

2. 配置 Ranger

3. 在 Kafka 中配置认证机制

4. 在 server.properties 文件中配置 authorizer.class.name 为 IBM Ranger authorizer 类名

1. 安装 IBM Ranger 插件

下载 IBM Ranger 安装包,解压后运行安装脚本。

2. 配置 Ranger

在 Ranger Web UI 中创建 Kafka 服务,然后在服务中添加 ACL 规则。

3. 配置认证机制

security.inter.broker.protocol=PLAINTEXTSASL 
sasl.enabled.mechanisms=GSSAPI 
sasl.kerberos.service.name=kafka 
sasl.kerberos.principal.to.local.rules=RULE:[1:$1@$0]([^@]*)@.*$#$1 
zookeeper.set.acl=true 
zookeeper.connection.timeout.ms=6000 
kafka.acl.enable=true 

4. 配置 authorizer.class.name

authorizer.class.name=com.xasecure.authorization.kafka.authorizer.XaSecureKafkaAuthorizer

五、Kafka ACL 权限测试

在进行 Kafka ACL 权限测试时,需要用不同的用户进行测试。

对于标准 ACL 格式配置的 Kafka 集群,使用以下命令进行测试:

kafka-console-producer.sh --broker-list localhost:9092 --topic test --producer.config client.properties
kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning --consumer.config client.properties

对于 Ranger 兼容格式配置的 Kafka 集群,使用以下命令进行测试:

kafka-console-producer.sh --broker-list localhost:9092 --topic test --producer.config client.properties
kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning --consumer.config client.properties

六、总结

Kafka ACL 是一种非常重要的安全机制,可以保证 Kafka 集群的安全和可靠性。使用 Kafka Standard ACL 格式或 IBM Ranger 兼容格式进行配置,在实际应用中都是可行的。在实际操作时,需要根据实际需求进行合理的配置和使用。