AWS リソースで一時的な認証情報を使用する
一時的な認証情報を使用して、AWS または AWS CLI API(AWS SDK
-
一時的セキュリティ認証情報を使用して呼び出しを行うときは、一時的な認証情報と共に返されるセッショントークンを呼び出しに含める必要があります。AWS はセッショントークンを使用して、一時的セキュリティ認証情報を検証します。
-
一時的な認証情報は、指定した期間が過ぎると失効します。一時認証情報が有効期限切れになると、その認証情報を使用する呼び出しはすべて失敗するため、新しい一時認証情報を生成する必要があります。一時的な認証情報は、最初に指定された間隔を超えて延長または更新することはできません。
-
一時的な認証情報を使用してリクエストを行う場合、プリンシパルに一連のタグが含まれる場合があります。これらのタグは、引き受けるロールにアタッチされたセッションタグとタグから取得されます。セッションタグの詳細については、「AWS STS でセッションタグを渡します」を参照してください。
AWS SDK
注記
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) から認証情報を自動的に取得して使用します。一時的なセキュリティ認証情報には、インスタンスに関連付けられたロールに定義されているアクセス権限が付与されます。
詳細情報および例については、次のセクションを参照してください。
-
IAM ロールを使用した Amazon Elastic Compute Cloud の AWS リソースへのアクセスの許可 — AWS SDK for Java
-
IAM ロールを使用したアクセスの許可 — AWS SDK for .NET
-
ロールの作成 — AWS SDK for Ruby
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)AssumeRole
を呼び出して一時的なセキュリティ認証情報を取得し、それらの認証情報を使用して Amazon S3 を呼び出します。
AssumeRole
、GetFederationToken
、およびその他の API オペレーションを呼び出す方法の詳細については、「AWS Security Token Service API リファリファレンス」を参照してください。結果から一時的なセキュリティ認証情報とセッショントークンを取得する方法の詳細については、お使いの SDK のドキュメントを参照してください。すべての AWS SDK に関するドキュメントは、主要な AWS のドキュメントページ
古い認証情報が失効する前に、新しい認証情報を取得する必要があります。一部の SDK では、ユーザーの代わりに認証情報の更新処理を管理するプロバイダーを使用できます。お使いの SDK のドキュメントを確認してください。
AWS CLI で一時的なセキュリティ認証情報を使用する
AWS CLI で一時的なセキュリティ認証情報を使用できます。これは、ポリシーをテストする場合に便利です。
AWS CLI を使用して、AWS STS API (AssumeRole
や GetFederationToken
など) を呼び出し、結果の出力をキャプチャします。次の例は、出力をファイルに送信する AssumeRole
の呼び出しを示しています。この例では、profile
パラメータは AWS CLI 設定ファイル内のプロファイルであると想定されています。また、ロールを引き受けるアクセス許可を持つ IAM ユーザーの認証情報を参照することも想定されます。
aws sts assume-role --role-arn arn:aws:iam::123456789012:role/
role-name
--role-session-name "RoleSession1" --profileIAM-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 を使用する方法の詳細については、以下のブログ記事を参照してください。
-
Amazon S3。「Amazon Simple Storage Service ユーザーガイド」の「IAM ユーザー一時クレデンシャルを使用したリクエストの作成」または「フェデレーションユーザー一時クレデンシャルを使用したリクエストの作成」を参照してください。
-
Amazon SNS 「Amazon Simple Notification Service デベロッパーガイド」の「Amazon SNS でのアイデンティティベースのポリシーの使用」を参照してください。
-
Amazon SQS 「Amazon Simple Queue Service デベロッパーガイド」の「Amazon SQS での Identity and access management」を参照してください。
-
Amazon SimpleDB 『Amazon SimpleDB 開発者ガイド』の「一時的なセキュリティクレデンシャルの使用」を参照してください。