相关疑难解决方法(0)

boto问题与IAM角色

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

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

但是,即使我为角色启用了所有S3权限,boto也无法像"get_all_buckets"那样进行简单的调用.

我得到的错误是"您提供的AWS访问密钥ID在我们的记录中不存在"

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

以下是失败的脚本,在附加了IAM角色的EC2实例上运行,该角色提供所有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()
Run Code Online (Sandbox Code Playgroud)

python amazon-s3 boto amazon-web-services

23
推荐指数
2
解决办法
3万
查看次数

如何(安全地)使用cloudinit将私有S3资产下载到新的EC2实例上?

我正在使用CloudFormation来管理Tomcat Web服务器堆栈,但我厌倦了为新的应用程序版本进行原始AMI管理.我想向厨师方向走,但现在没有时间.相反,我试图在网络服务器实例化中克服一个简单的问题:当新机器启动时,如何下载"当前"WAR?

我的想法是利用私有的S3存储桶和cloudinit,但我对IAM凭据的处理方式感到有点困惑.我可以将它们放在模板的用户数据中,但我不愿意这样做,特别是因为我是控制该文件的版本.我能想到的唯一选择是在AMI本身中使用环境变量.它们必须是纯文本,但是......呃,如果你可以打破我的实例,你可以压缩并下载我的整个网络服务器.只要IAM用户不被重复用于任何其他用户并且定期轮换,这似乎是解决问题的合理方法.我错过了什么吗?如何使用cloudinit安全地下载私有S3资产?

amazon-s3 amazon-web-services cloud-init aws-cloudformation

16
推荐指数
4
解决办法
2万
查看次数