我无法使用与 Boto 2.38 库(和Python 3)关联的IAM角色从EC2实例向AWS Simple Queue Service(SQS)进行身份验证 .
我找不到任何关于它的文档的具体内容,但就我可以从示例和其他问题中理解,它应该只是打开这样的连接 .
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可能会解决它,但我不认为现在就这样做,如果它确实是一个bug,我认为它应该在git上报告,无论如何 .
谢谢 .
1 回答
回答自己 .
Boto的2.38 SQS客户端 does 与IAM角色合作 . 我的应用程序中有一个错误 .
对于AWS CLI,凭证文件(〜/ .aws / credentials)存在于我的本地帐户中,而是用于代替实例的角色,因为该角色是CLI要查找的最后一个角色 .