Amazon EC2で起動している、AWS SDK for Javaを使ったJavaアプリケーションが、以下のような例外に遭遇します。

com.amazonaws.AmazonServiceException: The security token included in the request is expired(Service: AmazonSQS; Status Code: 403; Error Code: ExpiredToken; Request ID: 12a345b6-78cd-901e-fg23-45hi67890jkl)

アマゾン ウェブ サービス()へのリクエストはすべて、AWS が発行した認証情報を使用して暗号で署名される必要があります。もしアプリケーションが、AWSクライアント(上記の例外で言及しているAmazonSQSなど)を作成したときに一時的な認証情報を使っている場合は、その認証情報を作成した時に指定した有効期限が切れています。アプリケーションがAmazon EC2のインスタンス上で実行されている場合は、インスタンスに割り当てられたIAMロールをお使いになることをお勧めします。IAMロールを使うと、デフォルトのサービスコンストラクタを使うことができます。デフォルトのコンストラクタは、デフォルトの認証情報チェーンを使って、以下の順番で認証情報を検索します。

  1. システムの環境変数。AWS_ACCESS_KEY_IDとAWS_SECRET_ACCESS_KEY
  2. Javaのシステムプロパティ。aws.accessKeyIdとaws.secretKey
  3. デフォルトの認証情報ファイル(このファイルの場所はプラットフォームによって異なります)。
  4. インスタンスプロファイル認証情報。EC2 インスタンスの IAM ロールに関連付けられたインスタンスメタデータ内にあります。インスタンスプロファイルをインスタンスに添付すると、デフォルトの認証情報プロバイダーにインスタンスプロファイル認証情報が追加されます。「Using an IAM Role to Grant Permissions to Applications Running on Amazon EC2 Instances」を参照ください。

インスタンスプロファイル認証情報が利用できる場合は、デフォルトのクライアントのコンストラクタがAWS SDKのInstanceProfileCredentialsProviderクラスのインスタンスを作成し、一時的な認証情報をAmazon EC2のインスタンスのメタデータから使用して、AWSの認証情報でAPIリクエストに署名します。

重要
アプリケーションがAWS SDKのProfileCredentialsProviderクラスを使用してAWSの一時的な認証情報を提供している場合は、有効期限を確認し、有効期限が切れる前に認証情報をリフレッシュしなければなりません。認証情報の確認をしなかったり、リフレッシュをしなかったりすると、ExpiredTokenエラーによるアプリケーションの障害が発生する可能性が高くなります。

一時的な認証情報は有効期限の5分前にリフレッシュすることをお勧めします。 

インスタンスにインスタンスプロファイルを添付します。「Using an IAM Role to Grant Permissions to Applications Running on Amazon EC2 Instances」を参照ください。インスタンスだけでなく、コードにも他の認証情報の指定が残ってないことを確認してください。デフォルトの認証情報プロバイダーチェーンに指定されている、最初の3つのいずれの方法を使っても、デフォルトの認証プロバイダーチェーンの4番目に記載されている方法でIAMロールが使用されることを阻止できます。


インスタンスに添付されているIAM用のAWS認証情報を見るには、以下のコマンドを、LinuxのシェルまたはWindows PowerShell(v3.0以降)から実行します。その後、exampleroleロールをIAMロールの名前に置き換えます。

  • Linux:

$ curl http://169.254.169.254/latest/meta-data/iam/security-credentials/examplerole

このコマンドにより、以下のような出力が返されます。

{

     "Code" : "Success",

     "LastUpdated" : "2016-04-26T16:39:16Z",

     "Type" : "AWS-HMAC",

     "AccessKeyId" : "AKIAIOSFODNN7EXAMPLE",

     "SecretAccessKey" : "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",

     "Token" : "token",

     "Expiration" : "2016-04-27T22:39:16Z"

}

  • Windows:

PS C:\> Invoke-RestMethod http://169.254.169.254/latest/meta-data/iam/security-credentials/examplerole

このコマンドにより、以下のような出力が返されます。

Code            : Success

LastUpdated     : 2016-07-18T18:09:47Z

Type            : AWS-HMAC

AccessKeyId     : AKIAIOSFODNN7EXAMPLE

SecretAccessKey : wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY

トークン:トークン

有効期限:2016-04-27T22:39:16Z

これらのコマンドを使って、インスタンスの最新の一時的な認証情報を確認してください。これらの一時的な認証情報は、有効期限のおおむね5分前に、自動的にローテーションまたはリフレッシュが行われます。

インスタンス プロファイル、セキュリティ トークン、EC2、Java、SDK、AmazonServiceException、認証情報、リフレッシュ、ProfileCredentialsProvider、有効期限切れ


このページは役に立ちましたか? はい | いいえ

AWS サポートナリッジセンターに戻る

サポートが必要ですか?AWS サポートセンターをご覧ください。

公開日: 2016 年 07 月 19 日
更新: 2016 年 07 月 20 日