1. 開啟 MSK Public
1.1 配置 MSK 參數
- 進入 MSK 控制臺頁面,點擊左側菜單 Cluster configuration。
- 選擇已有配置,或者創建新配置。
- 在配置中添加參數
allow.everyone.if.no.acl.found=false
- 修改集群配置,選擇到新添加的配置。
1.2 開啟 Public
- 選中集群,進入集群配置頁面,選擇 Properties
- 找到 Networking settings,點擊 Edit 菜單。
- 選擇 Edit public access
2. 注意事項
由于 MSK 開啟 Public 訪問,必須要開啟 SASL/IAM 認證方式。而 Amazon MSK 默認 allow.everyone.if.no.acl.found=true,所有用戶都可以擁有權限,因為 MSK 沒有 super user,但是當將 MSK 開啟 public 之后,這個參數必須設置為 false。因此,如果當集群還未配置任何用戶權限的情況下,將 allow.everyone.if.no.acl.found 設置為 false,會無法使用任何用戶來訪問 MSK。
3. 啟用 SASL 后的解決方案
- 先創建 MSK 集群,開啟 SASL 認證,通過 Secrets Manager,配置用戶名密碼,然后綁定到 MSK 集群,不啟用 Public 訪問。 具體的配置方法,可以參考 MSK Lab Workshop
- MSK 集群啟動后,按如下命令配置用戶權限。
# 設置 MSK Cluster bostrap
export brokerssasl=xxxx:9096,xxxx:9096,xxxx:9096# 生成用戶認證文件
echo -n "security.protocol=SASL_SSL
sasl.mechanism=SCRAM-SHA-512
sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required \\username="<username>" \\password="<password>";
" > /tmp/client.properties_<username>```# 給用戶賦權
bin/kafka-acls.sh --bootstrap-server $brokerssasl \--add --allow-principal User:<username> --operation All --cluster '*' \--command-config /tmp/client.properties_<username>bin/kafka-acls.sh --bootstrap-server $brokerssasl \--add --allow-principal User:<username> --operation All --group '*' \--command-config /tmp/client.properties_<username>```
--add --allow-principal User:<username> --operation All --cluster '*'
沒有包含消費者組權限,因此,還需要單獨再給用戶賦予組權限
- 集群修改配置,添加 allow.everyone.if.no.acl.found=false, 然后啟用 Public
- 通過 public host 驗證用戶訪問
# 設置 MSK Cluster bostrap
export brokerssasl=xxxx:9096,xxxx:9096,xxxx:9096# list
bin/kafka-topics.sh --list --bootstrap-server $brokerssasl --command-config /tmp/client.properties_<username># consumer
$KAFKA_HOME/bin/kafka-console-consumer.sh --bootstrap-server $brokerssasl --group group01 --topic test_topic --consumer.config --command-config /tmp/client.properties_<username>