IAMRoleのトークンによるS3アクセス時のトークンの期限切れについて - mechamogera/MyTips GitHub Wiki
S3アクセス時のExpired Tokenエラーについて
- EC2インスタンス上でIAM Roleを設定して、以下のようにrubyとaws-sdkを利用してアクセスする。
s3 = AWS::S3.new(options)
bucket = s3.buckets[bucket]
object = bucket.objects[object_key]
while true
object.read
sleep 60 * 10
end
- そのうち、以下のようなExpiredTokenエラーが発生する
The provided token has expired.
現象確認環境
- ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-linux]
- aws-sdk (1.6.6)
原因の考察
aws-sdkの通信内容についての調査
- GET /latest/meta-data/iam/security-credentials/
- GET /latest/meta-data/iam/security-credentials/[Role名]
- GET /[s3のダウンロード対象のキー]
- S3からのファイルダウンロード
- X-Amz-Security-Tokenヘッダに2.で取得したTokenの値が使用される
- 以下3.の繰り返し
- ExpiredTokenエラーについて
- 2012/09/29 13:54:24(GMT)にスクリプト開始
- 取得したExpirationは2012-09-29T20:13:30Z
- 開始から30分毎にs3からダウロードし19:54:31まで成功、20:24:30にExpiredTokenでエラーとなり以後ずっとエラー