使用boto连接Amazon SQS

5
我正在尝试通过Python的Boto库连接到Amazon SQS。
import boto3
sqs= boto3.resource('sqs')
for queue in sqs.queues.all():
    print(queue.url)

我已将我的凭据存储在 ~/.aws/credentials 文件中。
[default]
aws_access_key_id=XXX
aws_secret_access_key=YYY
region=us-west-2

但是当我执行代码时,我遇到了一个错误

botocore.exceptions.ClientError:调用ListQueues操作时发生错误(AccessDenied):拒绝访问资源https://us-west-2.queue.amazonaws.com/

我尝试直接连接队列。 LCqueue = sqs.get_queue_by_name(QueueName ='myQueue')

但是然后它告诉我没有这样的队列。即使我可以在AWS管理控制台上看到它。 有什么想法吗?

我还在我的IAS管理控制台上遇到错误。 我无法列出任何用户。

输入图像描述 输入图像描述

4个回答

12

请确认您的用户已被授予SQS的权限。

前往 IAM 服务,选择您的用户(即您在CLI中使用的那个用户),并检查附加到该用户的组/权限。

如果没有,请在“搜索IAM”框(左上角)中搜索SQS

输入图像描述

选择“将实体附加到AmazonSQSReadOnlyAccess(或AmazonSQSFullAccess)”,并在您的用户上附加预定义策略。


我必须使用AWS管理控制台吗?因为我在上面看不到IAM搜索框? - Dhanushka Amarakoon
好的,我找到了搜索IAM框,但是当我在上面输入sqs时没有结果。 - Dhanushka Amarakoon
奇怪,你应该有匹配项。我附上了截图。它应该来自 AWS 控制台 - 然后是 IAM 服务。 - Frederic Henri
当我点击用户时,出现错误。用户:arn:aws:iam::XXX:user/yyy未被授权在资源arn:aws:iam::XXX:user/上执行iam:ListUsers操作。 - Dhanushka Amarakoon
1
好的,所以您需要联系您的 AWS 管理员,以便他在您的用户上授予您权限。 - Frederic Henri
啊,那就说得通了。谢谢。 - Dhanushka Amarakoon

6

虽然其他答案也很有用,但我的问题最终只是需要在boto3.client()调用中明确传递aws_access_key_idaws_secret_access_key参数。(在~/.aws/credentials中具有[default]配置不足够。)

import boto3
from django.conf import settings

sqs = boto3.client('sqs',
                   region_name=settings.AWS_DEFAULT_REGION,
                   aws_access_key_id=settings.AWS_ACCESS_KEY_ID,
                   aws_secret_access_key=settings.AWS_SECRET_ACCESS_KEY)

虽然我正在从settings中获取这些值,但最终被提取的值是从环境变量中获取的,即不要仅将您的AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY保存到设置文件并提交至Git。它们是敏感数据,您还希望能够在运行时更新它们,而不是重新提交等。


正是我所需要的。为什么这不能在文档中呢? - Atma

2
我知道这篇文章比较旧了,但如果有人先在SO上看到它的话:可能是因为你尝试连接的区域不对。我可以通过AWS Web控制台访问us-east-1中的SQS,但是尝试从us-east-1中的队列检索消息却导致Python客户端出现“拒绝访问”的错误。幸运的是,在GitHub讨论中:https://github.com/aws/aws-sdk-php/issues/188#issuecomment-258880267,我尝试将区域更改为我应该具有权限的区域,并且我能够从创建在该区域中的队列接收消息。

0

我最终使用了 Boto 的旧版本(2)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接