一、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 兼容格式进行配置,在实际应用中都是可行的。在实际操作时,需要根据实际需求进行合理的配置和使用。