博托问题与IAM角色(boto issue with IAM role)

2019-06-25 15:01发布

我试图使用AWS”最近公布的‘IAM角色EC2’功能,它可以让安全证书自动获取传递到EC2实例。 (见http://aws.amazon.com/about-aws/whats-new/2012/06/11/Announcing-IAM-Roles-for-EC2-instances/ )。

我所描述的建立一个实例与IAM角色。 我还可以得到卷曲(貌似)正确的访问密钥/凭据。

然而,博托不能做一个简单的调用,比如“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()

Answer 1:

如果您使用的博托2.5.1或更高版本,它实际上比这更简单。 宝途会自动找到适合你的实例元数据的凭据,只要使用它们,因为没有其他凭据在环境变量或者在博托配置文件中找到。 所以,你应该能够简单地做这在EC2实例:

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

您手动方法失败的原因是,与IAM角色相关联的证书是一个临时会话证书,由一个的access_key ,一个secret_keysecurity_token ,你需要所有这三个值提供给S3Connection构造。



Answer 2:

我不知道这个答案将帮助任何人,但我得到了同样的错误,我不得不有点不同解决我的问题。 首先,我的亚马逊实例没有任何IAM角色。 我以为我可以只使用访问密钥和私有密钥,但我一直收到此错误,只有这两个键。 我读我需要一个安全令牌为好,但我没有一个是因为我没有任何IAM角色。 这是我做过什么来纠正问题:

  1. 创建AmazonS3FullAccess权限的IAM角色。
  2. 启动一个新的实例,附上我的新创建的角色。
  3. 即使这样做之后仍然没有奏效。 我只好也连接到与下面的代码正确的区域:

    进口boto.s3.connection
    康恩= boto.s3.connect_to_region(“你的区域”)
    conn.get_all_buckets()



文章来源: boto issue with IAM role