我正在尝试使用 AWS 最近宣布的“EC2 的 IAM 角色”功能,该功能可以让安全凭证自动传送到 EC2 实例。(请参阅http://aws.amazon.com/about-aws/whats-new/2012/06/11/Annocing-IAM-Roles-for-EC2-instances/)。
如上所述,我已经设置了一个具有 IAM 角色的实例。我还可以(看似)使用 curl 获取正确的访问密钥/凭据。
但是,boto 无法执行像“get_all_buckets”这样的简单调用,即使我已经为该角色打开了所有 S3 权限。
我得到的错误是“您提供的 AWS 访问密钥 ID 在我们的记录中不存在”
但是,错误中列出的访问密钥与我从 curl 获得的访问密钥匹配。
以下是失败的脚本,在 EC2 实例上运行,附加了一个 IAM 角色,该角色授予所有 S3 权限:
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()