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. 选择保存更改。
相关信息
Amazon S3 事件通知
密钥管理