aws cloudformation 2 sqspolicy用于单个队列

时间:2016-02-16 21:22:06

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

我使用cloudformation模板创建sqs队列,并根据用户参数应用两个策略。我创建了2平方的QueuePolicy资源,它们引用了队列。但是,当我尝试使用Cloudformation模板将两个策略应用于队列时,只有第二个策略生效。 cloudformation堆栈表示已创建两个sq的策略资源。但是,sqs的管理控制台仅显示第二个。 SQS的aws documentation表示可以将多个策略应用于单个队列;但是,对于是否允许这种情况,cloudformation QueuePolicy没有明确提及。我尝试了交换政策,第二个一直生效。我的政策摘要已附上。

"QueuePolicy1": { "Type": "AWS::SQS::QueuePolicy", "Properties": { "PolicyDocument": { "Id": "QueuePolicy1", "Statement": [ { "Sid": "QueuePolicy1-ReceiveMesasges", "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": [ "sqs:GetQueueAttributes", "sqs:GetQueueUrl", "sqs:ReceiveMessage", "sqs:DeleteMessage", "sqs:ChangeMessageVisibility" ], "Resource": "*", "Condition": { "ArnEquals": { "aws:SourceArn": { "Ref": "QOwnerArnParam" } } } }
] }, "Queues": [ { "Ref": "Queue1" } ] }, "Metadata": { "AWS::CloudFormation::Designer": { "id": "124145a7-3ad1-48e4-9478-04a930498db5" } }, "Condition": "Condition1" }, "QueuePolicy2": { "Type": "AWS::SQS::QueuePolicy", "Properties": { "PolicyDocument": { "Id": "QueuePolicy2", "Statement": [ { "Sid": "QueuePolicy2-SendMessage-To-Queue-From-SNS-Topic", "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": [ "sqs:SendMessage" ], "Resource": "*", "Condition": { "ArnEquals": { "aws:SourceArn": { "Ref": "TopicArnParam" } } } }
] }, "Queues": [ { "Ref": "Queue1" } ] }, "Metadata": { "AWS::CloudFormation::Designer": { "id": "124145a7-3ad1-48e4-9478-04a930498db5" } }, "Condition": "Condition2" },

2 个答案:

答案 0 :(得分:1)

根据我的经验,到目前为止,我发现AWS文档非常精确(有时几乎太精确),我认为这是其中一种情况。

AWS CF docs for QueuePolicy说{{1}}

我知道,当你第一次看到它时,它看起来似乎是你的标准不言自明,不知道什么是其他写的文档评论,但我认为这是非常字面意思来暗示/解释政策只是设置 - 即它不是添加到政策列表。

我知道这可能不适合您想要实现的目标,但我认为您暂时的解决方案是合并这两项政策。

答案 1 :(得分:0)

这里并没有真正的问题,但是我要补充一点,您可以在一个策略中添加多个语句。我认为一个队列只有一个包含多个语句的策略。