跳至內容

為什麼我的 Amazon SNS 主題沒有收到 Amazon S3 事件通知?

2 分的閱讀內容
0

我已建立 Amazon Simple Storage Service (Amazon S3) 事件通知,以透過我的 Amazon Simple Notification Service (Amazon SNS) 主題傳送訊息。但是,Amazon S3 儲存貯體中的新事件通知並未將訊息發佈到 Amazon SNS 主題。

解決方法

確認您正確設定了 Amazon S3 事件類型

設定 Amazon S3 事件通知時,您必須指定會導致 Amazon S3 傳送通知的支援 Amazon S3 事件類型。如果您未指定的事件類型出現在 Amazon S3 儲存貯體中,則 Amazon S3 不會傳送通知。

確認您的物件金鑰名稱篩選條件採用網址編碼格式

如果您將事件通知設定為使用物件金鑰名稱篩選,則 Amazon S3 只會針對具有特定首碼或尾碼的物件發佈通知。

如果您在字首或字尾中使用特殊字元,則請將空格替換為 "+" 字元。請務必以網址編碼 (百分比編碼) 格式輸入所有其他特殊字元。如需更多資訊,請參閱 Object key naming guidelines (物件索引鍵命名準則) 和 Working with object metadata (使用物件中繼資料)。

注意: 您無法在篩選條件中將萬用字元 (*) 作為字首或字尾來表示字元。

確認您已授予 Amazon S3 所需許可

Amazon SNS 主題的資源型政策必須允許 Amazon S3 儲存貯體將訊息發佈至該主題。檢查您主題的 AWS Identity and Access Management (IAM) 政策,以確認其具有所需權限,並在必要時授予許可。

確認主題具有 SSE 加密主題的 AWS KMS 許可

如果您在 SNS 主題上啟動了伺服器端加密 (SSE),則您的主題必須使用客戶自管 AWS Key Management (AWS KMS) 金鑰。Amazon S3 無法發佈到使用預設 AWS 受管金鑰 (alias/aws/sns) 加密的主題。AWS KMS key 必須包含授予 Amazon S3 使用該金鑰之許可的自訂金鑰政策。

若要設定所需的 AWS KMS 許可,請完成下列步驟:

1.建立新的客戶自管 AWS KMS key 和金鑰政策。

2.編輯金鑰政策以包含陳述式,允許 Amazon S3 將訊息發佈到加密的 SNS 主題,大概如下:

{
    "Version":"2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "s3.amazonaws.com"
            },
            "Action": [
                "kms:GenerateDataKey*",
                "kms:Decrypt"
            ],
            "Resource": "*"
        }
    ]
}

3.使用 AWS KMS key 為您的 Amazon SNS 主題設定 SSE。

預留通知傳送時間

Amazon S3 通常會在幾秒鐘內傳送事件通知,但也可能需要 1 分鐘或更長時間。

使用 CloudWatch 指標進行其他疑難排解

如果 SNS 主題仍未收到 Amazon S3 事件通知,請檢查 SNS 的 NumberOfMessagePublished Amazon CloudWatch 指標。此指標顯示 Amazon S3 是否發佈了事件。如果沒有 NumberOfMessagePublished 指標,則表示 Amazon S3 到 Amazon SNS 的組態存在問題。

如果存在 NumberOfMessagePublished 指標,請檢查 NumberOfNotificationsDelivered 和 NumberOfNotificationsFailed 指標。這些指標顯示 SNS 主題是否將訊息傳遞到訂閱端點。

為了協助您進行疑難排解,您也可以設定 SNS 主題的傳送狀態記錄。

相關資訊

Walkthrough: Configuring a bucket for notifications (SNS topic or SQS queue) (逐步解說:設定儲存貯體的通知 (SNS 主題或 SQS 佇列))

AWS 官方已更新 6 個月前