IAM角色的bo​​to问题

发布于 2021-01-29 17:47:09

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

如上所述,我已经设置了一个具有IAM角色的实例。我还可以通过curl获得(貌似)正确的访问密钥/凭据。

但是,即使我已为该角色打开了ALL S3权限,boto也无法执行“ get_all_buckets”之类的简单调用。

我收到的错误是“您提供的AWS Access Key ID在我们的记录中不存在”

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

以下是失败的脚本,该脚本在附加了IAM角色且具有所有S3权限的EC2实例上运行:

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()
关注者
0
被浏览
45
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

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

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

    手动方法失败的原因是,与IAM角色关联的凭据是一个临时会话凭据,并且由access_key,asecret_key和a组成security_token,您需要将所有这三个值提供给S3Connection构造函数。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看