kafka認證和acl
小編:管理員 22閱讀 2022.07.25
kafka附帶一個可插拔的ACL(Access Control List 訪問控制列表),它使用zookeeper來存儲。通過在server.properties中設置authorizer.class.name來啟用:
authorizer.class.name=kafka.security.auth.SimpleAclAuthorizer
Kafka acls的格式為"Principal P is [Allowed/Denied] Operation O From Host H On Resource R”,你可以使用Kafka authorizer CLI 來添加,刪除或查詢所有acl。默認情況下,如果ResourcePatterns與特定的資源R沒有匹配,則除了超級用戶之外,都不允許訪問R。如果要更改該行為,可以在server.properties中包含以下內容。
allow.everyone.if.no.acl.found=true
你也可以在server.properties添加超級用戶,像這樣(注意分隔符是分號,因為SSL的用戶名是逗號)。
super.users=User:Bob;User:Alice
默認情況下,SSL用戶名的格式為“CN=writeuser,OU=Unknown,O=Unknown,L=Unknown,ST=Unknown,C=Unknown”?梢酝ㄟ^在server.properties中設置自定義的PrincipalBuilder來改變它,如下所示:
principal.builder.class=CustomizedPrincipalBuilderClass
可以通過修改server.properties中的sasl.kerberos.principal.to.local.rules自定義規則。sasl.kerberos.principal.to.local.rules的格式是一個列表,其中每個規則的工作方式與Kerberos 配置文件 (krb5.conf)中的auth_to_local相同。 也支持小寫規則,可通過在規則的末尾添加“/L”,強制轉移全部結果為小寫。每個規則都以RULE開頭:并包含一個表達式,格式如下。 有關更多詳細信息,請參閱kerberos文檔。
RULE:[n:string](regexp)s/pattern/replacement/
RULE:[n:string](regexp)s/pattern/replacement/g
RULE:[n:string](regexp)s/pattern/replacement//L
RULE:[n:string](regexp)s/pattern/replacement/g/L
舉個例子,添加規則,將user@MYDOMAIN.COM轉換為用戶,同時保持默認規則,示例如下:
sasl.kerberos.principal.to.local.rules=RULE:[1:$1@$0](.*@MYDOMAIN.COM)s/@.*//,DEFAULT
命令行界面
Kafka認證管理CLI(和其他的CLI腳本)可以在bin目錄中找到。CLI腳本名是kafka-acls.sh。以下列出了所有腳本支持的選項:
選項 | 描述 | 默認 | 類型選擇 |
---|---|---|---|
--add | 添加一個acl | Action | |
--remove | 移除一個acl | Action | |
--list | 列出acl | Action | |
--authorizer | authorizer的完全限定類名 | kafka.security.auth.SimpleAclAuthorizer | Configuration |
--authorizer-properties | key=val,傳給authorizer進行初始化,例如:zookeeper.connect=localhost:2181 | Configuration | |
--cluster | 指定集群作為資源。 | Resource | |
--topic [topic-name] | 指定topic作為資源。 | Resource | |
--group [group-name] | 指定 consumer-group 作為資源。 | Resource | |
-allow-principal |
添加到允許訪問的ACL中,Principal是PrincipalType:name格式。 你可以指定多個。 |
Principal | |
--deny-principal |
添加到拒絕訪問的ACL中,Principal是PrincipalType:name格式。 你可以指定多個。 |
Principal | |
--allow-host | --allow-principal中的principal的IP地址允許訪問。 | 如果--allow-principal指定的默認值是*,則意味著指定“所有主機” | Host |
--deny-host |
允許或拒絕的操作。 有效值為:讀,寫,創建,刪除,更改,描述,ClusterAction,全部 |
ALL | Operation |
--operation | --deny-principal中的principals的IP地址拒絕訪問。 | 如果 --deny-principal指定的默認值是 * 則意味著指定 "所有主機" | Host |
--producer | 為producer角色添加/刪除acl。生成acl,允許在topic上WRITE, DESCRIBE和CREATE集群。 | Convenience | |
--consumer | 為consumer role添加/刪除acl,生成acl,允許在topic上READ, DESCRIBE 和 consumer-group上READ。 | Convenience | |
--force | 假設所有操作都是yes,規避提示 | Convenience |
-
添加acl
假設你要添加一個acl “以允許198.51.100.0和198.51.100.1,Principal為User:Bob和User:Alice對主題是Test-Topic有Read和Write的執行權限” ?赏ㄟ^以下命令實現:bin/kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:2181 --add --allow-principal User:Bob --allow-principal User:Alice --allow-host 198.51.100.0 --allow-host 198.51.100.1 --operation Read --operation Write --topic Test-topic
默認情況下,所有的principal在沒有一個明確的對資源操作訪問的acl都是拒絕訪問的。在極少的情況下,acl允許訪問所有的資源,但一些principal我們可以使用 --deny-principal 和 --deny-host來拒絕訪問。例如,如果我們想讓所有用戶讀取Test-topic,只拒絕IP為198.51.100.3的User:BadBob,我們可以使用下面的命令:
bin/kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:2181 --add --allow-principal User:* --allow-host * --deny-principal User:BadBob --deny-host 198.51.100.3 --operation Read --topic Test-topic
需要注意的是--allow-host和deny-host僅支持IP地址(主機名不支持)。上面的例子中通過指定--topic [topic-name]作為資源選項添加ACL到一個topic。同樣,用戶通過指定--cluster和通過指定--group [group-name]消費者組添加ACL。
-
刪除acl
刪除和添加是一樣的,--add換成--remove選項,要刪除第一個例子中添加的,可以使用下面的命令:bin/kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:2181 --remove --allow-principal User:Bob --allow-principal User:Alice --allow-host 198.51.100.0 --allow-host 198.51.100.1 --operation Read --operation Write --topic Test-topic
-
acl列表
我們可以通過--list選項列出所有資源的ACL。假設要列出Test-topic,我們可以用下面的選項執行CLI所有的ACL:bin/kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:2181 --list --topic Test-topic
-
添加或刪除作為生產者或消費者的principal
acl管理添加/移除一個生產者或消費者principal是最常見的使用情況,所以我們增加更便利的選項處理這些情況。為主題Test-topic添加一個生產者User:Bob,我們可以執行以下命令:bin/kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:2181 --add --allow-principal User:Bob --producer --topic Test-topic
同樣,添加Alice作為主題Test-topic的消費者,用消費者組為Group-1,我們只用 --consumer 選項:
bin/kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:2181 --add --allow-principal User:Bob --consumer --topic test-topic --group Group-1
注意,消費者的選擇,我們還必須指定消費者組。從生產者或消費者角色刪除主體,我們只需要通過--remove選項。
相關推薦
- kafka消費者Java客戶端 一個從kafka集群中獲取消息的java客戶端。kafka客戶端從kafka集群中獲取消息,并透明地處理kafka集群中出現故障broker,透明地調節適應集群中變化的數據分區。也和broker交互,負載平衡消費者。public class KafkaConsumerK,V extends Object implements Consu…
- HanLP《自然語言處理入門》--3.二元語法與中文分詞 文章目錄3. 二元語法與中文分詞3.1 語言模型3.2 中文分詞語料庫3.3 訓練與預測3.4 HanLP分詞與用戶詞典的集成3.5 二元語法與詞典分詞比較3.6 GitHub項目3. 二元語法與中文分詞上一章中我們實現了塊兒不準的詞典分詞,詞典分詞無法消歧。給定兩種分詞結果“商品…