使用boto连接到Amazon SQS

时间:2016-06-29 07:48:25

标签: python amazon-web-services amazon-sqs boto3

我正在尝试通过python boto库连接到Amazon SQS。

import boto3
sqs= boto3.resource('sqs')
for queue in sqs.queues.all():
    print(queue.url)

我已将我的凭据存储在〜/ .aws /凭证文件

[default]
aws_access_key_id=XXX
aws_secret_access_key=YYY
region=us-west-2

但是当我执行代码时出现错误

  

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

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

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

我的IAS管理控制台也出错了。我无法列出任何用户。

enter image description here enter image description here

4 个答案:

答案 0 :(得分:6)

您确定您的用户已获得SQS权限吗?

转到 IAM 服务,选择您的用户(您在CLI中使用的用户)并检查附加到您用户的组/权限。

如果您还没有,可以在“搜索IAM”框中搜索SQS(左上角)

enter image description here

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

答案 1 :(得分:1)

我最终使用的是之前版本的Boto(2)

答案 2 :(得分:1)

我知道这很古老,但是如果有人先接触到SO:这可能是因为您要连接的区域。

我可以通过aws Web控制台访问us-east-1中的SQS,但是尝试从us-east-1中的队列中检索消息会导致python客户端的访问被拒绝。

非常感谢,在github讨论中:https://github.com/aws/aws-sdk-php/issues/188#issuecomment-258880267,我尝试将区域更改为应该具有权限的区域,并且能够从该区域中创建的队列接收消息。

答案 3 :(得分:0)

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

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中提取这些值,但settings中的值最终还是从env变量中提取的,即不要只是保存您的AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY到您的设置文件并提交到Git。它们是敏感数据,您还希望能够即时更新它们,而不是重新提交等。