跳至內容

為什麼我在使用 Amazon S3 Event Notifications 時會收到「無法驗證下列目的地組態」的錯誤?

2 分的閱讀內容
0

當我使用 Amazon Simple Storage Service (Amazon S3) Event Notifications 新增通知組態時,收到「建立 Amazon S3 Event Notification 時無法驗證以下目的地組態」錯誤訊息。我想對此問題進行疑難排解並加以解決。

簡短說明

若要防止目的地組態出現驗證問題,請執行下列動作:

  • 指定的目的地必須具有資源型政策,允許 Amazon S3 將通知發佈到目的地。
  • 目的地的 AWS 區域必須與 S3 儲存貯體的區域相同。
  • 如果您使用 AWS Key Management Service (KMS) 金鑰加密目的地,則金鑰政策必須允許存取 S3。

當您更新事件通知組態時,Amazon S3 會驗證所有事件目的地是否都存在。S3 還會檢查事件目的地是否具有必要的資源型政策,以允許 S3 根據事件目的地類型執行以下動作:

  • 發佈事件
  • 傳送訊息
  • 調用函數

S3 會對新事件目的地任何在更新期間未刪除的現有事件目的地執行檢查。當檢查失敗時,您可能會收到「無法驗證以下目的地組態」錯誤訊息。

解決方法

執行 AWSSupport-TroubleshootS3EventNotifications 自動化執行手冊

最佳做法是使用 AWSSupport-Troubleshoots3EventNotifications 對新增事件通知組態時發生的常見問題進行疑難排解。

注意:

  • 只有當儲存貯體擁有者與執行自動化的 AWS 帳戶擁有者相同時,執行手冊才能評估事件通知組態。
  • 執行手冊無法評估託管在其他帳戶中目的地資源的政策。

若要執行自動化,請完成下列步驟:

  1. 開啟 AWS Systems Manager 主控台,然後開啟 AWSSupport-TroubleshootS3EventNotifications
  2. 選擇 Execute automation (執行自動化)。
  3. 輸入您的輸入參數。
  4. 選擇 Execute (執行)。
  5. 檢閱 Outputs (輸出) 區段中的結果。

最終報告包含使用 S3 儲存貯體設定為目的地事件通知的資源。如果您繼續遇到 Amazon S3 事件通知問題,請使用下列解決方案手動對問題進行疑難排解。

刪除不再存在的目的地事件

**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤,請參閱AWS CLI 錯誤疑難排解。此外,請確定您使用的是最新的 AWS CLI 版本

如果現有的事件通知將事件傳送到不再存在的目的地,請在更新事件通知組態之前刪除這些事件。通知可能存在於儲存貯體上,但目的地不存在,因為您在更新事件通知組態後將其刪除。

您可以使用 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 函數

如果您使用 S3 主控台來開啟事件通知,則 S3 會嘗試更新政策,然後再將政策新增至事件。如果事件目的地資源型政策有效,而您收到相同的錯誤,請檢查所有現有事件目的地是否有有效的資源型政策。如果您在更新儲存貯體上的事件通知組態後,修改事件目的地的資源型政策,則驗證將會失敗。若要防止此問題,請確定所有權限都有效,並刪除目的地無效的事件。

確保 AWS KMS 金鑰政策對 AWS KMS 加密的主題和佇列正確

如果您為 SQS 或 SNS 目的地啟用 AWS KMS 加密,請更新客戶自管金鑰政策以允許 S3 使用金鑰。

不支援 AWS 受管金鑰,例如 aws/snsaws/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": "*"  
        }  
    ]  
}

相關資訊

目的地 SNS 主題的 AWS Identity and Access Management (IAM) 政策

目的地 SQS 佇列的 IAM 政策

AWS 官方已更新 1 年前