跳至內容

為什麼我的 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 只會針對具有特定首碼或尾碼的物件發佈通知。

如果您在首碼或尾碼中使用特殊字元,則必須以網址編碼 (百分比編碼) 格式輸入這些字元。如需詳細資訊,請參閱物件金鑰命名準則使用物件中繼資料

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

確認您已授予 AWS S3 所需的權限,以便將訊息發佈到您的主題

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

確認主題具有 SSE 加密主題的 AWS KMS 權限

如果您在 SNS 主題上啟動了伺服器端加密 (SSE),則您的主題必須使用客戶自管 AWS Key Management (AWS KMS) 金鑰。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

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

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

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

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

相關資訊

允許 Amazon S3 事件通知發佈至主題

AWS 官方已更新 9 個月前