翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
認証情報プロバイダー
デフォルトの認証情報プロバイダーチェーンがバージョン 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.accessKeyId
、aws.secretAccessKey
、およびaws.sessionToken
JVM システムプロパティを検索します。 - 2. AWS アクセスキー (環境変数)
-
SDK は、
AWS_ACCESS_KEY_ID
とAWS_SECRET_ACCESS_KEY
、およびAWS_SESSION_TOKEN
環境変数から認証情報をロードしようとします。 - 3. ウェブ ID トークン
-
SDK は、環境変数
AWS_WEB_IDENTITY_TOKEN_FILE
とAWS_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 は次の順序を使用します。
-
AWS アクセスキー (設定ファイル) - SDK は
aws_access_key_id
、aws_access_key_id
、および の設定を使用しますaws_session_token
。 -
ロール設定の引き受け - 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
設定のいずれかを含める必要がありますが、両方を含めることはできません。 -
ウェブ ID トークン設定 - SDK が
role_arn
およびweb_identity_token_file
設定を検出した場合、role_arn
とトークンに基づいて AWS リソースにアクセスするための一時的な認証情報を取得します。 -
SSO トークン設定 - SDK が (設定ファイルのコンパニオン
sso-session
セクションとともに)sso_session
、sso_account_id
、sso_role_name
設定を検出した場合、SDK は IAM Identity Center サービスから一時的な認証情報を取得します。 -
レガシー SSO 設定 - SDK が
sso_start_url
、sso_region
、sso_account_id
、およびsso_role_name
設定を検出した場合、SDK は IAM Identity Center サービスから一時的な認証情報を取得します。 -
プロセス設定 - 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
インターフェイスを実装することで、独自の認証情報プロバイダーまたはプロバイダーチェーンを実装できます。