認証情報プロバイダー - AWS SDK for Kotlin

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

認証情報プロバイダー

デフォルトの認証情報プロバイダーチェーンがバージョン 1.4.0 で変更された認証情報を解決する順序 詳細については、以下の注意事項を参照してください。

を使用して Amazon Web Services にリクエストを実行するために AWS SDK for Kotlin、SDK は によって発行された暗号署名付き認証情報を使用します AWS。認証情報を取得するために、SDK は JVM システムプロパティ、環境変数、共有 AWS config ファイルと credentials ファイル、Amazon EC2 インスタンスメタデータなど、いくつかの場所にある構成設定を使用できます。

SDK は、認証情報プロバイダーの抽象化を使用して、さまざまなソースから認証情報を取得するプロセスを簡素化します。SDK には、認証情報プロバイダーの実装がいくつか含まれています

例えば、取得した設定に共有configファイルからの IAM Identity Center シングルサインオンアクセス設定が含まれている場合、SDK は IAM Identity Center と連携して、リクエストに使用する一時的な認証情報を取得します AWS のサービス。この方法で認証情報を取得すると、SDK は IAM Identity Center プロバイダー (SSO 認証情報プロバイダーとも呼ばれます) を使用します。このガイドのセットアップセクションでは、この設定について説明しました。

特定の認証情報プロバイダーを使用するには、サービスクライアントを作成するときに指定できます。または、デフォルトの認証情報プロバイダーチェーンを使用して、設定を自動的に検索することもできます。

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

クライアントの構築時に明示的に指定しない場合、SDK for Kotlin は認証情報プロバイダーを使用して、認証情報を提供できる各場所を順番にチェックします。このデフォルトの認証情報プロバイダーは、認証情報プロバイダーのチェーンとして実装されます。

デフォルトのチェーンを使用してアプリケーションで認証情報を指定するには、明示的に credentialsProviderプロパティを指定せずにサービスクライアントを作成します。

val ddb = DynamoDbClient { region = "us-east-2" }

サービスクライアントの作成の詳細については、「クライアントの構築と設定」を参照してください。

デフォルトの認証情報プロバイダーチェーンについて説明します。

デフォルトの認証情報プロバイダーチェーンは、次の事前定義されたシーケンスを使用して認証情報設定を検索します。設定された設定が有効な認証情報を提供すると、チェーンは停止します。

1. AWS アクセスキー (JVM システムプロパティ)

SDK は、aws.accessKeyIdaws.secretAccessKey、および aws.sessionToken JVM システムプロパティを検索します。

2. AWS アクセスキー (環境変数)

SDK は、 AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY、および AWS_SESSION_TOKEN環境変数から認証情報をロードしようとします。

3. ウェブ ID トークン

SDK は、環境変数 AWS_WEB_IDENTITY_TOKEN_FILEAWS_ROLE_ARN (または JVM システムプロパティ aws.webIdentityTokenFileと ) を検索しますaws.roleArn。トークン情報とロールに基づいて、SDK は一時的な認証情報を取得します。

4. 設定ファイルのプロファイル

このステップでは、SDK はプロファイルに関連付けられた設定を使用します。デフォルトでは、SDK は共有 AWS config ファイルと credentials ファイルを使用しますが、 AWS_CONFIG_FILE環境変数が設定されている場合、SDK はその値を使用します。AWS_PROFILE 環境変数 (または aws.profile JVM システムプロパティ) が設定されていない場合、SDK は「デフォルト」プロファイルを検索します。それ以外の場合は、AWS_PROFILE’s値に一致するプロファイルを検索します。

SDK は、前の段落で説明した設定に基づいてプロファイルを検索し、そこで定義された設定を使用します。SDK で見つかった設定に、さまざまな認証情報プロバイダーアプローチの設定が混在している場合、SDK は次の順序を使用します。

  1. AWS アクセスキー (設定ファイル) - SDK は aws_access_key_idaws_access_key_id、および の設定を使用しますaws_session_token

  2. ロール設定の引き受け - SDK が role_arnおよび source_profileまたは credential_source設定を検出した場合、ロールの引き受けを試みます。SDK が source_profile設定を見つけた場合、別のプロファイルから認証情報をソースにして、 で指定されたロールの一時的な認証情報を受け取りますrole_arn。SDK は、 credential_source設定を検出した場合、Amazon ECS コンテナ、Amazon EC2 インスタンス、または credential_source設定の値に応じて環境変数から認証情報をソースします。次に、これらの認証情報を使用して、ロールの一時的な認証情報を取得します。

    プロファイルには、 source_profile設定または credential_source設定のいずれかを含める必要がありますが、両方を含めることはできません。

  3. ウェブ ID トークン設定 - SDK が role_arnおよび web_identity_token_file設定を検出した場合、 role_arnとトークンに基づいて AWS リソースにアクセスするための一時的な認証情報を取得します。

  4. SSO トークン設定 - SDK が (設定ファイルのコンパニオンsso-sessionセクションとともに) sso_sessionsso_account_idsso_role_name設定を検出した場合、SDK は IAM Identity Center サービスから一時的な認証情報を取得します。

  5. レガシー SSO 設定 - SDK が sso_start_urlsso_regionsso_account_id、および sso_role_name設定を検出した場合、SDK は IAM Identity Center サービスから一時的な認証情報を取得します。

  6. プロセス設定 - SDK が credential_process 設定を検出した場合、パス値を使用してプロセスを呼び出し、一時的な認証情報を取得します。

5. コンテナ認証情報

SDK は、環境変数 AWS_CONTAINER_CREDENTIALS_RELATIVE_URIまたは 、 AWS_CONTAINER_CREDENTIALS_FULL_URI AWS_CONTAINER_AUTHORIZATION_TOKEN_FILEまたは を検索しますAWS_CONTAINER_AUTHORIZATION_TOKEN。これらの値を使用して、GET リクエストを通じて指定された HTTP エンドポイントから認証情報をロードします。

6. IMDS 認証情報

SDK は、デフォルトまたは設定された HTTP エンドポイントでインスタンスメタデータサービスから認証情報を取得しようとします。SDK は IMDSv2 のみをサポートします。

この時点で認証情報が解決されない場合、例外が発生してクライアントの作成は失敗します。

注: 認証情報解決の順序の変更

上記の認証情報解決の順序は、 SDK for Kotlin の1.4.x+リリースで最新です。1.4.0 リリース前は、項目番号 3 と 4 が切り替えられ、現在の 4a 項目は現在の 4f 項目に続きました。

明示的な認証情報プロバイダー

デフォルトのプロバイダーチェーンを使用する代わりに、SDK が使用する特定の認証情報プロバイダーまたはカスタムチェーン (CredentialsProviderChain) を指定できます。例えば、環境変数を使用してデフォルトの認証情報を設定する場合は、次のコードスニペットのように、 EnvironmentCredentialsProviderをクライアントビルダーに提供します。

val ddb = DynamoDbClient { region = "us-east-1" credentialsProvider = EnvironmentCredentialsProvider() }
注記

デフォルトのチェーンは認証情報をキャッシュしますが、スタンドアロンプロバイダーはキャッシュしません。CachedCredentialsProvider クラスを使用して任意の認証情報プロバイダーをラップすることで、API コールごとに不必要に認証情報を取得しないようにできます。キャッシュされたプロバイダーは、現在の認証情報の有効期限が切れたときにのみ新しい認証情報を取得します。

注記

CredentialsProvider インターフェイスを実装することで、独自の認証情報プロバイダーまたはプロバイダーチェーンを実装できます。