當我使用已啟用 SASL/SCRAM 驗證的 Amazon Managed Streaming for Apache Kafka (Amazon MSK) 叢集時,遇到驗證與權限問題。
解決方法
在代理程式日誌中出現「ClusterAuthorizationException」錯誤
當您存取 Amazon MSK 叢集時,您可能會收到以下錯誤訊息:「org.apache.kafka.common.errors.ClusterAuthorizationException: Request Request(processor=11, connectionId=INTERNAL_IP-INTERNAL_IP-0, session=Session(User:ANONYMOUS,/INTERNAL_IP), listenerName=ListenerName(REPLICATION_SECURE), securityProtocol=SSL, buffer=null) is not authorized.」
當以下兩個條件同時成立時,會出現上述錯誤:
- 您的 Amazon MSK 叢集已啟用 SASL/SCRAM 驗證。
- 您在叢集的存取控制清單 (ACL) 中,將 resourceType 設為 CLUSTER,並將 operation 設為 CLUSTER_ACTION。
Amazon MSK 叢集不支援上述設定,因為這些設定會阻止內部 Apache Kafka 複寫。當上述條件成立時,代理程式在代理程式之間通訊中為 ANONYMOUS。如果您需要在使用 SASL/SCRAM 驗證時,讓叢集支援這些 ACL,則必須為 ANONYMOUS 使用者授予 ALL 作業的權限。如此可防止代理程式之間複寫的限制。
若要為 ANONYMOUS 使用者授予權限,請執行以下命令:
./kafka-acls.sh --authorizer-properties
zookeeper.connect=example-ZookeeperConnectString --add --allow-principal
User:ANONYMOUS --operation ALL --cluster
SASL 驗證錯誤
如果您變更了 AWS Secrets Manager 密碼的使用者名稱或密碼,但舊的憑證仍然有效,您會收到驗證錯誤。
一個 AWS Secrets Manager 密碼只能與單一使用者建立關聯。當使用者不再需要存取叢集時,您必須取消關聯該密碼並更新 ACL。
當您更新密碼的使用者名稱時,AWS Secrets Manager 不會自動取消關聯舊的使用者名稱。最佳實務是為新使用者建立新的密碼。如果您需要使用舊的密碼,請先取消關聯該密碼,然後更新憑證,再重新關聯密碼。如需更多資訊,請參閱使用者操作。
非管理員使用者可在未授權的情況下建立和修改 ACL
根據預設,所有使用者皆有權限建立或修改 ACL。若要防止非管理員使用者透過 Apache ZooKeeper 修改 ACL,請將 ZooKeeper 節點置於獨立的安全群組。另外,請確保所有 Apache Kafka 命令與用戶端連線均透過啟動程序代理程式,而非 Apache ZooKeeper 執行。
**注意:**您可以使用啟動程序字串來執行所有 Apache Kafka 作業。
相關資訊
Apache Kafka ACLs
Scram 密碼