我正在尝试使用AWS最近宣布的“ECAM的IAM角色”功能,该功能可以让安全证书自动传递到EC2实例。 (见http://aws.amazon.com/about-aws/whats-new/2012/06/11/Announcing-IAM-Roles-for-EC2-instances/)。boto问题与IAM角色
我已经建立了一个具有IAM角色的实例,如上所述。我还可以通过curl(看似)获得适当的访问密钥/证书。
但是,boto未能做一个简单的调用,如“get_all_buckets”,尽管我已经打开了该角色的所有S3权限。
我得到的错误是
“你提供我们的记录中不存在的AWS访问密钥”然而,在错误中列出的访问密钥相匹配的一个我从卷曲得到。
这里是失败的脚本,在EC2实例与给所有S3权限连接的IAM角色运行:
import urllib2
import ast
from boto.s3.connection import S3Connection
resp=urllib2.urlopen('http://169.254.169.254/latest/meta-data/iam/security-credentials/DatabaseApp').read()
resp=ast.literal_eval(resp)
print "access:" + resp['AccessKeyId']
print "secret:" + resp['SecretAccessKey']
conn = S3Connection(resp['AccessKeyId'], resp['SecretAccessKey'])
rs= conn.get_all_buckets()
对于手动方法,你是对的,加入security_token就可以解决它。谢谢!我将你标记为“答案”。 – Nils
您发布的简化版本在升级到2.5.1后也可以使用。所以如果我能给你两个接受,我会的! – Nils
太棒了,很高兴它现在适合你。我喜欢新的IAM角色功能,它非常漂亮。 – garnaat