为什么 Amazon S3 事件通知没有发送到使用服务器端加密的 Amazon SQS 队列?

上次更新日期:2021 年 8 月 16 日

Amazon Simple Storage Service (Amazon S3) 事件通知没有发送到我的 Amazon Simple Queue Service (Amazon SQS) 队列。例如,当对象上传到 S3 存储桶时,我没有收到 Amazon S3 ObjectCreated 事件通知。我的 Amazon SQS 队列已启用服务器端加密 (SSE)。

如何向使用 SSE 的 Amazon SQS 队列发送 S3 事件通知?

解决方法

要配置并向使用 SSE 的 Amazon SQS 队列发送 S3 事件通知,请执行以下步骤:

创建客户管理的 AWS KMS 密钥并配置密钥策略

您可以使用客户管理的 AWS Key Management Service (AWS KMS) 密钥加密 Amazon SQS 队列和 Amazon Simple Notification Service (Amazon SNS) 主题。但是,您必须授予 Amazon S3 服务委托人权限,方可处理加密主题或队列的权限。

注意:无法修改 AWS 管理的默认 KMS 密钥。您必须在以下过程中使用客户管理的密钥,并向 KMS 密钥添加权限以允许访问指定的服务委托人。

要授予 Amazon S3 服务委托人权限,请将以下语句添加到客户管理的密钥策略中:

注意:将 "arn:aws:iam::"111122223333":root" 替换为您的根账户 Amazon 资源名称 (ARN)。

{
  "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": "*"
    }
  ]
}

创建 SQS 队列并授予 Amazon S3 权限

1.    创建配置为使用 SSE 的 Amazon SQS 队列。有关详细信息,请参阅为队列 (控制台) 配置服务器端加密 (SSE)

2.    要允许 Amazon S3 向队列发送消息,请向 SQS 队列添加以下权限语句:

注意:将 Resource 值替换为您的 SQS 队列 ARN,将 aws:SourceAccount 替换为您的 AWS 源账户 ID,以及将 aws:SourceArn 替换为您的 Amazon S3 存储桶 ARN。

{
  "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"
    }
    }
  }
  ]
}

在前面的示例权限语句中,客户账户 123456789 拥有的 S3 存储桶 hellobucket 可以向指定的 SQS 队列发送 ObjectCreated 事件通知。

创建 S3 事件

要为存储桶添加 Amazon S3 事件,请按照以下步骤操作:

1.    打开 S3 控制台,然后为 S3 存储桶选择带超链接的名称

2.    从属性选项卡中,选择创建事件通知
对于事件名称,输入名称。
对于事件类型,选择要接收通知的事件类型。
对于目的地,选择 SQS 队列
对于 SQS 队列,请选择您的队列。

3.    选择保存更改


这篇文章对您有帮助吗?


您是否需要账单或技术支持?