python - IAM角色的bo​​to问题

标签 python amazon-s3 amazon-web-services boto

我正在尝试使用 AWS 最近宣布的“EC2 的 IAM 角色”功能,该功能可以让安全凭证自动传送到 EC2 实例。 (见 http://aws.amazon.com/about-aws/whats-new/2012/06/11/Announcing-IAM-Roles-for-EC2-instances/)。

我已经设置了一个具有 IAM 角色的实例,如上所述。我还可以(看似)使用 curl 获取正确的访问 key /凭据。

但是,boto 无法执行像“get_all_buckets”这样的简单调用,即使我已经为该角色打开了所有 S3 权限。

我得到的错误是“您提供的 AWS 访问 key ID 在我们的记录中不存在”

但是,错误中列出的访问 key 与我从 curl 获得的访问 key 匹配。

这是失败的脚本,在 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()

最佳答案

如果您使用的是 boto 2.5.1 或更高版本,它实际上比这容易得多。只要在环境变量或 boto 配置文件中没有找到其他凭据,Boto 就会自动为您在实例元数据中查找凭据并使用它们。因此,您应该能够在 EC2 实例上简单地执行此操作:

>>> import boto
>>> c = boto.connect_s3()
>>> rs = c.get_all_buckets()

您的手动方法失败的原因是与 IAM 角色关联的凭证是临时 session 凭证,由 access_keysecret_keysecurity_token 并且您需要将所有这三个值提供给 S3Connection 构造函数。

关于python - IAM角色的bo​​to问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11129976/

相关文章:

python - Django 获取列表中每个值的最后一个对象

amazon-web-services - Amazon SageMaker 从 S3 下载文件

amazon-web-services - SimpleDB直接客户端访问

amazon-web-services - 从 govcloud ec2 实例访问商业 s3 存储桶

python - 如果项目在一个或两个(或 N 个)其他列表中,如何从列表中删除该项目

python - 如何检索对模拟的调用的所有内容?

python - 如何在文件读取期间从每一行中去除换行符?

java - 上传到 AWS S3 时签名不匹配

amazon-s3 - AWS cloudfront 在不使用 Lambda@Edge 的情况下添加自定义 header

amazon-web-services - 验证错误 : no updates are to be performed in Cloudformation returns error