我尝试了这个SQS队列策略:
{
"Version" : "2012-10-17",
"Statement" : [
{
"Effect" : "Allow",
"Principal" : {
"Service" : "s3.amazonaws.com"
},
"Action" : "sqs:SendMessage",
"Resource" : {sqs_queue_arn},
"Condition" : {
"StringEquals" : {
"aws:PrincipalOrgID" : {our_org_id}
},
"ArnLike" : {
"aws:SourceArn" : "arn:aws:s3:::*"
}
}
}
测试时,它确实允许您将策略应用到队列而不会出现错误,但它实际上并不让 S3 存储桶向其发送数据。
目前我必须单独添加每个帐户 ID,这对我们来说无法扩展。
除了手动跟踪所有帐户 ID 之外,是否还有其他方法可以做到这一点?
好的找到了方法:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "s3.amazonaws.com"
},
"Action": "sqs:SendMessage",
"Resource": {sqs_queue_arn},
"Condition": {
"StringEquals": {
"aws:ResourceOrgID": {our_org_id}
},
"ArnLike": {
"aws:SourceArn": "arn:aws:s3:::*"
}
}
}
]
}
就像 @luk2302 在评论中所说,aws 是发送此消息的主体,他们没有组织 ID。因此,我们只查看资源(s3 对象)所有者组织 ID。这有效。