AWS が最近発表した「EC2 の IAM ロール」機能を使用しようとしています。これにより、セキュリティ資格情報が EC2 インスタンスに自動的に配信されます。( http://aws.amazon.com/about-aws/whats-new/2012/06/11/Announce-IAM-Roles-for-EC2-instances/を参照)。
説明されているように、IAM ロールを持つインスタンスをセットアップしました。curl を使用して (一見) 適切なアクセス キー/資格情報を取得することもできます。
ただし、役割に対してすべての S3 権限を有効にしても、boto は「get_all_buckets」のような単純な呼び出しを実行できません。
表示されるエラーは、「指定された AWS アクセス キー ID は当社の記録に存在しません」です。
ただし、エラーにリストされているアクセス キーは、curl から取得したものと一致します。
すべての S3 権限を付与する IAM ロールがアタッチされた 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()