【问题标题】:Cloudformation SQS Policy for S3 events适用于 S3 事件的 Cloudformation SQS 策略
【发布时间】:2016-12-31 12:32:01
【问题描述】:

我正在尝试为 SQS 队列创建一个策略,该策略将允许任何 S3 存储桶将事件发送到队列。我似乎无法为特定的 S3 队列执行此操作,因为我最终会遇到循环依赖。

我创建了一个将创建队列和策略的 cloudformation 模板,但是当我尝试手动设置 S3 存储桶以发送事件时,我收到一条消息说

目标队列的权限不允许 S3 发布 来自此存储桶的通知

我用来创建策略的模板部分是:

    "SQSNotifcationFromS3" : {
        "Type" :        "AWS::SQS::QueuePolicy",
        "DependsOn" : "S3Notifications",
        "Properties" : {
            "PolicyDocument" : {
                "Version": "2012-10-17",
                "Id": "SQSIDsimon",
                "Statement": [
                    {
                        "Sid": "example-statement-ID",
                        "Effect": "Allow",
                        "Principal": {
                            "Service": "s3.amazonaws.com"
                            },
                        "Action": "SQS:*",
                        "Resource": { "Ref" : "S3Notifications"}
                    }
                ]                  
            },
            "Queues" :      [ { "Ref" : "S3Queue" } ]
        }
    }

【问题讨论】:

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


    【解决方案1】:

    最后,我找到了解决方案——我在 SQS 上设置了权限,以便任何 S3 存储桶都可以将事件添加到队列中:

        "S3EventQueuePolicy" : {
            "Type" : "AWS::SQS::QueuePolicy",
            "DependsOn" : [ "S3EventQueue" ],
            "Properties" : {
                "PolicyDocument" : {
                    "Id": "SQSPolicy",
                    "Statement": [
                        {
                            "Sid": "SQSEventPolicy",
                            "Effect": "Allow",
                            "Principal": "*",
                            "Action": "SQS:*",
                            "Resource": "*",
                            "Condition": {
                                "ArnLike": {
                                    "aws:SourceArn": "arn:aws:s3:::*"
                                }
                            }
                        }
                    ]
                },
                "Queues" : [ { "Ref" : "S3EventQueue"} ]
            }            
        },
    

    【讨论】:

    • DependsOn 在这里是多余的,RefS3EventQueue 已经建立了依赖关系。您可能希望将其范围缩小到特定的存储桶 ARN - 您可能不希望只是 any 存储桶写入您的队列:P
    • 其实这里有一个更好的例子:docs.aws.amazon.com/AmazonS3/latest/dev/…
    【解决方案2】:

    在 AWS 控制台中,您是否确认队列已成功授予 s3 存储桶的权限?在 SQS 中,选择队列并查看权限选项卡。

    查看您上面的模板 sn-p,我不确定“S3Notifications”指向什么,但我假设它是 S3 存储桶。 SQS 策略文档“资源”应该是 S3 存储桶的 ARN。 S3 存储桶上的“Ref”函数具有“Name”的参考值。我相信你需要 ARN。

    见:http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/SQSExamples.html

    和:http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-ref.html

    【讨论】:

      猜你喜欢
      • 2014-05-02
      • 2020-03-11
      • 2020-01-18
      • 2019-03-06
      • 2015-12-07
      • 2022-10-09
      • 2021-03-16
      • 1970-01-01
      • 2022-10-01
      相关资源
      最近更新 更多