Amazon cloudformation API:sqs:CreateQueue始终拒绝访问

Amazon cloudformation API:sqs:CreateQueue始终拒绝访问,amazon-cloudformation,Amazon Cloudformation,我正在尝试使用cloudformation创建一个sqs队列,但我在控制台中不断遇到这个错误 API: sqs:CreateQueue Access to the resource https://sqs.us-east-1.amazonaws.com/ is denied. 很明显我错过了某种许可。这并没有具体说明如何解决这个问题 以下是我编写的代码: AWSTemplateFormatVersion: "2010-09-09" Resources: MyQueue: Typ

我正在尝试使用cloudformation创建一个sqs队列,但我在控制台中不断遇到这个错误

API: sqs:CreateQueue Access to the resource https://sqs.us-east-1.amazonaws.com/ is denied.
很明显我错过了某种许可。这并没有具体说明如何解决这个问题

以下是我编写的代码:

AWSTemplateFormatVersion: "2010-09-09"

Resources:

  MyQueue:
    Type: AWS::SQS::Queue
    Properties:
      FifoQueue: false
      QueueName: sqs-test
      ReceiveMessageWaitTimeSeconds: 20
      RedrivePolicy:
        deadLetterTargetArn:
          Fn::GetAtt:
          - "MyDLQ"
          - "Arn"
        maxReceiveCount: 4
      Tags:
      -
        Key: "ProjectName"
        Value: "project-x"

  MyDLQ:
    Type: AWS::SQS::Queue
    Properties:
      FifoQueue: false
      QueueName: sqs-dlq-test

我正在努力理解这一点。但我不确定如何附加允许创建队列的策略。有人请给我一个完整的例子。

蒂龙对你的问题的评论是正确的。检查执行CloudFormation的用户的权限。如果您直接运行命令,这通常很容易检查。在某些情况下,您可能正在使用更复杂的自动化环境

我发现在自动化世界中解决权限问题的最佳方法是通过CloudTrail。在任何API调用失败后,无论是从CLI、CloudFormation还是其他源,都可以在CloudTrail中查找该调用

在这种情况下,在故障时间范围内搜索“Event Name”=“CreateQueue”将显示一个结果,其详细信息如下:

  • 源IP地址;此字段可能会显示类似于cloudformation.amazonaws.com的内容,或您的计算机/办公室的IP。当您需要根据源筛选事件时,此功能非常有用
  • 用户名;在我的例子中,这是运行CFN模板的代理的EC2实例ID
  • 访问密钥ID;对于EC2实例,这可能是一组临时访问凭据,但对于真正的用户,它将向您显示使用了什么密钥
  • 实际事件数据;对于非权限错误尤其有用,实际事件可能会显示请求本身中的错误

在我的例子中,运行自动化的特定EC2实例已过时,需要更新以使用正确的IAM角色/实例配置文件。CloudTrail帮助我找到了这一点。

我假设您是以自己的IAM用户身份运行它的。该用户的IAM策略是什么?运行CloudFormation模板的用户需要具有创建相同资源的权限。