aws cloudformation 2 sqspolicy 用于单个队列

问题描述 投票:0回答:3

我使用cloudformation模板创建一个sqs队列并根据用户参数应用两个策略。我创建了 2 个 sqs QueuePolicy 资源,它们引用了队列。但是,当我尝试使用 Cloudformation 模板将两个策略应用到队列时,只有第二个策略生效。 cloudformation 堆栈表示已创建两个 sqs 策略资源。然而 sqs 的管理控制台仅显示第二个。 SQS 的aws 文档 表示可以将多个策略应用于单个队列;然而,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" },

amazon-web-services amazon-sqs aws-cloudformation
3个回答
1
投票

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


1
投票

根据我迄今为止的经验,我发现 AWS 文档非常精确(有时几乎太精确),我认为这就是其中之一。

QueuePolicy 的AWS CF 文档

The AWS::SQS::QueuePolicy type applies a policy to SQS queues.

我知道,当您第一次阅读本文时,它可能看起来像您标准的不言自明的、不知道还要写什么的文档注释,但我认为这实际上是为了暗示/解释该政策只是设置 - 即它不是添加到政策列表中。

我知道这对于您想要实现的目标可能并不理想,但我认为您暂时的解决方案是合并这两个策略。


0
投票

我在 sqs::queuepolicy 上做了很多工作,我可以分享一下,一个 sqs 队列一次只能附加一个策略,但一个队列策略可以附加到多个队列。

一旦您尝试将新的队列策略附加到队列,旧的队列策略将被覆盖。如果您的 cloudformation 模板包含多个策略,因为 CFN 进程是异步的,那么最后执行的策略将覆盖之前的策略。

© www.soinside.com 2019 - 2024. All rights reserved.