【发布时间】:2016-04-06 14:48:39
【问题描述】:
我无法通过 EC2 实例使用其关联的 IAM 角色 与 对 AWS 简单队列服务 (SQS) 进行身份验证>Boto 2.38 库(和 Python 3)。
我找不到关于它的文档的任何具体内容,但据我从示例和其他问题中了解到的,它应该可以像这样打开一个连接。
conn = boto.sqs.connect_to_region('us-east-1')
queue = conn.get_queue('my_queue')
相反,我从 connect 方法中获得一个 null 对象,除非我在我的环境中提供凭据,或者明确地提供给该方法。
我很确定我的角色没问题,因为它适用于其他服务,如 S3,描述 EC2 标签,将指标发送到 CloudWatch等,都是透明的。我的 SQS 政策是这样的:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "SQSFullAccess",
"Effect": "Allow",
"Action": [
"sqs:*"
],
"Resource": [
"arn:aws:sqs:us-east-1:<account_id>:<queue_name1>",
"arn:aws:sqs:us-east-1:<account_id>:<queue_name2>"
]
}
]
}
为了消除对我政策的怀疑,我什至暂时将 FullAdmin 政策与我的角色相关联,但没有成功。
我还验证了它也不能与 AWS CLI 一起使用(据我所知,它也使用 Boto)。所以,我能得出的唯一结论是,这是 SQS 客户端的 Boto 问题。
会有人对此有不同的体验吗?我知道切换到 Boto 3 可能会解决它,但我现在不考虑这样做,如果它真的是一个错误,我认为它应该在 git 上报告,无论如何。
谢谢。
【问题讨论】:
-
尝试使用
--debug标志运行 AWSCLI 并在此处发布输出。根据您的描述,听起来 boto 和 AWSCLI(它不是基于 boto 而是基于 botocore)只是没有在您的实例上找到 IAM 角色。 -
解决了!我不会在这里粘贴完整的输出,因为它太长了。但是有两个问题。 1) 在我用来向 CLI 发送消息的 root 用户中,有一个凭证文件覆盖了 iam-role,这似乎是 Boto 寻找身份验证的最后一个文件。删除后我可以清楚地看到调试模式的差异。 2)关于我的应用程序,在验证来自环境的凭据时存在错误,如果它不存在,它永远不会进入下一个块,我不会将任何凭据传递给客户端。谢谢你的提示,这对我来说很清楚。
标签: python-3.x amazon-web-services boto amazon-sqs