AWS 認証情報の使用 - AWS SDK for Java

「翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。」

AWS 認証情報の使用

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

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

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

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

重要

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

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

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

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

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

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

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

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

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

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

    注記

    インスタンスプロファイル認証情報は、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 SDKs およびツール (PowerShell 用の AWS CLI や AWS CLI を含む) での認証情報のロードに影響を与えます。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_timeout などの追加のフィールドを指定できます。metadata_service_num_attempts これらは、CLI で設定可能ではなく、使用するには手動でファイルを編集する必要があります。—設定ファイルおよび使用できるフィールドの詳細については、 の「AWS コマンドラインインターフェイスの設定AWS CLI User Guide」を参照してください。

認証情報の読み込み

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

そうするには、以下のように認証情報をビルダーに明示的に指定せずに、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 インターフェイスを提供するクラス ( など) をインスタンス化し、接続に使用する AWS アクセスキーとシークレットキーを指定します。BasicAWSCredentials

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

  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();

詳細