Cloudformation SQS策略用于S3事件

6
我正在尝试创建一个 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" } ]
        }
    }
2个回答

10

最终,我找到了解决方案 - 我设置了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在此处是多余的,对S3EventQueueRef已经建立了一个依赖关系。您可能希望将其范围限制在特定的bucket ARN下,您可能不希望任何bucket都写入您的队列:P - erik258
实际上,这里有一个更好的例子:https://docs.aws.amazon.com/AmazonS3/latest/dev/ways-to-add-notification-config-to-bucket.html - erik258

0
在AWS控制台中,您是否确认队列已成功授予S3存储桶权限?在SQS中,选择队列并查看权限选项卡。
从上面的模板片段中看,我不确定"S3Notifications"指的是什么,但我会假设它是S3存储桶。SQS策略文档的"Resource"应该是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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接