AWS SDK for Rust 認証情報プロバイダーの使用 - AWS SDK for Rust

AWS SDK for Rust 認証情報プロバイダーの使用

AWS へのリクエストはすべて、AWS が発行した認証情報を使用した暗号化による署名がなされている必要があります。実行時、SDK は複数の場所を確認して認証情報の設定値を取得します。

取得した設定にAWS IAM Identity Center シングルサインオンアクセス設定が含まれている場合、SDK は IAM Identity Center と連携して、AWS のサービスへのリクエストに使用する一時的な認証情報を取得します。

取得した設定に一時的な認証情報が含まれている場合、SDK はそれらを使用して AWS のサービス 呼び出しを行います。一次的な認証情報は、アクセスキーおよびセッショントークンで構成されています。

AWS での認証はコードベースの外部で処理できます。多くの認証方法は、認証情報プロバイダーチェーンを使用して、SDK によって自動的に検出、使用、更新されます。

プロジェクトの AWS 認証を開始するためのガイド付きオプションについては、「AWS SDK とツールのリファレンスガイド」の「認証とアクセス」を参照してください。

認証情報プロバイダーチェーン

クライアントのコンストラクト時に認証情報プロバイダーを明示的に指定しない場合、SDK for Rust は認証情報プロバイダーチェーンを使用して、認証情報を提供できる一連の場所を確認します。SDK がこれらの場所のいずれかで認証情報を見つけると、検索は停止します。クライアントの構築の詳細については、「コードでの AWS SDK for Rust サービスクライアントの設定」を参照してください。

次の例では、コードに認証情報プロバイダーを指定していません。SDK は、認証情報プロバイダーチェーンを使用して、ホスティング環境で設定された認証を検出し、その認証を AWS のサービスへの呼び出しに使用します。

let config = aws_config::defaults(BehaviorVersion::latest()).load().await; let s3 = aws_sdk_s3::Client::new(&config);

認証情報の取得順序

認証情報プロバイダーチェーンは、以下の事前定義されたシーケンスで認証情報を検索します。

  1. アクセスキー環境変数

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

  2. 共有 AWS config および credentials ファイル

    SDK は、共有 AWS config および credentials ファイル内の [default] プロファイルから認証情報をロードしようとします。AWS_PROFILE 環境変数を使用することで、SDK がロードする名前付きプロファイルを選択できます。これにより、[default] の代わりに任意のプロファイルを使用できます。config および credentials ファイルは、さまざまな AWS SDK およびツールによって共有されます。これらのファイルの詳細については、「AWS SDK とツールのリファレンスガイド」の「共有 config および credentials ファイル」を参照してください。

    IAM Identity Center を使用して認証を行うと、そのタイミングで SDK for Rust は AWS CLI コマンド aws sso login によって設定された SSO トークンを使用します。SDK は、IAM Identity Center が有効なトークンと交換した一時的な認証情報を使用します。次に、SDK は AWS のサービスを呼び出すときにこの一時的な認証情報を使用します。このプロセスの詳細については、「AWS SDK とツールのリファレンスガイド」の「AWS のサービスの SDK 認証情報解決について理解する」を参照してください。

    • このプロバイダーの設定に関するガイダンスについては、「AWS SDK とツールのリファレンスガイド」の「IAM Identity Center 認証」を参照してください。

    • このプロバイダーの SDK 設定プロパティの詳細については、「AWS SDK とツールのリファレンスガイド」の「IAM Identity Center 認証情報プロバイダー」を参照してください。

  3. AWS STS ウェブアイデンティティ

    AWS へのアクセスを必要とするモバイルアプリケーションまたはクライアントベースのウェブアプリケーションを作成する場合、AWS Security Token Service (AWS STS) はパブリック ID プロバイダー (IdP) を通じて認証されたフェデレーションユーザーの一時的なセキュリティ認証情報を返します。

    • この情報をプロファイルで指定すると、SDK またはツールは AWS STS AssumeRoleWithWebIdentity API メソッドを使用して一時的な認証情報を取得しようとします。この方法の詳細については、「AWS Security Token Service API リファレンス」の「AssumeRoleWithWebIdentity」を参照してください。

    • このプロバイダーの設定に関するガイダンスについては、「AWS SDK とツールのリファレンスガイド」の「ウェブアイデンティティまたは OpenID Connect とのフェデレーション」を参照してください。

    • このプロバイダーの SDK 設定プロパティの詳細については、「AWS SDK とツールのリファレンスガイド」の「ロール認証情報プロバイダーを引き受ける」を参照してください。

  4. Amazon ECS および Amazon EKS コンテナ認証情報

    Amazon Elastic Container Service のタスクと Kubernetes サービスアカウントには IAM ロールを関連付けることができます。IAM ロールで付与されたアクセス許可は、タスクで実行されているコンテナまたはポッドのコンテナによって引き受けられます。このロールにより、(コンテナ上の) SDK for Rust アプリケーションコードが他の AWS のサービスを使用できるようになります。

    SDK は、Amazon ECS と Amazon EKS によって自動的に設定される AWS_CONTAINER_CREDENTIALS_RELATIVE_URI または AWS_CONTAINER_CREDENTIALS_FULL_URI の環境変数から認証情報を取得しようとします。

    • Amazon ECS 用にこのロールを設定する方法の詳細については、「Amazon Elastic Container Service デベロッパーガイド」の「Amazon ECS タスクの IAM ロール」を参照してください。

    • Amazon EKS の設定情報については、「Amazon EKS ユーザーガイド」の「Amazon EKS Pod Identity Agent の設定」を参照してください。

    • このプロバイダーの SDK 設定プロパティの詳細については、「AWS SDK とツールのリファレンスガイド」の「コンテナ認証情報プロバイダー」を参照してください。

  5. Amazon EC2 インスタンスメタデータサービス

    IAM ロールを作成し、インスタンスにアタッチします。インスタンス上の SDK for Rust アプリケーションは、ロールによって提供された認証情報をインスタンスメタデータから取得しようとします。

  6. この時点で認証情報が引き続き解決されていない場合は、panics オペレーションでエラーが発生します。

AWS 認証情報プロバイダーの設定の詳細については、「AWS SDK とツールのリファレンスガイド」の「設定リファレンス」の「標準化された認証情報プロバイダー」を参照してください。

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

SDK による認証方法の検出のために認証情報プロバイダーチェーンに依存するのではなく、特定の認証情報プロバイダーを指定できます。aws_config::defaults を使用して一般的な設定をロードする場合、以下に示すように、カスタム認証情報プロバイダーを指定できます。

let config = aws_config::defaults(BehaviorVersion::latest()) .credentials_provider(MyCredentialsProvider::new()) .load() .await;

ProvideCredentials トレイトを実装することにより、独自の認証情報プロバイダーを実装できます。

アイデンティティのキャッシュ

SDK は、認証情報や SSO トークンなど他のアイデンティティタイプをキャッシュします。デフォルトでは、SDK は遅延キャッシュ方式を使用します。この方式では、認証情報は最初のリクエスト時にロードされ、キャッシュされて、有効期限が近づいたら、次のリクエスト時に自動的に更新が試みられます。同じ SdkConfig から作成されたクライアントは IdentityCache を共有します。