可以将 S3 事件从账户 A 发送到账户 B 中的 SQS 队列。但是,我能够实现此目的的唯一方法是打开 SQS 中
sendMessage
操作的权限以允许每个人访问。
是否可以将 S3 事件配置为
sendMessage
到另一个帐户,并在 SQS 队列上设置一些权限限制?
例如,如果我尝试限制对特定帐户的访问(例如
123456789012
),当我尝试保存事件时,我会在 S3 控制台中收到错误:
无法验证以下目标配置:目标队列上的权限不允许 S3 从此存储桶发布通知
{
"Version": "2012-10-17",
"Id": "sqs-permission",
"Statement": [
{
"Sid": "sqs-permision-statement",
"Effect": "Allow",
"Principal": {
"AWS": "123456789012"
},
"Action": "SQS:SendMessage",
"Resource": "arn:aws:sqs:us-east-1:210987654321:my-queue"
}
]
}
根据记录的示例,需要将授权授予S3,而不是拥有该存储桶的帐户。
"Principal": {
"AWS": "*"
},
...
"Condition": {
"ArnLike": {
"aws:SourceArn": "arn:aws:s3:*:*:bucket-name"
}
}
*
主体似乎异常宽容,但可能的解释是aws:SourceArn
不是一个可以被恶意用户欺骗的值,比方说,aws:SourceIp
。
相比之下,SNS 示例显示了这个原理,如果它适用于 SQS 通知,这似乎更合适:
"Principal": {
"Service": "s3.amazonaws.com"
},
您仍然想包含
Condition
块。