Amazon Elastic Compute Cloud (Amazon EC2) インスタンスで動作する AWS SDK for Java を使用する Java アプリケーションでは、次のような例外が発生する可能性があります。

com.amazonaws.AmazonServiceException: リクエストに含まれているセキュリティトークンが無効です (Service: AmazonSQS; Status Code: 403; Error Code: ExpiredToken; Request ID: 12a345b6-78cd-901e-fg23-45hi67890jkl)

アマゾン ウェブ サービス (AWS) へのアプリケーション API リクエストはすべて、AWS が発行した認証情報を使用して暗号で署名される必要があります。

AWS クライアント (AmazonSQS クライアントなど) の作成時に、アプリケーションで一時的認証情報を使用する場合、その認証情報は、作成時に指定された時間間隔で失効します。認証情報が失効する前に、更新されることを確認する必要があります。

失効するもうひとつの理由として、不正な時間の使用があります。サーバータスクとプロセスの多くには、一貫して正確な時間参照が不可欠です。インスタンスの日時が正しく設定されていない場合、AWS の認証情報が拒否されることがあります。

アプリケーションが Amazon EC2 インスタンス上で実行されている場合は、そのインスタンスに割り当てられている AWS Identity and Access Management (IAM) ロールを使用することをお勧めします。IAM ロールを使用することで、デフォルトのサービスコンストラクタを使用することができます。デフォルトのコンストラクタクライアントは、デフォルトの認証情報プロバイダーチェーンを使用して次の順序で認証情報を検索します。

  1. システム環境変数: AWS_ACCESS_KEY_ID と AWS_SECRET_ACCESS_KEY。
  2. Java システムプロパティ: aws.accessKeyId と aws.secretKey。
  3. デフォルトの認証情報ファイル (このファイルの場所はプラットフォームによって異なります)。
  4. インスタンスプロファイル認証情報。EC2 インスタンスの IAM ロールに関連付けられたインスタンスメタデータ内にあります。インスタンスプロファイル認証情報は、インスタンスプロファイルをインスタンスにアタッチする際に、デフォルトの認証情報プロバイダーに追加されます。詳細については、「IAM ロールを使用して、Amazon EC2 インスタンスで実行されるアプリケーションにアクセス許可を付与する」を参照してください。

インスタンスプロファイルの認証情報が有効な場合、デフォルトのクライアントコンストラクタは、AWS SDK InstanceProfileCredentialsProvider クラスのインスタンスを作成します。このクラスは、Amazon EC2 インスタンスのメタデータ一時的セキュリティ認証情報を使用して、AWS 認証情報で API リクエストに署名するために使用されます。

重要: アプリケーションで、AWS SDK の ProfileCredentialsProvider クラスを使用して、一時的な AWS 認証情報を指定している場合は、有効期限が切れる前に、認証情報を確認して更新する必要があります。認証情報の確認や更新を行わない場合は、ExpiredToken エラーによってアプリケーションの障害が発生する可能性が高くなります。

Amazon Time Sync Service または NTP ソースを使用する

Linux インスタンスの時間設定が一貫して正確であることを確認するには、Amazon EC2 インスタンスの Amazon Time Sync Service または別のネットワークタイムプロトコル (NTP) ソースを設定します。詳細については、「Linux インスタンスの時刻の設定」、または「Windows インスタンスの時刻を設定する」を参照してください。

カスタムの一時的な AWS 認証情報を使用する

有効期限が切れる 5 分前に一時的認証情報を更新する

インスタンスに割り当てられた IAM ロールを使用する

インスタンスプロファイルをインスタンスにアタッチします。詳細については、「IAM ロールを使用して、Amazon EC2 インスタンスで実行されるアプリケーションにアクセス許可を付与する」を参照してください。コードやインスタンスで他の認証情報が指定されていないことを確認します。デフォルトの認証情報プロバイダーチェーンが認証情報を検索する際にインスタンスプロファイルの認証情報を使用することはほとんどありません。検索チェーンより優先される場所に認証情報がある場合は、IAM を使用できなくなります。詳細については、「AWS 認証情報の使用」を参照してください。

インスタンスにアタッチされている IAM ロールの AWS 認証情報を表示するには、Linux シェル、または Windows PowerShell (v3.0 以降) から次のコマンドを実行します。examplerole は必ず、IAM ロールの名前に置き換えてください。

Linux の場合は、curl コマンドを使用して、AWS 認証情報を表示します。

$ 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 の場合は、Invoke-RestMethod コマンドを使用して、AWS 認証情報を表示します。

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

Token           : token

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

インスタンスの最新の一時的認証情報を確認するには、これらのコマンドを使用します。これらの認証情報は、割り当てられている一時的認証情報の有効期限が切れる約 5 分前に自動的にローテーションまたは更新されます。


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

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

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

公開日: 2016 年 07 月 19 日

更新: 2018 年 11 月 06 日