使用boto连接到Amazon SQS

Dha*_*oon 2 python amazon-sqs amazon-web-services boto3

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

import boto3
sqs= boto3.resource('sqs')
for queue in sqs.queues.all():
    print(queue.url)
Run Code Online (Sandbox Code Playgroud)

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

[default]
aws_access_key_id=XXX
aws_secret_access_key=YYY
region=us-west-2
Run Code Online (Sandbox Code Playgroud)

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

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

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

但后来它告诉我没有这样的队列.即使我可以在AWS管理控制台上看到它.有任何想法吗 ?

我的IAS管理控制台也出错了.在哪里我无法列出任何用户.

在此输入图像描述 在此输入图像描述

Fré*_*nri 6

您确定您的用户已SQS获得许可吗?

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

如果没有,可以SQS在"搜索IAM"框中搜索(左上角)

在此输入图像描述

选择"将实体附加到AmazonSQSReadOnlyAccess(或AmazonSQSFullAccess)"并为您的用户附加预定义的策略


jmq*_*jmq 6

虽然其他答案也有其用处,但我的问题最终只是我需要显式传递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)
Run Code Online (Sandbox Code Playgroud)

当我提取settings这些值时,其中的值settings最终是从环境变量中提取的,即只是将AWS_ACCESS_KEY_ID和保存AWS_SECRET_ACCESS_KEY到设置文件并提交到 Git。它们是敏感数据,您还希望能够动态更新它们,而不是重新提交等。


Dha*_*oon 0

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