AWS SDK for Java への一時的な認証情報の提供 - AWS SDK for Java 1.x

AWS SDK for Java 1.x は 2024 年 7 月 31 日にメンテナンスモードに入り、2025 年 12 月 31 日にサポート終了となります。新しい機能、可用性の向上、セキュリティ更新のために、AWS SDK for Java 2.x に移行することをお勧めします。

AWS SDK for Java への一時的な認証情報の提供

Amazon Web Services にリクエストを行うには、AWS SDK for Java がサービスを呼び出すときに使用する AWS の一時的な認証情報を入力する必要があります。これは以下の方法で対応できます。

  • デフォルトの認証情報プロバイダーチェーンを使用する (推奨)

  • 特定の認証情報プロバイダーまたはプロバイダーチェーンを使用する (または独自のものを作成する)。

  • 一時的な認証情報はご自分でコードに入力してください。

デフォルトの認証情報プロバイダチェーンの使用

引数を指定しないで新しいサービスクライアントを初期化すると、AWS SDK for Java は DefaultAWSCredentialsProviderChain クラスによって実装されたデフォルトの認証情報プロバイダーチェーンを使用して一時的な認証情報の検索を試みます。デフォルトの認証情報プロバイダーチェーンは、次の順序で認証情報を検索します。

  1. 環境変数 - AWS_ACCESS_KEY_ID AWS_SECRET_KEY、またはAWS_SECRET_ACCESS_KEY および AWS_SESSION_TOKEN。AWS SDK for Java は EnvironmentVariableCredentialsProvider クラスを使用してこれらの認証情報を読み込みます。

  2. Java システムプロパティ - aws.accessKeyIdaws.secretKey (ただし、 aws.secretAccessKey ではありません)、および aws.sessionToken。AWS SDK for Java は SystemPropertiesCredentialsProvider を使用してこれらの認証情報を読み込みます。

  3. 環境またはコンテナからのウェブアイデンティティトークンの認証情報

  4. デフォルトの認証情報プロファイルファイル - この認証情報ファイルは通常 ~/.aws/credentials にあり (この場所はプラットフォームによって異なる場合があります)、多くの AWS SDK と AWS CLI によって共有されます。AWS SDK for Java は ProfileCredentialsProvider を使用してこれらの認証情報を読み込みます。

    AWS CLI によって提供される aws configureコマンドを使用して、認証情報ファイルを作成できます。または、テキストエディタでファイルを編集して作成できます。認証情報ファイル形式に関する情報については、「AWS Credentials File Format」を参照してください。

  5. Amazon ECS コンテナの認証情報 - 環境変数 AWS_CONTAINER_CREDENTIALS_RELATIVE_URI が設定されている場合に、Amazon ECS からロードされます。AWS SDK for Java は ContainerCredentialsProvider を使用してこれらの認証情報を読み込みます。この値の IP アドレスを指定できます。

  6. インスタンスプロファイル認証情報 - EC2 インスタンスで使用され、Amazon EC2 メタデータサービスによって提供されます。AWS SDK for Java は InstanceProfileCredentialsProvider を使用してこれらの認証情報を読み込みます。この値の IP アドレスを指定できます。

    注記

    インスタンスプロファイル認証情報は、AWS_CONTAINER_CREDENTIALS_RELATIVE_URI が設定されていない場合にのみ使用されます。詳細については、「EC2ContainerCredentialsProviderWrapper」を参照してください。

一時的な認証情報の設定

AWS の一時的な認証情報を使用するためには、前述の場所の少なくとも 1 つで設定する必要があります。認証情報の設定の詳細については、以下のトピックを参照してください。

  • 環境またはデフォルトの認証情報プロファイルファイルでの認証情報の指定については、「一時的な認証情報の設定」を参照してください。

  • Java システムプロパティの設定については、公式の Java Tutorials ウェブサイトにある「System Properties」チュートリアルを参照してください。

  • EC2 インスタンスで使用するためのインスタンスプロファイル認証情報の設定および使用方法については、「Using IAM Roles to Grant Access to AWS Resources on Amazon EC2」を参照してください。

別の認証情報プロファイルの設定

AWS SDK for Java では、デフォルトでデフォルトプロファイルが使用されますが、認証情報ファイルでどのプロファイルが提供されるかをカスタマイズする方法があります。

AWS プロファイル環境変数を使用すると、SDK によってロードされるプロファイルを変更できます。

例えば、Linux、macOS、または Unix の場合は、次のコマンドを実行してプロファイルを myProfile に変更します。

export AWS_PROFILE="myProfile"

Windows の場合は次のコマンドを使用します。

set AWS_PROFILE="myProfile"

AWS_PROFILE 環境変数を設定した場合、正式にサポートされているすべての AWS SDK およびツール (例: AWS CLI、AWS Tools for Windows PowerShell) における認証情報のロードに影響を及ぼします。Java アプリケーションのプロファイルだけを変更する場合は、代わりにシステムプロパティ aws.profile を使用できます。

