AWS SDK for Java
開発者ガイド

AWS STS を使用した一時的な認証情報の取得

AWS Security Token Service (AWS STS) を使用して、AWS のサービスへのアクセスに使用できる一時的な限定権限認証情報を取得できます。

AWS STS の使用には 3 つのステップがあります。

  1. リージョンをアクティブ化する (オプション)。

  2. AWS STS から一時的なセキュリティ認証情報を取得する。

  3. 認証情報を使用して AWS リソースにアクセスする。

注記

リージョンのアクティブ化はオプションです。デフォルトでは、一時的なセキュリティ認証情報はグローバルエンドポイント sts.amazonaws.com から取得されます。ただし、最初のエンドポイントに対する AWS STS リクエストが失敗した場合に、レイテンシーを軽減し、追加のエンドポイントを使用してリクエストに冗長性を構築できるように、認証情報を使用するサービスやアプリケーションに近い場所に存在しているリージョンをアクティブ化できます。

(オプション) AWS STS リージョンのアクティブ化と使用

AWS STS に使用するリージョンをアクティブ化するには、AWS マネジメントコンソールを使用してリージョンを選択し、アクティブ化します。

追加の STS リージョンをアクティブ化するには

  1. 新しいリージョンで AWS STS をアクティブ化する対象のアカウントに対して、IAM 管理タスク ("iam:*") を実行するアクセス権限を持つ IAM ユーザーとしてサインインします。

  2. IAM コンソールを開き、ナビゲーションペインで [Account Settings] をクリックします。

  3. [STS Regions] リストを展開し、使用するリージョンを見つけて、[Activate] をクリックします。

こうすることで、そのリージョンに関連付けられる STS エンドポイントに対して直接呼び出しができます。

注記

STS リージョンのアクティブ化の詳細と使用可能な AWS STS エンドポイントのリストについては、『IAM User Guide』の「AWS リージョンでの AWS STS のアクティブ化と非アクティブ化」を参照してください。

AWS STS から一時的なセキュリティ認証情報を取得する

AWS SDK for Java を使用して一時的なセキュリティ認証情報を取得するには

  1. AWSSecurityTokenServiceClient オブジェクトを作成します。

    AWSSecurityTokenService sts_client = new AWSSecurityTokenServiceClientBuilder().standard().withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration("sts-endpoint.amazonaws.com", "signing-region")).build()

    引数を指定せずにクライアントを作成する場合 (AWSSecurityTokenServiceClient sts_client = new AWSSecurityTokenServiceClientBuilder().standard().build();)、デフォルトの認証情報プロバイダチェーンを使用して認証情報が取得されます。必要に応じて特定の認証情報プロバイダーを指定できます。詳細については、「AWS SDK for Java での AWS 認証情報の提供」を参照してください。

  2. オプション; リージョンをアクティブ化しておく必要があります) STS クライアントのエンドポイントを設定します。

    sts_client.setEndpoint("sts-endpoint.amazonaws.com");

    ここでの sts-endpoint はリージョンの STS エンドポイントを表します。

    重要

    setRegion メソッドを使用して、リージョンエンドポイントを設定しないでください。このメソッドは、下位互換性のために、引き続き元の単一のグローバルエンドポイントである sts.amazonaws.com を使用します。

  3. GetSessionTokenRequest オブジェクトを作成し、オプションで一時的な認証情報の有効期間を秒で設定します。

    GetSessionTokenRequest session_token_request = new GetSessionTokenRequest(); session_token_request.setDurationSeconds(7200); // optional.

    IAM ユーザーの一時的な認証情報の有効期間は 900 秒 (15 分) から 129600 秒 (36 時間) までの範囲で設定できます。期間を指定しない場合、デフォルトで 43200 秒 (12 時間) が使用されます。

    ルート AWS アカウントの場合、一時的な認証情報の有効期間の範囲は 900 秒から 3600 秒まで指定できます。有効期間を指定しない場合のデフォルト値は 3600 秒 (1 時間) です。

    重要

    セキュリティ上の観点から、AWS アクセスにはルートアカウントの代わりに IAM ユーザーを使用することを強くお勧めします。詳細については、IAM User Guide の「IAM のベストプラクティス」を参照してください。

  4. STS クライアントで getSessionToken を呼び出して、GetSessionTokenRequest オブジェクトを使用してセッショントークンを取得します。

    GetSessionTokenResult session_token_result = sts_client.getSessionToken(session_token_request);
  5. getSessionToken 呼び出しの結果を使用してセッション認証情報を取得します。

    Credentials session_creds = session_token_result.getCredentials();

セッション認証情報は、GetSessionTokenRequest オブジェクトによって指定された期間のみアクセスを提供します。認証情報の期限が切れると、もう一度 getSessionToken を呼び出して、AWS へのアクセスを継続するための新しいセッショントークンを取得する必要があります。

一時的な認証情報を使用した AWS リソースへのアクセス

一時的な認証情報を取得すると、それを使用して AWS のサービスクライアントを初期化し、リソースを使用できます。方法は認証情報の明示的な指定で説明されています。

たとえば、一時的なサービス認証情報を使用して S3 クライアントを作成するには、次のように指定します。

BasicSessionCredentials sessionCredentials = new BasicSessionCredentials( session_creds.getAccessKeyId(), session_creds.getSecretAccessKey(), session_creds.getSessionToken()); AmazonS3 s3 = AmazonS3ClientBuilder.standard() .withCredentials(new AWSStaticCredentialsProvider(sessionCredentials)) .build();

これで、AmazonS3 オブジェクトを使用して Amazon S3 リクエストを実行できます。

詳細については

AWS リソースにアクセスするための一時的なセキュリティ認証情報の使用方法の詳細については、IAM User Guide で以下のセクションを参照してください。