Skip to content

IAMRoleのトークンによるS3アクセス時のトークンの期限切れについて

mechamogera edited this page Feb 7, 2013 · 9 revisions

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の通信内容についての調査

  1. GET /latest/meta-data/iam/security-credentials/
  • Role名を取得する
  1. GET /latest/meta-data/iam/security-credentials/[Role名]
  1. GET /[s3のダウンロード対象のキー]
  • S3からのファイルダウンロード
  • X-Amz-Security-Tokenヘッダに2.で取得したTokenの値が使用される
  1. 以下3.の繰り返し
  • ExpiredTokenエラーについて
  • 2012/09/29 13:54:24(GMT)にスクリプト開始
  • 取得したExpirationは2012-09-29T20:13:30Z
  • 開始から30分毎にs3からダウロードし19:54:31まで成功、20:24:30にExpiredTokenでエラーとなり以後ずっとエラー
Clone this wiki locally