AWS リソースを使用した一時的な認証情報の使用 - AWS Identity and Access Management

AWS リソースを使用した一時的な認証情報の使用

一時的な認証情報を使用して、AWS または AWS CLI API(AWS SDKを使用)を使用して AWS リソースのプログラム要求を行うことができます。一時的な認証情報は、IAM ユーザーの認証情報など、長期的なセキュリティ認証情報を使用するのと同じアクセス許可を提供します。ただし、いくつか違いがあります。

  • 一時的セキュリティ認証情報を使用して呼び出しを行うときは、一時的な認証情報と共に返されるセッショントークンを呼び出しに含める必要があります。AWS はセッショントークンを使用して、一時的セキュリティ認証情報を検証します。

  • 一時的な認証情報は、指定した期間が過ぎると失効します。一時認証情報が有効期限切れになると、その認証情報を使用する呼び出しはすべて失敗するため、新しい一時認証情報を生成する必要があります。一時的な認証情報は、最初に指定された間隔を超えて延長または更新することはできません。

  • 一時的な認証情報を使用してリクエストを行う場合、プリンシパルに一連のタグが含まれる場合があります。これらのタグは、引き受けるロールにアタッチされたセッションタグとタグから取得されます。セッションタグの詳細については、「AWS STS でのセッションタグの受け渡し」を参照してください。

AWS SDK AWS Command Line Interface (AWS CLI) または Tools for Windows PowerShell を使用している場合、一時的なセキュリティ認証情報を取得および使用する方法はコンテキストによって異なります。コード、AWS CLI、または Tools for Windows PowerShell コマンドを EC2 インスタンス内で実行している場合は、Amazon EC2 のロールを利用できます。それ以外の場合は、AWS STS API を呼び出して一時的な認証情報を取得した後、その情報を明示的に使用して AWS のサービスを呼び出すことができます。

注記

AWS Security Token Service (AWS STS) を使用して、AWS リソースへのアクセスをコントロールできる一時的セキュリティ認証情報を持つ、信頼されたユーザーを作成および提供することができます。AWS STS の詳細については、「IAM の一時的な認証情報」を参照してください。AWS STS は、デフォルトのエンドポイントが https://sts.amazonaws.com にあるグローバルサービスです。このエンドポイントや他のエンドポイントから取得した認証情報はグローバルに有効ですが、このエンドポイントは米国東部 (バージニア北部) リージョンにあります。これらの認証情報は、どのリージョンのサービスとリソースでも機能します。サポートされているリージョンのいずれかにあるエンドポイントへの AWS STS API 呼び出しを実行することもできます。地理的に近い場所にあるリージョンのサーバーに対してリクエストを実行することによって、レイテンシーを低減できます。認証情報を取得したリージョンに関係なく、認証情報はグローバルに使用できます。詳細については、「AWS リージョン での AWS STS の管理」を参照してください。

Amazon EC2 インスタンスでの一時的な認証情報の使用

AWS CLI コマンドまたはコードを EC2 インスタンス内で実行する場合、認証情報を取得するために推奨される方法は、Amazon EC2 のロールを使用する方法です。つまり、EC2 インスタンスで実行されているアプリケーションに付与するアクセス許可を指定する IAM ロールを作成します。インスタンスを起動するときに、このロールとインスタンスを関連付けます。

これにより、インスタンスで実行されるアプリケーション、AWS CLI、Tools for Windows PowerShell コマンドがインスタンスメタデータから自動的に一時的セキュリティ認証情報を取得できるようになります。一時的なセキュリティ認証情報を明示的に取得する必要はありません。AWS SDK、AWS CLI、および Tools for Windows PowerShell は EC2 インスタンスメタデータサービス (IMDS) から認証情報を自動的に取得して使用します。一時的なセキュリティ認証情報には、インスタンスに関連付けられたロールに定義されているアクセス権限が付与されます。

詳細情報および例については、次のセクションを参照してください。

AWS SDK での一時的セキュリティ認証情報の使用

コード内で一時的なセキュリティ認証情報を使用するには、AssumeRole などの AWS STS API をプログラムから呼び出し、結果として得られる認証情報とセッショントークンを抽出します。その後、これらの値を AWS への後続の呼び出しの認証情報として使用します。以下の例は、AWS SDK を使用している場合に、一時的なセキュリティ認証情報を使用する方法を示す疑似コードです。

assumeRoleResult = AssumeRole(role-arn); tempCredentials = new SessionAWSCredentials( assumeRoleResult.AccessKeyId, assumeRoleResult.SecretAccessKey, assumeRoleResult.SessionToken); s3Request = CreateAmazonS3Client(tempCredentials);

