跳至內容

如何對在使用已啟用 SASL/SCRAM 驗證的 Amazon MSK 叢集時,發生的驗證與權限問題進行疑難排解?

1 分的閱讀內容
0

當我使用已啟用 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 密碼

AWS 官方已更新 9 個月前