一、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 兼容格式進行配置,在實際應用中都是可行的。在實際操作時,需要根據實際需求進行合理的配置和使用。
原創文章,作者:DMOJD,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/370356.html