為什麼 Amazon S3 事件通知不會交付至使用伺服器端加密的 Amazon SQS 佇列?

2 分的閱讀內容
0

Amazon Simple Storage Service (Amazon S3) 事件通知並未交付至我的伺服器端加密 (SSE) Amazon Simple Queue Service (Amazon SQS) 佇列。

解決方法

請完成以下步驟來設定 S3 事件通知,並將該通知傳送至使用伺服器端加密 (SSE) 的 Amazon SQS 佇列。

建立客戶自管 AWS KMS 金鑰並設定金鑰政策

您必須使用客戶自管 AWS Key Management Service (AWS KMS) 金鑰加密 Amazon SQS 佇列。然後,授與 Amazon S3 服務使用加密佇列的主體許可。

**注意:**您無法修改預設的 AWS 受管 KMS 金鑰。相反,您必須使用客戶自管金鑰進行此程序。您也必須將許可新增至 AWS KMS 金鑰,以允許存取指定的服務主體。

若要授與 Amazon S3 服務主體許可,請將此陳述式新增至客戶自管金鑰政策:

{  "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": "*"
    },
    {
      "Sid": "Enable IAM User Permissions",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::"111122223333":root"
      },
      "Action": "kms:*",
      "Resource": "*"
    }
  ]
}

**注意:**請將 "arn:aws:iam::"111122223333":root" 取代為您的 ARN。

建立 SQS 佇列並授與 Amazon S3 許可

  1. 建立設定為使用 SSE 的 Amazon SQS 佇列。如需詳細資訊,請參閱設定佇列 (主控台) 的伺服器端加密 (SSE)
  2. 若要允許 Amazon S3 傳送訊息至佇列,請將此許可陳述式新增至 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:us-east-1:111122223333:sqs-s3-kms-same-account",
      "Condition": {
        "StringEquals": {
          "aws:SourceAccount": "123456789"
        },
        "ArnLike": {
          "aws:SourceArn": "arn:aws:s3:*:*:hellobucket"
        }
      }
    }
  ]
}

**注意:**請將 Resource 值取代為您的 SQS 佇列 ARN,將 aws:SourceAccount 取代為您的 AWS 來源帳戶 ID,以及將 aws:SourceArn 取代為您的 Amazon S3 儲存貯體 ARN。

在上述範例中,客戶帳戶 123456789 的 S3 儲存貯體 hellobucket 可以將 ObjectCreated 事件通知傳送至指定的 SQS 佇列。如需有關使用加密的 SQS 佇列所需許可的詳細資訊,請參閱金鑰管理

建立 S3 事件

若要為您的儲存貯體新增 Amazon S3 事件,請完成以下步驟:

  1. 開啟 S3 主控台,然後選擇 S3 儲存貯體的超連結 Name
  2. 屬性索引標籤,選擇建立事件通知
  3. 建立事件通知頁面上,輸入以下資訊:
    對於事件名稱,輸入名稱。
    對於事件類型,選取您要接收通知的事件類型。
    對於目的地,選擇 SQS 佇列
    對於 SQS 佇列,選擇您的佇列。
  4. 選擇儲存變更

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

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

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

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

如果您在字首或字尾中使用特殊字元,則必須以 URL 編碼格式輸入這些字元。如需詳細資訊,請參閱使用物件金鑰名稱篩選設定事件通知

**注意:**您不可在篩選條件中,將萬用字元 ("*") 作為字首或字尾來表示任何字元。

請檢查所有事件目的地都存在

當 Amazon S3 事件通知儲存貯體目的地不存在時,發生「無法驗證下列目的地組態」錯誤。

如果您設定事件通知將事件傳送至不再存在的目的地,則必須移除這些事件。請確定在更新事件通知組態之前移除事件。

**注意:**最佳實務是使用相同的 PutBucketNotificationConfiguration API 刪除目的地已不存在的所有事件。

檢查 S3 儲存貯體和 SQS 佇列區域

您無法將通知從一個 AWS 區域中的 S3 儲存貯體傳送至另一個區域的 Amazon SQS 佇列。相反,請將 Amazon Simple Notification Service (Amazon SNS) 主題設定為 Amazon SQS 佇列在不同區域的 S3 儲存貯體目的地。Amazon SNS 支援跨區域通知交付至 Amazon SQS 佇列和 AWS Lambda 函數。

如需詳細資訊,請參閱將 Amazon SNS 訊息傳送至不同帳戶中的 Amazon SQS 佇列或 Lambda 函數

確認訊息已傳送至 Amazon SQS 佇列

使用 Amazon CloudWatch NumberOfMessagesSent 指標來檢查訊息已傳送至 Amazon SQS 佇列。

如需詳細資訊,請參閱為什麼我的 Amazon SQS 佇列無法接收訊息?

使用 AWS Support 進行疑難排解

如果上述疑難排解步驟無法解決您的問題,請聯絡 AWS Support。在您的通信中包含要 RequestId 以及使用失敗 API 呼叫之時區timestamp

相關資訊

如何讓我的 Amazon SQS 訂閱成功收到 Amazon SNS 主題的通知?

Amazon S3 事件通知

逐步解說: 為通知設定儲存貯體 (SNS 主題或 SQS 佇列)

AWS 官方
AWS 官方已更新 7 個月前