SDK for PHP で AWS STS から一時認証情報を使用する
AWS Security Token Service (AWS STS) では、IAM ユーザー用または ID フェデレーションで認証するユーザー用に、権限が限定された一時認証情報をリクエストできます。理解を深めるには、IAM ユーザーガイドの「IAM の一時的なセキュリティ認証情報」を参照してください。一時的セキュリティ認証情報を使用して、ほとんどの AWS サービスにアクセスできます。一時的なセキュリティ認証情報を受け入れるサービスのリストについては、IAM ユーザーガイドの「IAM と連携する AWS サービス」を参照してください。
一時認証情報の一般的ユースケースの 1 つは、サードパーティーの ID プロバイダを介してユーザーを認証することにより、モバイルアプリケーションやクライアント側アプリケーションに AWS リソースへのアクセス権を付与することです (詳細については、「ウェブ ID フェデレーション」を参照してください)。
一時的な認証情報を取得する
AWS STS には一時認証情報を返す複数のオペレーションがありますが、最も単純な GetSessionToken オペレーションを例として使用します。次のスニペットは、PHP SDK の STS クライアントの getSessionToken メソッドを呼び出して、一時的な認証情報を取得します。
$sdk = new Aws\Sdk([ 'region' => 'us-east-1', ]); $stsClient = $sdk->createSts(); $result = $stsClient->getSessionToken();
GetSessionToken および他の AWS STS オペレーションの結果には、常に 'Credentials' 値が含まれています。$result を (たとえば print_r($result) を使用して) 出力すると、次のようになります。
Array ( ... [Credentials] => Array ( [SessionToken] => '<base64 encoded session token value>' [SecretAccessKey] => '<temporary secret access key value>' [Expiration] => 2013-11-01T01:57:52Z [AccessKeyId] => '<temporary access key value>' ) ... )
AWS SDK for PHP への一時認証情報の提供
別の AWS クライアントをインスタンス化して、AWS STS から受け取った値を直接渡すことによって、そのクライアントで一時認証情報を使用できます。
use Aws\S3\S3Client; $result = $stsClient->getSessionToken(); $s3Client = new S3Client([ 'version' => '2006-03-01', 'region' => 'us-west-2', 'credentials' => [ 'key' => $result['Credentials']['AccessKeyId'], 'secret' => $result['Credentials']['SecretAccessKey'], 'token' => $result['Credentials']['SessionToken'] ] ]);
Aws\Credentials\Credentials オブジェクトを作成し、これをクライアントをインスタンス化するときに使用することもできます。
use Aws\Credentials\Credentials; use Aws\S3\S3Client; $result = $stsClient->getSessionToken(); $credentials = new Credentials( $result['Credentials']['AccessKeyId'], $result['Credentials']['SecretAccessKey'], $result['Credentials']['SessionToken'] ); $s3Client = new S3Client([ 'version' => '2006-03-01', 'region' => 'us-west-2', 'credentials' => $credentials ]);
ただし、一時認証情報を提供するための最良の方法は、StsClient に含まれている createCredentials() ヘルパーメソッドを使用することです。このメソッドは、AWS STS の結果からデータを抽出して、Credentials オブジェクトを作成します。
$result = $stsClient->getSessionToken(); $credentials = $stsClient->createCredentials($result); $s3Client = new S3Client([ 'version' => '2006-03-01', 'region' => 'us-west-2', 'credentials' => $credentials ]);
アプリケーションやプロジェクトで一時認証情報の使用が必要になることがある理由の詳細については、 ドキュメントの「一時的なアクセス権を付与するシナリオAWS STS」を参照してください。