為什麼我在一般用途儲存貯體中使用 Amazon S3 Event Notifications 時,會收到「Unable to validate the following destination configurations」錯誤?
當我使用 Amazon Simple Storage Service (Amazon S3) Event Notifications 新增通知組態時,收到「Unable to validate the following destination configurations when creating an Amazon S3 Event Notification」錯誤訊息。我想對此問題進行疑難排解並加以解決。
解決方法
如果您新增或更新事件通知組態,Amazon S3 會驗證所有事件目的地是否存在。Amazon S3 也會檢查事件目的地是否具有允許 Amazon S3 執行下列動作的資源型政策:
- 發佈事件
- 傳送訊息
- 調用函式
在更新期間,Amazon S3 會對新的事件目的地,以及您在更新期間未刪除的任何現有事件目的地執行檢查。當檢查失敗時,您可能會收到錯誤「Unable to validate the following destination configurations」。
**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤,請參閱 AWS CLI 的錯誤疑難排解。此外,請確定您使用的是最新的 AWS CLI 版本。
注意: 事件通知僅支援一般用途儲存貯體。目錄儲存貯體和資料表儲存貯體不支援事件通知。如果您需要事件通知功能,請使用一般用途儲存貯體。
執行 AWSSupport-TroubleshootS3EventNotifications 自動化執行手冊
最佳實務是使用 AWSSupport-TroubleshootS3EventNotifications,在您新增事件通知組態時進行疑難排解。
注意:
- 此執行手冊只能在儲存貯體擁有者同時也擁有您執行自動化之 AWS 帳戶時,評估事件通知組態。
- 此執行手冊無法評估您在其他帳戶中託管之目的地資源上的政策。
若要執行自動化,請完成下列步驟:
- 開啟 AWS Systems Manager 主控台,然後開啟 AWSSupport-TroubleshootS3EventNotifications。
- 選擇 Execute automation (執行自動化)。
- 輸入您的輸入參數。
- 選擇 Execute (執行)。
- 在 Outputs (輸出) 區段中檢閱結果。
最終報告包含使用 S3 儲存貯體設定為目的地事件通知的資源。如果您仍持續遇到 S3 事件通知問題,請使用下列解決方法手動進行疑難排解。
刪除不再存在的目的地事件
當您的 S3 事件通知目的地已不存在時,您需要刪除這些通知的組態。例如,當您刪除 Lambda 函式等目的地時,請刪除一般用途儲存貯體中仍保留的事件通知設定。您可以使用 Amazon S3 主控台、AWS CLI,或 PutBucketNotificationConfiguration API 刪除過時的事件通知。建議您使用 PutBucketNotificationConfiguration API 管理所有事件通知。
確認事件目的地具有有效的資源型政策
若要將訊息發佈到以下 AWS 服務,請授予 Amazon S3 呼叫相關 API 所需的權限:
- Amazon Simple Notification Service (Amazon SNS) 主題
- Amazon Simple Queue Service (Amazon SQS) 佇列
- AWS Lambda 函式
Amazon SNS 主題目的地政策範例:
{ "Version": "2012-10-17", "Id": "example-ID", "Statement": [ { "Sid": "Example SNS topic policy", "Effect": "Allow", "Principal": { "Service": "s3.amazonaws.com" }, "Action": [ "SNS:Publish" ], "Resource": "SNS-topic-ARN", "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:s3:*:*:bucket-name" }, "StringEquals": { "aws:SourceAccount": "bucket-owner-account-id" } } } ] }
Amazon SQS 佇列目的地政策範例:
{ "Version": "2012-10-17", "Id": "example-ID", "Statement": [ { "Sid": "example-statement-ID", "Effect": "Allow", "Principal": { "Service": "s3.amazonaws.com" }, "Action": [ "SQS:SendMessage" ], "Resource": "arn:aws:sqs:Region:account-id:queue-name", "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:s3:*:*:awsexamplebucket1" }, "StringEquals": { "aws:SourceAccount": "bucket-owner-account-id" } } } ] }
Lambda 函式目的地政策範例:
{ "Version": "2012-10-17", "Id": "example-ID", "Statement": [ { "Sid": "s3invoke", "Effect": "Allow", "Principal": { "Service": "s3.amazonaws.com" }, "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:Region:account-id:function:function-name", "Condition": { "StringEquals": { "AWS:SourceAccount": "bucket-owner-account-id" }, "ArnLike": { "AWS:SourceArn": "arn:aws:s3:::awsexamplebucket1" } } } ] }
如果您將新事件新增至儲存貯體,請確認新事件具有有效的資源型政策。
如需 Amazon SNS 或 Amazon SQS 權限的詳細資訊,請參閱授予權限以將訊息發佈至 SNS 主題或 SQS 佇列。
若要以有效政策更新 Lambda 函式,請參閱教學課程: 使用 Amazon S3 觸發程序來調用 Lambda 函式。
如果您使用 Amazon S3 主控台來開啟事件通知,Amazon S3 會在您將政策新增至事件之前嘗試更新政策。如果事件目的地的資源型政策有效但仍收到相同錯誤,請檢查事件目的地是否具有有效的資源型政策。如果您在更新儲存貯體上的事件通知組態之後,修改事件目的地的資源型政策,驗證就會失敗。為了防止此問題,請確保所有權限皆有效,並刪除目的地無效的事件。
確認 AWS KMS 加密主題與佇列的 AWS KMS 金鑰政策正確
如果您為 SQS 或 SNS 目的地啟用 AWS Key Management Service (AWS KMS) 加密,請更新客戶管理金鑰政策,以允許 Amazon S3 使用該金鑰。
不支援 AWS 受管金鑰,例如 aws/sns 和 aws/sqs。如果您在事件目的地使用 AWS 受管金鑰,則必須更新目的地以使用客戶受管金鑰。然後,請更新金鑰政策。
AWS KMS 金鑰政策範例:
{ "Version": "2012-10-17", "Id": "example-ID", "Statement": [ { "Sid": "example-statement-ID", "Effect": "Allow", "Principal": { "Service": "s3.amazonaws.com" }, "Action": [ "kms:GenerateDataKey", "kms:Decrypt" ], "Resource": "*" } ] }
相關資訊
相關內容
已提問 2 年前
已提問 1 年前
