从ec2实例到安全凭证的169.254.169.254调用返回无效凭证

所以从理论上讲,如果一个人需要Amazon服务器的有效凭证,而不是在他们的访问密钥/密码中进行硬编码,那么可以调用169.254.169.254作为凭证来访问某些资源,例如:

js = '' open('http://169.254.169.254/latest/meta-data/iam/security-credentials/<role>') { |f| f.each_line {|line| js += line} } credentials = JSON.load(js) ndnode[:s3_access_key_id] = credentials['AccessKeyId'] ndnode[:s3_secret_access_key] = credentials['SecretAccessKey'] 

然后在这里使用访问的东西:

  conn = AWS::EC2::Base.new(:access_key_id => ndnode[:s3_access_key_id], :secret_access_key => ndnode[:s3_secret_access_key]) # THIS ALWAYS FAILS result = conn.describe_instances(:instance_id => instance_id) 

我不喜欢将我的访问密钥和密码硬编码到源代码的想法,我想要一个解决方法。

1)我和我的老板纠正这是一种解决方法吗? 2)如果对1,是这样做的正确方法是什么? 如果不是1,有没有办法避免检查凭证到源(在这里或在configuration文件),它是什么? 3)为了回应@ Edwin的回应,我在AWS gem API中放置了安全令牌? Boto已经被报告让我连接我给的凭据,这意味着分离一个进程,并设置一些环境variables,以便Ruby可以使用Boto连接请求信息。

许多AWS软件开发工具包都支持内置的EC2configuration文件中的IAMangular色。使用.Net,您可以使用无参数的构造函数来使用它们。 确保您使用的是最新版本的SDK。

这里是亚马逊的页面,介绍如何在IAMangular色中使用Ruby SDK 。