我正在为自己认为的简单任务而苦苦挣扎。
我想配置我的SQS队列,以允许我帐户中的S3存储桶发送消息,但不允许外部人员发送消息。 (外部人员是指不属于我的AWS账户成员的任何委托人)
我可以使用的唯一SQS权限配置是Effect=Allow, Principals=*, Actions=SQS:SendMessage, Conditions=None
创建[S3事件-> SQS]时,任何其他权限都会导致我看到此错误:Unable to validate the following destination configurations. Permissions on the destination queue do not allow S3 to publish notifications from this bucket.
Principals=*
关注我。 从我可以找到的文档中,这意味着世界上任何人都可以访问SQS队列。这是真的?这显然是非常糟糕的。
如何允许我的S3存储桶将SendMessage发送到SQS队列,而不允许匿名用户推送消息?
允许我的AWS账户中的任何资源将SendMessage发送到SQS是我可以接受的。我只需要阻止对匿名AWS用户的访问。这是一个非常基本的要求,但令我惊讶的是我找不到简单的方法来完成此操作。
答案 0 :(得分:2)
您可以在文档中找到安全配置
"Condition": {
"ArnLike": { "aws:SourceArn": "arn:aws:s3:*:*:bucket-name" }
}
请注意,对于Amazon SNS和Amazon SQS IAM策略,您都可以在策略中指定StringLike条件,而不是ArnLike条件。
"Condition": {
"StringLike": { "aws:SourceArn": "arn:aws:s3:*:*:bucket-name" }
}
完整示例摘自the doc
{
"Sid": "example-statement-ID",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": [
"SQS:SendMessage"
],
"Resource": "SQS-ARN",
"Condition": {
"ArnLike": { "aws:SourceArn": "arn:aws:s3:*:*:bucket-name" }
}
}