我使用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"
},
答案 0 :(得分:1)
根据我的经验,到目前为止,我发现AWS文档非常精确(有时几乎太精确),我认为这是其中一种情况。
AWS CF docs for QueuePolicy说{{1}}
我知道,当你第一次看到它时,它看起来似乎是你的标准不言自明,不知道什么是其他写的文档评论,但我认为这是非常字面意思来暗示/解释政策只是设置 - 即它不是添加到政策列表。
我知道这可能不适合您想要实现的目标,但我认为您暂时的解决方案是合并这两项政策。
答案 1 :(得分:0)
这里并没有真正的问题,但是我要补充一点,您可以在一个策略中添加多个语句。我认为一个队列只有一个包含多个语句的策略。