访问 SQS 队列需要什么权限?

Ant*_*ong 2 amazon-web-services amazon-iam

我正在尝试打开 SQS 队列,但收到此错误:

2019-07-09 07:20:31,855 pid 3604 tid  800 ERROR    connection <?xml version="1.0
"?><ErrorResponse xmlns="http://queue.amazonaws.com/doc/2012-11-05/"><Error><Typ
e>Sender</Type><Code>AWS.SimpleQueueService.NonExistentQueue</Code><Message>The
specified queue does not exist or you do not have access to it.</Message><Detail
/></Error><RequestId>fa3bf29c-d5ad-525a-aa55-a70297d241fa</RequestId></ErrorResp
onse>
Run Code Online (Sandbox Code Playgroud)

我已经验证队列名称是正确的。

以下是我授予 IAM 角色的权限:

在此输入图像描述

IE

            "sqs:ChangeMessageVisibility",
            "sqs:ReceiveMessage",
            "sqs:SendMessage",
Run Code Online (Sandbox Code Playgroud)

如果我运行以下命令

 aws sqs receive-message --queue-url https://sqs.us-west-2.amazonaws.com/12345678/my-queue
Run Code Online (Sandbox Code Playgroud)

它不会抛出任何异常。

在我的代码中,我使用 boto 连接到 SQS 队列

sqs_conn = boto.sqs.connect_to_region(self.region)
LOG.debug("Getting queue for %s" % queue_name)
return sqs_conn.get_queue(queue_name)
Run Code Online (Sandbox Code Playgroud)

我是否错过了连接 SQS 队列的任何权限?

Pey*_*rov 6

首先,我会仔细检查我的应用程序配置是否使用正确的 sqs 名称/区域/帐户设置。

以下是您可能需要向应用程序授予哪些权限才能与 SQS 配合使用的示例。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "sqs:DeleteMessage",
                "sqs:GetQueueUrl",
                "sqs:ListQueues",
                "sqs:ChangeMessageVisibility",
                "sqs:SendMessageBatch",
                "sqs:ReceiveMessage",
                "sqs:SendMessage",
                "sqs:GetQueueAttributes",
                "sqs:ListQueueTags",
                "sqs:ListDeadLetterSourceQueues",
                "sqs:DeleteMessageBatch",
                "sqs:ChangeMessageVisibilityBatch",
                "sqs:SetQueueAttributes"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:sqs:your-region:account-id-number:your-sqs-name"
            ]
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

这将为您的应用程序提供读/写访问权限,但不提供管理访问权限。

您执行的 aws 命令可能使用本地 aws 配置凭证,这就是它不会给出任何错误的原因。

我怀疑这里的主要原因是 boto 尝试先列出队列,然后再尝试使用它。

更多信息:Amazon SQS API 权限:操作和资源参考

问候。