Python で記述された例(AWS SDK for Python (Boto) を使用)については、「IAM ロール (AWS API) の切り替え」を参照してください。この例では、AssumeRole を呼び出して一時的なセキュリティ認証情報を取得し、それらの認証情報を使用して Amazon S3 を呼び出します。

AssumeRoleGetFederationToken、およびその他の API オペレーションを呼び出す方法の詳細については、「AWS Security Token Service API リファリファレンス」を参照してください。結果から一時的なセキュリティ認証情報とセッショントークンを取得する方法の詳細については、お使いの SDK のドキュメントを参照してください。すべての AWS SDK に関するドキュメントは、主要な AWS のドキュメントページの「SDK とツールキット」セクションにあります。

古い認証情報が失効する前に、新しい認証情報を取得する必要があります。一部の SDK では、ユーザーの代わりに認証情報の更新処理を管理するプロバイダーを使用できます。お使いの SDK のドキュメントを確認してください。

AWS CLI で一時的なセキュリティ認証情報を使用する

AWS CLI で一時的なセキュリティ認証情報を使用できます。これは、ポリシーをテストする場合に便利です。

AWS CLI を使用して、AWS STS API (AssumeRoleGetFederationToken など) を呼び出し、結果の出力をキャプチャします。次の例は、出力をファイルに送信する AssumeRole の呼び出しを示しています。この例では、profile パラメータは AWS CLI 設定ファイル内のプロファイルであると想定されています。また、ロールを引き受けるアクセス許可を持つ IAM ユーザーの認証情報を参照することも想定されます。

aws sts assume-role --role-arn arn:aws:iam::123456789012:role/role-name --role-session-name "RoleSession1" --profile IAM-user-name > assume-role-output.txt

コマンドが完了したら、ルーティングした場所からアクセスキー ID、シークレットアクセスキー、セッショントークンを抽出できます。この操作は、手動またはスクリプトを使用して行うことができます。次に、これらの値を環境変数に割り当てます。

AWS CLI コマンドを実行すると、AWS CLI によって特定の順序で資格情報が検索されます。最初は環境変数で、次に構成ファイルで検索されます。したがって、一時的な認証情報を環境変数に設定すると、AWS CLI でこれらの認証情報がデフォルトで使用されます (コマンドで profile パラメーターを指定すると、AWS CLI は環境変数をスキップします。代わりに、AWS CLI は構成ファイルを調べます。これにより、必要に応じて環境変数の資格情報をオーバーライドできます。)

以下の例では、環境変数に一時的なセキュリティ認証情報を設定した後で AWS CLI コマンドを呼び出しています。AWS CLI コマンドには profile パラメータが指定されていないため、AWS CLI で最初に環境変数内で認証情報が検索されます。その結果、一時的な認証情報が使用されます。

Linux

$ export AWS_ACCESS_KEY_ID=ASIAIOSFODNN7EXAMPLE $ export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY $ export AWS_SESSION_TOKEN=AQoDYXdzEJr...<remainder of session token> $ aws ec2 describe-instances --region us-west-1

Windows

C:\> SET AWS_ACCESS_KEY_ID=ASIAIOSFODNN7EXAMPLE C:\> SET AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY C:\> SET AWS_SESSION_TOKEN=AQoDYXdzEJr...<remainder of token> C:\> aws ec2 describe-instances --region us-west-1

API オペレーションで一時的なセキュリティ認証情報を使用する

AWS に対する直接 HTTPS API リクエストを行う場合、AWS Security Token Service (AWS STS) から取得した一時的セキュリティ認証情報でそれらのリクエストを署名できます。これを行うには AWS STS から受け取るアクセスキー ID とシークレットアクセスキーを使用します。長期的な認証情報を使用してリクエストに署名するのと同じ方法で、アクセスキー ID とシークレットアクセスキーを使用します。また、AWS STS から渡されるセッショントークンを API リクエストに追加します。セッショントークンは、HTTP ヘッダーに追加するか、X-Amz-Security-Token という名前のクエリ文字列パラメータに追加します。セッショントークンを追加するのは、HTTPヘッダーまたはクエリ文字列パラメータのいずれかです。両方には追加しません。HTTPS API リクエストの署名の詳細については、「AWS 全般のリファレンス」の「AWS API リクエストの署名」を参照してください。

詳細情報

他の AWS のサービスで AWS STS を使用する方法の詳細については、以下のブログ記事を参照してください。