メニュー
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 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 を使用している場合に、一時的なセキュリティ認証情報を使用する方法を示す疑似コードです。

Copy
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 ロールの切り替え(API)」を参照してください。

AssumeRoleGetFederationToken などの API を呼び出す方法、および、結果から一時的なセキュリティ認証情報とセッショントークンを取得する方法の詳細については、お使いの SDK のドキュメントを参照してください。メインの AWS ドキュメントページで、AWS SDK に関するドキュメントをすべて見つけることができます。

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

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

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

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

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

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

AWS CLI コマンドを実行すると、AWS CLI で認証情報は、最初に環境変数内、次に設定ファイル内という順序で検索されます。したがって、一時的な認証情報を環境変数に設定すると、AWS CLI でこれらの認証情報がデフォルトで使用されます(コマンドに profile パラメータを指定すると、AWS CLI で環境変数がスキップされ、設定ファイル内で認証情報が検索されます。これにより、環境変数内の認証情報を上書きできます)。

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

Linux

Copy
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

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

Tools for Windows PowerShell で一時的なセキュリティ認証情報を使用する

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

Tools for Windows PowerShell を使用して、AWS STS API アクション(AssumeRoleGetFederationToken など)を呼び出し、結果の出力をキャプチャします。以下の例では、AssumeRole を呼び出して、結果のロールオブジェクトを $role 変数に格納する、PowerShell コマンドを示しています。StoredCredentials パラメータは、Set-AWSCredentials または Initialized-AWSDefaults によってセットアップされる Tools for Windows PowerShell 設定ファイル内のプロファイルと見なされ、ロールを引き受けるアクセス権限を持つ IAM ユーザーの認証情報を参照します。

Copy
PS C:\> $role = Use-STSRole -RoleArn arn:aws:iam::123456789012:role/MySampleRole -RoleSessionName RoleSession1 -StoredCredentials IAM-user-name

コマンドが完了したら、変数からアクセスキー ID、シークレットアクセスキー、セッショントークンを抽出できます。

Copy
PS C:\> $role.AssumedRoleUser Arn AssumedRoleId --- ------------- arn:aws:sts::123456789012:assumed-role/clirole/RoleSession1 AROAJVIFQ5TJISRUTVTUE:RoleSession1 PS C:\> $role.Credentials.AccessKeyId AKIAIOSFODNN7EXAMPLE PS C:\> $role.Credentials.SecretAccessKey wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY PS C:\> $role.Credentials.SessionToken AQoDYXdzEPT//////////wEXAMPLEtc764bNrC9SAPBSM22wDOk4x4HIZ8j4FZTwdQWLWsKWHGBuFqwAeMicRXmxfpSPfIeoIYRqT flfKD8YUuwthAx7mSEI/qkPpKPi/kMcGdQrmGdeehM4IC1NtBmUpp2wUE8phUZampKsburEDy0KPkyQDYwT7WZ0wq5VSXDvp75YU9 HFvlRd8Tx6q6fE8YQcHNVXAkiY9q6d+xo0rKwT38xVqr7ZD0u0iPPkUL64lIZbqBAz+scqKmlzm8FDrypNC9Yjc8fPOLn9FX9KSYv KTr4rvx3iSIlTJabIQwj2ICCR/oLxBA== PS C:\> $role.Credentials.Expiration Wednesday, July 08, 2015 3:22:32 PM

以下の例では、変数に格納された認証情報を使用して、AWS CLI コマンドを呼び出す方法を示しています。

Copy
Get-EC2Instance -Region us-west-2 -Credential $role.Credentials

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 を使用する方法については、次のリンクを参照してください。