AWS Identity and Access Management
ユーザーガイド

一時的なセキュリティ認証情報を使用して AWS リソースへのアクセスをリクエストする

IAM ユーザー認証情報のような長期的セキュリティ認証情報を使用するときと同様、一時的セキュリティ認証情報を AWS SDK または API コールで使用して、プログラムで AWS リソースへのアクセスをリクエストできます。ただし、いくつか違いがあります。

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

  • 一時的な認証情報は、指定した期間が過ぎると失効します。認証情報が有効期限切れになると、その認証情報を使用する呼び出しはすべて失敗するため、新しい認証情報を取得する必要があります。

AWS SDKAWS 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 の詳細については、「一時的セキュリティ認証情報」を参照してください。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 インスタンスメタデータサービスから認証情報が取得されて使用されます。一時的なセキュリティ認証情報には、インスタンスに関連付けられたロールに定義されているアクセス権限が付与されます。

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

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

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

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

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

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 コマンドには profile パラメータが指定されていないため、AWS CLI で最初に環境変数内で認証情報が検索されます。その結果、一時的な認証情報が使用されます。

Linux

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

Windows

C:\> SET AWS_ACCESS_KEY_ID=AKIAI44QH8DHBEXAMPLE 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 とシークレットアクセスキーを使用します。また、AWS STS から渡されるセッショントークンを API リクエストに追加します。セッショントークンは、HTTP ヘッダーに追加するか、X-Amz-Security-Token という名前のクエリ文字列パラメータに追加します。セッショントークンを追加するのは、HTTPヘッダーまたはクエリ文字列パラメータのいずれかです。両方には追加しません。HTTPS API リクエストの署名の詳細については、AWS General Referenceの「AWS API リクエストの署名」を参照してください。

詳細情報

他の AWS サービスで AWS STS を使用する方法については、次のリンクを参照してください。