メニュー
AWS SDK for Java
開発者ガイド

AWS 認証情報の使用

Amazon Web Services にリクエストを送信するには、AWS SDK for Java に AWS 認証情報を提供する必要があります。これは以下の方法でできます。

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

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

  • 認証情報を自分で提供する。提供できるのは、ルートアカウント認証情報、IAM 認証情報、または AWS STS から取得した一時的な認証情報です。

重要

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

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

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

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

  2. Java のシステムプロパティaws.accessKeyId および aws.secretKey。AWS SDK for Java は SystemPropertiesCredentialsProvider を使用してこれらの認証情報を読み込みます。

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

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

  4. Amazon ECS コンテナの認証情報 – 環境変数 AWS_CONTAINER_CREDENTIALS_RELATIVE_URI が設定されている場合に、Amazon ECS から読み込まれます。AWS SDK for Java は ContainerCredentialsProvider を使用して、これらの認証情報を読み込みます。

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

    注記

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

認証情報の設定

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

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

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

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

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

export AWS_PROFILE="myProfile"

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

set AWS_PROFILE="myProfile"

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

注記

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

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

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

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

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

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

    • Linux, macOS, or Unix の場合 export を使用します。

      export AWS_CREDENTIAL_PROFILES_FILE=path/to/credentials_file
    • Windows の場合 set を使用します。

      set AWS_CREDENTIAL_PROFILES_FILE=path/to/credentials_file

AWS 認証情報ファイルの形式

aws configure コマンドを使用して AWS 認証情報ファイルを作成すると、このコマンドは次の形式のファイルを作成します。

[default] aws_access_key_id={YOUR_ACCESS_KEY_ID} aws_secret_access_key={YOUR_SECRET_ACCESS_KEY} [profile2] aws_access_key_id={YOUR_ACCESS_KEY_ID} aws_secret_access_key={YOUR_SECRET_ACCESS_KEY}

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

aws_session_tokenmetadata_service_timeoutmetadata_service_num_attempts などの追加のフィールドを指定できます。これらは、CLI で設定可能ではなく、使用する場合は手動でファイルを編集する必要があります。設定ファイルおよび使用できるフィールドの詳細については、AWS CLI User Guide の「AWS コマンドラインインターフェイスの設定」を参照してください。

認証情報の読み込み

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

そうするには、以下のように認証情報をビルダーに明示的に指定せずに、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 アクセス用の認証情報を指定します。

AWS クライアントに明示的に認証情報を指定するには

  1. AWSCredentials インターフェイスを提供するクラス (BasicAWSCredentials など) をインスタンス化し、接続に使用する AWS アクセスキーおよびシークレットキーを指定します。

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

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

次に例を示します。

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

STS から取得した一時的な認証情報を使用する場合は、BasicSessionCredentials オブジェクトを作成し、STS で指定された認証情報とセッショントークンを渡します。

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

詳細