本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
設定 Lambda 執行角色許可
若要存取 Amazon MSK 叢集,您的函數和事件來源映射需要執行各種 Amazon MSK API 動作的許可。將這些許可新增至函數的執行角色。如果您的使用者需要存取,請將必要的許可新增至使用者或角色的身分政策。
若要涵蓋所有必要的許可,您可以將 AWSLambdaMSKExecutionRole 受管政策連接至執行角色。或者,您可以手動新增每個許可。
基本許可
您的 Lambda 函數執行角色必須具有下列必要許可,才能在 CloudWatch Logs 中建立和存放日誌。
叢集存取許可
Lambda 函數的執行角色必須具有下列許可,Lambda 才能代您存取 Amazon MSK 叢集。
-
kafka:DescribeVpcConnection:僅跨帳戶事件來源映射需要。
-
kafka:ListVpcConnections:執行角色不需要,但建立跨帳戶事件來源映射的 IAM 主體需要。
您只需要新增其中一個 kafka:DescribeCluster 或 kafka:DescribeClusterV2。對於佈建的 Amazon MSK 叢集,任一許可皆可運作。對於無伺服器 Amazon MSK 叢集,您必須使用 kafka:DescribeClusterV2。
注意
Lambda 最後計劃從 AWSLambdaMSKExecutionRole 受管政策中移除 kafka:DescribeCluster 許可。如果您使用此政策,請改用 kafka:DescribeCluster 遷移任何應用程式以使用 kafka:DescribeClusterV2。
VPC 許可
如果您的 Amazon MSK 叢集位於 VPC 的私有子網路中,您的 Lambda 函數必須具有存取 Amazon VPC 資源的額外許可。其中包括您的 VPC、子網路、安全群組和網路介面。函數的執行角色必須具有下列許可:
可選的許可。
您的 Lambda 函數可能需要許可,才能:
-
如果您使用 SASL/SCRAM 身分驗證,請存取您的 SCRAM 秘密。這可讓您的函數使用使用者名稱和密碼連線至 Kafka。
-
如果您使用 SASL/SCRAM 或 mTLS 身分驗證,請描述您的 Secrets Manager 秘密。這可讓您的函數擷取安全連線所需的登入資料或憑證。
-
如果您想要加密篩選條件,請存取 AWS KMS 客戶受管金鑰。這有助於保持訊息篩選規則的秘密。
-
如果您使用具有身分驗證的結構描述登錄檔,請存取您的結構描述登錄檔秘密:
-
對於 AWS Glue 結構描述登錄檔:您的函數需求
glue:GetRegistry
和glue:GetSchemaVersion
許可。這些可讓您的函數查詢並使用 中存放的訊息格式規則 AWS Glue。 -
對於使用
BASIC_AUTH
或 的 Confluent 結構描述登錄檔 CLIENT_CERTIFICATE_TLS_AUTH
:您的函數需要包含身分驗證憑證之秘密的secretsmanager:GetSecretValue
許可。這可讓您的函數擷取存取 Confluent 結構描述登錄檔所需的使用者名稱/密碼或憑證。 -
對於私有 CA 憑證:您的函數需要包含憑證之秘密的 secretsmanager:GetSecretValue 許可。這可讓您的函數驗證使用自訂憑證之結構描述登錄檔的身分。
-
這些對應至下列必要許可:
-
kafka:ListScramSecrets - 允許列出用於 Kafka 身分驗證的 SCRAM 秘密
-
secretsmanager:GetSecretValue - 啟用從 Secrets Manager 擷取秘密
-
kms:Decrypt - 允許使用 解密加密的資料 AWS KMS
-
glue:GetRegistry - 允許存取 AWS Glue 結構描述登錄檔
-
glue:GetSchemaVersion - 啟用從結構描述登錄檔擷取特定 AWS Glue 結構描述版本
此外,如果您想要將失敗調用的記錄傳送至失敗時的目的地,根據目的地類型,您將需要下列許可:
-
對於 Amazon SQS 目的地:sqs:SendMessage - 允許傳送訊息至 Amazon SQS 佇列
-
對於 Amazon SNS 目的地:sns:Publish - 允許將訊息發佈至 Amazon SNS 主題
-
對於 Amazon S3 儲存貯體目的地:s3:PutObject 和 s3:ListBucket - 允許在 Amazon S3 儲存貯體中寫入和列出物件
疑難排解常見的身分驗證和授權錯誤
如果遺失了從 Amazon MSK 叢集取用資料的任何必要許可,Lambda 會在 LastProcessingResult 下的事件來源映射中顯示下列其中一種錯誤訊息。如需每個支援的身分驗證方法的詳細資訊,請參閱 在 Lambda 中設定叢集身分驗證方法。
叢集無法授權 Lambda
對於 SASL/SCRAM 或 mTLS,此錯誤表示提供的使用者不具備下列 Kafka 存取控制清單 (ACL) 的所有許可:
DescribeConfigs 叢集
描述群組
讀取群組
描述主題
讀取主題
對於 IAM 存取控制,您的函數執行角色缺少存取群組或主題所需的一個或多個許可。檢閱此頁面上所需的許可清單。
當您建立具有必要的 Kafka 叢集許可之 Kafka ACL 或 IAM 政策時,請將主題和群組指定為資源。主題名稱必須與事件來源映射中的主題相符。群組名稱必須與事件來源映射的 UUID 相符。
將必要的許可新增至執行角色後,可能需要數分鐘變更才會生效。
SASL 身分驗證失敗
對於 SASL/SCRAM,此錯誤表示所提供的使用者名稱和密碼是無效的。
對於 IAM 存取控制,執行角色缺少 MSK 叢集的 kafka-cluster:Connect
許可。將此許可新增至角色,並將叢集的 Amazon Resource Name (ARN) 指定為資源。
您可能會間歇性地看到此錯誤發生。TCP 連線數量超過 Amazon MSK 服務配額後,此叢集就會拒絕連線。Lambda 會關閉並重試,直到連線成功為止。Lambda 連接到叢集並輪詢記錄之後,上次處理結果會變更為 OK
。
伺服器無法驗證 Lambda
此錯誤表示 Amazon MSK Kafka 代理程式無法使用 Lambda 來驗證。此狀況的發生原因如下:
您並未提供 mTLS 身分驗證的用戶端憑證。
您已提供用戶端憑證,但代理程式並未設定為使用 mTLS。
用戶端憑證不受代理程式信任。
提供的憑證或私有金鑰無效
此錯誤表示 Amazon MSK 取用者無法使用提供的憑證或私有金鑰。請確定憑證和金鑰使用 PEM 格式,且私有金鑰加密使用 PBES1 演算法。如需詳細資訊,請參閱「設定 mTLS 機密」。