【问题标题】:CloudFormation - not able to create SQS PolicyCloudFormation - 无法创建 SQS 策略
【发布时间】:2020-03-11 23:10:08
【问题描述】:

我正在尝试创建一个 SQSQueue 并通过 SQS::QueuePolicy 为其附加权限。 以下是我的云形成模板 -

模板

{
"AWSTemplateFormatVersion": "2010-09-09",
"Resources": {

    "MySQS": {
        "Type": "AWS::SQS::Queue",
        "Properties": {
            "QueueName": "QueueName1"
        }
    },
    "MySQSPolicy": {
        "Type": "AWS::SQS::QueuePolicy",
        "Properties": {
            "Queues": [
                {
                    "Fn::GetAtt" : ["MySQS", "Arn"] 
                }
            ],
            "PolicyDocument": {
                "Statement": [
                    {
                        "Effect": "Allow",
                        "Principal": {
                            "AWS": ["1234567689111"]
                        },
                        "Action": [
                            "SQS:SendMessage"
                        ]
                    }
                ]
            }
        }
    }
}
}

错误

我尝试通过 AWS 控制台创建堆栈,SQS Queue 创建成功,但收到以下SQS policy 创建错误 -

此 wsdl 版本不存在指定的队列。 (服务:AmazonSQS;状态代码:400;错误代码:AWS.SimpleQueueService.NonExistentQueue;请求 ID:e2611b4d-6166-5bf3-9205-4d0590e34f84)

CloudFormation Console Error

我已经提交了documentation,但不知道问题出在哪里? 有什么想法吗?

【问题讨论】:

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


    【解决方案1】:

    来自AWS::SQS::QueuePolicy - AWS CloudFormation

    队列: 要将策略添加到的队列的 URL。您可以使用 Ref 函数指定 AWS::SQS::Queue 资源。

    此外,策略需要引用被允许的Resource,即队列。是的,队列被引用两次似乎很有趣,但第一个引用是放置策略的位置,第二个引用是授予对特定队列的访问权限。

    该政策还缺少Version 参数。

    因此,使用:

    {
        "AWSTemplateFormatVersion": "2010-09-09",
        "Resources": {
            "MySQS": {
                "Type": "AWS::SQS::Queue",
                "Properties": {
                    "QueueName": "QueueName1"
                }
            },
            "MySQSPolicy": {
                "Type": "AWS::SQS::QueuePolicy",
                "Properties": {
                    "Queues": [
                        {
                            "Ref": "MySQS"   <--- Changed
                        }
                    ],
                    "PolicyDocument": {
                        "Id": "QueuePolicy",
                        "Version": "2012-10-17",   <--- Added
                        "Statement": [
                            {
                                "Action": [
                                    "sqs:SendMessage"
                                ],
                                "Effect": "Allow",
                                "Resource": {           <--- Added
                                    "Fn::GetAtt": [
                                        "MySQS",
                                        "Arn"
                                    ]
                                },
                                "Principal": {
                                    "AWS": [
                                        "*"      <--- See note below
                                    ]
                                }
                            }
                        ]
                    }
                }
            }
        }
    }
    

    如图所示,Principal 可以正常工作。或者,您可以指定一个 IAM 用户:

                "Principal" : {
                   "AWS" : "arn:aws:iam::123456789012:user/myapp"
                },
    

    我认为您不能简单地说 Principal 是一个帐户 ID。

    【讨论】:

      猜你喜欢
      • 2018-02-28
      • 2019-08-31
      • 2021-10-12
      • 1970-01-01
      • 2021-05-08
      • 2015-12-07
      • 2016-12-31
      • 2018-04-13
      • 2017-03-01
      相关资源
      最近更新 更多