在不向世界公开 SQS 的情况下将 S3 事件订阅到 SQS 队列?
Subscribe S3 events to SQS queue without exposing SQS to the world?
我正在努力完成我认为是一项简单的任务。
我想配置我的 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 存储桶将消息发送到我的 SQS 队列,而不是匿名用户推送消息?
我可以接受允许我的 AWS 账户中的任何资源向 SQS 发送消息。我只需要阻止对匿名 AWS 用户的访问。这是一个非常基本的要求,我很惊讶我找不到一个简单的方法来做到这一点。
您可以在文档中找到正确的安全配置
"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" }
}
}
我正在努力完成我认为是一项简单的任务。
我想配置我的 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 存储桶将消息发送到我的 SQS 队列,而不是匿名用户推送消息?
我可以接受允许我的 AWS 账户中的任何资源向 SQS 发送消息。我只需要阻止对匿名 AWS 用户的访问。这是一个非常基本的要求,我很惊讶我找不到一个简单的方法来做到这一点。
您可以在文档中找到正确的安全配置
"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" }
}
}