首页 > 解决方案 > API:sqs:CreateQueue 总是拒绝访问

问题描述

我正在尝试使用 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

我试图理解这个文档。但我不确定如何附加策略以允许创建队列。有人请给我一个完整的例子。

标签: amazon-cloudformation

解决方案


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

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

在这种情况下,在失败的时间范围内搜索 "Event Name" = "CreateQueue" 将得到如下详细信息的结果:

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

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


推荐阅读