メニュー
Amazon Simple Storage Service
開発者ガイド (API Version 2006-03-01)

フェデレーションユーザーの一時的な認証情報を使用したリクエストの実行 – AWS SDK for PHP

このトピックでは、AWS SDK for PHP のクラスを使用して、フェデレーションのユーザーおよびアプリケーションの一時的セキュリティ認証情報をリクエストし、その認証情報を使用して Amazon S3 にアクセスする手順を示します。

注記

このトピックでは、既に AWS SDK for PHP の使用と PHP サンプルの実行 の説明が実行されていて、AWS SDK for PHP が正しくインストールされていることを前提としています。

フェデレーションユーザーおよびアプリケーションから AWS リソースへのアクセスをリクエストできるように、一時的なセキュリティ認証情報を提供することができます(「リクエストの実行」を参照)。このような一時的な認証情報をリクエストする場合、ユーザー名と、付与するリソースアクセス許可を示す IAM ポリシーを指定する必要があります。これらの認証情報は、セッションの有効期間が失効すると同時に失効します。デフォルトでは、セッションの有効期間は 1 時間です。フェデレーションユーザーおよびアプリケーション用に一時的なセキュリティ認証情報をリクエストするときに、明示的に別の有効期間値を設定できます。一時的なセキュリティ認証情報の詳細については、『IAM ユーザーガイド』の「一時的セキュリティ認証情報」を参照してください。

フェデレーションユーザーおよびアプリケーション用の一時的なセキュリティ認証情報をリクエストするには、より高度なセキュリティのために、必要なアクセス許可のみを持つ専用の IAM ユーザーを使用することもできます。作成した一時ユーザーに、一時的なセキュリティ認証情報をリクエストした IAM ユーザーより多くの権限が付与されることはありません。ID フェデレーションについての詳細は、「AWS IAM のよくある質問」を参照してください。

フェデレーションユーザーの一時的な認証情報を使用したリクエストの実行

1

Aws\Sts\StsClient クラスの factory() メソッドを使用して、AWS Security Token Service(AWS STS)クライアントのインスタンスを作成します。

2

array パラメーターの必須キー、Name にフェデレーションユーザーの名前を指定して、Aws\Sts\StsClient::getFederationToken() メソッドを実行します。オプションの array パラメーターの Policy および DurationSeconds キーを追加することもできます。

このメソッドから返される一時的なセキュリティ認証情報をフェデレーションユーザーに渡すことができます。

3

一時的なセキュリティ認証情報を渡されたフェデレーションユーザーは、その一時的なセキュリティ認証情報と共に Aws\S3\S3Client クラスの factory メソッドを使用し、Amazon S3 クライアントのインスタンスを作成することで、Amazon S3 にリクエストを送信することができます。

呼び出す S3Client クラスのメソッドはいずれも、一時的なセキュリティ認証情報を使用して、認証リクエストを Amazon S3 に送信します。

以下の PHP コード例では、フェデレーションユーザーの一時的なセキュリティ認証情報を取得し、その認証情報を使用して Amazon S3 にアクセスしています。

Copy
use Aws\Sts\StsClient; use Aws\S3\S3Client; // In real applications, the following code is part of your trusted code. It has // your security credentials that you use to obtain temporary security credentials. $sts = StsClient::factory(); // Fetch the federated credentials. $result = $sts->getFederationToken(array( 'Name' => 'User1', 'DurationSeconds' => 3600, 'Policy' => json_encode(array( 'Statement' => array( array( 'Sid' => 'randomstatementid' . time(), 'Action' => array('s3:ListBucket'), 'Effect' => 'Allow', 'Resource' => 'arn:aws:s3:::YourBucketName' ) ) )) )); // The following will be part of your less trusted code. You provide temporary // security credentials so it can send authenticated requests to Amazon S3. $credentials = $result->get('Credentials'); $s3 = new S3Client::factory(array( 'key' => $credentials['AccessKeyId'], 'secret' => $credentials['SecretAccessKey'], 'token' => $credentials['SessionToken'] )); $result = $s3->listObjects();

例 (一時的なセキュリティ認証情報を使用して Amazon S3 リクエストを実行するフェデレーションユーザー)

次の PHP コード例では、指定したバケットのキーをリストします。このコード例では、まずフェデレーションユーザー(User1)用に 1 時間のセッションの一時的なセキュリティ認証情報を取得し、それを使用して、認証リクエストを Amazon S3 に送信します。PHP 例の実行については、このガイド内の「PHP サンプルの実行」を参照してください。

他のユーザー用に一時的な認証情報をリクエストする場合、より高度なセキュリティのために、一時的なセキュリティ認証情報をリクエストする権限を持つ IAM ユーザーのセキュリティ認証情報を使用します。また、IAM ユーザーがフェデレーションユーザーに最小限のアプリケーション固有のアクセス許可しか付与できないように、この IAM ユーザーのアクセス許可を制限することができます。この例では、特定のバケットに含まれるオブジェクトのみ表示されています。そのため、まず以下のポリシーをアタッチして IAM ユーザーを作成します。

Copy
{ "Statement":[{ "Action":["s3:ListBucket", "sts:GetFederationToken*" ], "Effect":"Allow", "Resource":"*" } ] }

このポリシーでは、IAM ユーザーが一時的なセキュリティ認証情報と、AWS リソースをリストできるだけのアクセス許可をリクエストすることを許可しています。IAM ユーザーを作成する方法の詳細については、『IAM ユーザーガイド』の「最初の IAM ユーザーと管理者グループの作成」を参照してください。

これで、IAM ユーザーのセキュリティ認証情報を使用して、以下の例をテストできるようになりました。次の例では、一時的なセキュリティ認証情報を使用して、認証リクエストを Amazon S3 に送信します。この例では、フェデレーションユーザー(User1)用に、アクセスを特定のバケット内のオブジェクトの列挙に制限する一時的なセキュリティ認証情報をリクエストするときに、以下のポリシーを指定します。ポリシーを更新し、独自の既存するバケット名を指定する必要があります。

Copy
{ "Statement":[ { "Sid":"1", "Action":["s3:ListBucket"], "Effect":"Allow", "Resource":"arn:aws:s3:::YourBucketName" } ] }

以下の例では、ポリシーリソースを指定するときに、YourBucketName を、使用している既存のバケット名で置き換える必要があります。

Copy
<?php // Include the AWS SDK using the Composer autoloader. require 'vendor/autoload.php'; $bucket = '*** Your Bucket Name ***'; use Aws\Sts\StsClient; use Aws\S3\S3Client; use Aws\S3\Exception\S3Exception; // Instantiate the client. $sts = StsClient::factory(); $result = $sts->getFederationToken(array( 'Name' => 'User1', 'DurationSeconds' => 3600, 'Policy' => json_encode(array( 'Statement' => array( array( 'Sid' => 'randomstatementid' . time(), 'Action' => array('s3:ListBucket'), 'Effect' => 'Allow', 'Resource' => 'arn:aws:s3:::YourBucketName' ) ) )) )); $credentials = $result->get('Credentials'); $s3 = S3Client::factory(array( 'key' => $credentials['AccessKeyId'], 'secret' => $credentials['SecretAccessKey'], 'token' => $credentials['SessionToken'] )); try { $objects = $s3->getIterator('ListObjects', array( 'Bucket' => $bucket )); echo "Keys retrieved!\n"; foreach ($objects as $object) { echo $object['Key'] . "\n"; } } catch (S3Exception $e) { echo $e->getMessage() . "\n"; }

関連リソース

このページの内容: