将S3事件订阅到SQS队列中而不向世界公开SQS?

时间:2019-05-03 01:40:12

标签: amazon-web-services amazon-s3 amazon-sqs amazon-iam

我正在为自己认为的简单任务而苦苦挣扎。

我想配置我的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用户的访问。这是一个非常基本的要求,但令我惊讶的是我找不到简单的方法来完成此操作。

1 个答案:

答案 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" }
   }
  }