注記

環境変数はシステムプロパティより優先されます。

別の認証情報ファイルの場所を設定する

AWS SDK for Java はデフォルトの認証情報ファイルの場所から AWS の一時的な認証情報を自動的にロードします。ただし、認証情報ファイルへのフルパスを使用して AWS_CREDENTIAL_PROFILES_FILE 環境変数を設定することで、場所を指定することもできます。

この機能を使用して、AWS SDK for Java が認証情報ファイルを探す場所を一時的に変更できます (たとえば、コマンドラインでこの変数を設定するなど)。または、ユーザー環境やシステム環境で環境変数を設定して、ユーザーやシステム全体に対して変数を変更できます。

認証情報ファイルのデフォルトの場所を上書きするには

  • AWS 認証情報ファイルの場所に AWS_CREDENTIAL_PROFILES_FILE 環境変数を設定します。

    • Linux、macOS、または Unix では、次を使用します。

      export AWS_CREDENTIAL_PROFILES_FILE=path/to/credentials_file
    • Windows では、次を使用します。

      set AWS_CREDENTIAL_PROFILES_FILE=path/to/credentials_file

Credentials ファイル形式

このガイドの基本設定の指示に従うと、認証情報ファイルは次の基本形式になります。

[default] aws_access_key_id=<value from AWS access portal> aws_secret_access_key=<value from AWS access portal> aws_session_token=<value from AWS access portal> [profile2] aws_access_key_id=<value from AWS access portal> aws_secret_access_key=<value from AWS access portal> aws_session_token=<value from AWS access portal>

プロファイル名では角括弧 (例: [default]) に続いて、キーと値のペアとして、そのプロファイルの設定可能なフィールドを指定します。credentials ファイルで複数のプロファイルを持つことができ、それらは aws configure --profile PROFILE_NAME を使用して設定するプロファイルを選択することで追加または編集できます。

metadata_service_timeoutmetadata_service_num_attempts などの追加のフィールドを指定できます。これらは、CLI で設定可能ではなく、使用する場合は手動でファイルを編集する必要があります。設定ファイルおよび使用できるフィールドの詳細については、「AWS Command Line Interface ユーザーガイド」の「Configuring the AWS Command Line Interface」を参照してください。

認証情報の読み込み

一時的な認証情報を設定した後は、SDK はデフォルトの認証情報プロバイダーチェーンを使用してその認証情報をロードします。

そうするには、以下のように認証情報をビルダーに明示的に指定せずに、AWS のサービス クライアントをインスタンス化します。

AmazonS3 s3Client = AmazonS3ClientBuilder.standard() .withRegion(Regions.US_WEST_2) .build();

認証情報プロバイダーまたはプロバイダーチェーンの指定

クライアントビルダーを使用して、デフォルトの認証情報プロバイダーチェーンとは異なる認証情報プロバイダーを指定できます。

AWSCredentialsProvider インターフェイスを入力として受け取るクライアントビルダーに、認証情報プロバイダーまたはプロバイダーチェーンのインスタンスを指定します。以下の例は、環境認証情報を具体的に使用する方法を示しています。

AmazonS3 s3Client = AmazonS3ClientBuilder.standard() .withCredentials(new EnvironmentVariableCredentialsProvider()) .build();

AWS SDK for Java で提供される認証情報プロバイダーおよびプロバイダーチェーンの詳細なリストについては、AWSCredentialsProvider の「既知のすべての実装クラス」のリストを参照してください。

注記

この手法を使用して、AWSCredentialsProvider インターフェイスを実装する独自の認証情報プロバイダーを使用するか、AWSCredentialsProviderChain クラスをサブクラス化して、作成する認証情報プロバイダーまたはプロバイダーチェーンを指定できます。

一時的な認証情報を明示的に指定する

デフォルトの認証情報チェーンまたは特定あるいはカスタムのプロバイダーやプロバイダーチェーンがコードに対して機能しない場合は、明示的に指定する認証情報を設定できます。AWS STS を使用して一時的な認証情報を取得した場合、この方法を使用して、AWS アクセス用の認証情報を指定します。

  1. BasicSessionCredentials クラスをインスタンス化し、SDK が接続に使用する AWS アクセスキー、AWS シークレットキー、および AWS セッショントークンを渡します。

  2. オブジェクトを使用して AWSStaticCredentialsProviderAWSCredentials を作成します。

  3. AWSStaticCredentialsProvider を使用してクライアントビルダーを設定し、クライアントをビルドします。

以下に例を示します。

BasicSessionCredentials awsCreds = new BasicSessionCredentials("access_key_id", "secret_key_id", "session_token"); AmazonS3 s3Client = AmazonS3ClientBuilder.standard() .withCredentials(new AWSStaticCredentialsProvider(awsCreds)) .build();

詳細