我正在嘗試使用AWS最近宣佈的「ECAM的IAM角色」功能,該功能可以讓安全證書自動傳遞到EC2實例。 (見http://aws.amazon.com/about-aws/whats-new/2012/06/11/Announcing-IAM-Roles-for-EC2-instances/)。boto問題與IAM角色
我已經建立了一個具有IAM角色的實例,如上所述。我還可以通過curl(看似)獲得適當的訪問密鑰/證書。
但是,boto未能做一個簡單的調用,如「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()
對於手動方法,你是對的,加入security_token就可以解決它。謝謝!我將你標記爲「答案」。 – Nils
您發佈的簡化版本在升級到2.5.1後也可以使用。所以如果我能給你兩個接受,我會的! – Nils
太棒了,很高興它現在適合你。我喜歡新的IAM角色功能,它非常漂亮。 – garnaat