跳至內容

如何解決使用 IAM 或 SASL/SCRAM 用戶端身分驗證連線到 Amazon MSK 叢集時,發生的錯誤?

2 分的閱讀內容
0

我無法將 Amazon Managed Streaming for Apache Kafka (Amazon MSK) 生產者、取用者或連接器用戶端連線到已啟用用戶端身分驗證的 MSK 叢集。身分驗證嘗試失敗並出現錯誤。

解決方法

IAM 用戶端身分驗證錯誤

無法完成身分驗證,存取遭拒

若您透過 AWS Identity and Access Management (IAM) 進行身分驗證,則可能會看到以下其中一則錯誤訊息:

  • 「Connection to node -1 (b-1.your-cluster.abc123.c2.kafka.us-east-1.amazonaws.com) failed authentication due to: Access denied」
  • 「org.apache.kafka.common.errors.SaslAuthenticationException: Access denied」

如果存取政策、權限界限及服務控制政策 (SCP) 阻止未符合必要授權的使用者,則會出現上述錯誤。

若要解決此問題,請使用 IAM 存取控制來確保 IAM 角色可以執行叢集作業。

SaslAuthenticationException

您會收到以下其中一則錯誤訊息:

  • 「org.apache.kafka.common.errors.SaslAuthenticationException: Too many connects」
  • 「org.apache.kafka.common.errors.SaslAuthenticationException: Internal error」

當您在具有 IAM 存取控制的 kafka.t3.small 代理程式類型上執行叢集,並且超出連線配額時,則會出現上述錯誤。kafka.t3.small 執行個體類型每個代理程式每秒僅接受一個 TCP 連線。如果連線數超過配額,建立測試就會失敗。如需更多資訊,請參閱Amazon MSK 與 IAM 搭配運作的方式

若要修正此問題,請在 Amazon MSK Connect 工作程序組態中,將 reconnect.backoff.msreconnect.backoff.max.ms 的值更新為 1000 以上。接著,請升級至較大的代理程式執行個體類型,例如 kafka.m5.large。如需更多資訊,請參閱適當調整叢集大小: 每個代理程式的標準分區數量

SASL/SCRAM 用戶端身分驗證錯誤

未開啟用戶端 SASL 機制

您會看到以下其中一則錯誤訊息:

  • 「Connection to node -1 (b-1-testcluster.abc123.c7.kafka.us-east-1.amazonaws.com/3.11.111.123:9098) failed authentication due to: Client SASL mechanism 'SCRAM-SHA-512' not enabled in the server, enabled mechanisms are [AWS_MSK_IAM]」
  • 「Connection to node -1 (b-1-testcluster.abc123.c7.kafka.us-east-1.amazonaws.com/3.11.111.123:9096) failed authentication due to: Client SASL mechanism 'AWS_MSK_IAM' not enabled in the server, enabled mechanisms are [SCRAM-SHA-512]」

如果執行叢集作業的命令中,用戶端屬性檔案的連接埠號碼不符合 Authentication and Security Layer/Salted Challenge Response Authentication Mechanism (SASL/SCRAM) 機制,就會出現上述錯誤。

若要與使用 SASL 身分驗證的叢集代理程式通訊,請使用連接埠 9096 從 AWS 內部存取,並使用連接埠 9196 進行公共存取。

若要與使用 IAM 存取控制的代理程式通訊,請使用連接埠 9098 從 AWS 內部存取,並使用連接埠 9198 進行公共存取。

SASL 憑證身分驗證錯誤

您收到以下錯誤訊息:

「Connection to node -1 (b-3.testcluster.abc123.c2.kafka.us-east-1.amazonaws.com/10.11.111.123:9096) failed authentication due to: Authentication failed during authentication due to invalid credentials with SASL mechanism SCRAM-SHA-512」

上述錯誤是由於您使用的憑證無效所致。請確認您已將使用者憑證儲存在 AWS Secrets Manager,並將這些憑證與 MSK 叢集建立關聯。

當您透過連接埠 9096 存取叢集時,Secrets Manager 中的使用者和密碼必須與用戶端屬性一致。

當您執行 get-secret-value 命令擷取祕密時,請確認 Secrets Manager 中的密碼未包含特殊字元。

ClusterAuthorizationException

您收到以下錯誤訊息:

「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」

如果您為 MSK 叢集開啟 SASL/SCRAM 身分驗證,並在叢集的存取控制清單 (ACL) 中將 resourceType 設為 CLUSTER,且將 operation 設為 CLUSTER_ACTION,就會出現上述錯誤。

MSK 叢集不支援上述設定,因為這些設定會阻止內部 Apache Kafka 複寫。在代理程式間通訊中,代理程式的身分會顯示為 ANONYMOUS。如果您的叢集必須支援 ACL 並使用 SASL/SCRAM 身分驗證,請允許 ANONYMOUS 使用者使用 ALL 操作。

對於 ZooKeeper 叢集,請執行以下命令,將 ALL 操作授予 ANONYMOUS 使用者:

./kafka-acls.sh --authorizer-properties zookeeper.connect=example-ZookeeperConnectString --add --allow-principal User:ANONYMOUS --operation ALL --cluster

對於 KRaft 模式叢集,請執行以下命令,將 ALL 操作授予 ANONYMOUS 使用者:

./kafka-acls.sh --bootstrap-server BootstrapBrokerString --command-config client.properties --add --allow-principal User:ANONYMOUS --operation All --cluster

相關資訊

如何對連線至 Amazon MSK 叢集時遇到的錯誤進行疑難排解?

AWS 官方已更新 7 個月前