繁体   English   中英

CloudFormation - 无法创建 SQS 策略

[英]CloudFormation - not able to create SQS Policy

我正在尝试创建一个 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 控制台错误

我已经参考了文档,但无法弄清楚问题所在? 任何想法这里有什么问题?

AWS::SQS::QueuePolicy - AWS CloudFormation

队列:要添加策略的队列的 URL。 您可以使用 Ref function 来指定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。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM