使用来自适用于 PHP 的 SDK 中 Amazon STS 的临时凭证 - 适用于 PHP 的 Amazon SDK
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

使用来自适用于 PHP 的 SDK 中 Amazon STS 的临时凭证

Amazon Security Token Service(Amazon STS)使您可以为 IAM 用户或您通过身份联合验证进行身份验证的用户请求权限受限的临时凭证。有关深入了解,请参阅 IAM 用户指南中的临时安全凭证。可使用临时安全凭证访问大多数 Amazon 服务。有关接受临时安全凭证的服务列表,请参阅 IAM 用户指南中的使用 IAM 的 Amazon 服务

一个常见的临时凭证使用案例是向移动或客户端应用程序授予访问 Amazon 资源的权限,方法是通过第三方身份提供程序对用户进行身份验证(请参阅 Web 身份联合验证)。

获得临时凭证

Amazon STS 有多个操作可返回临时凭证,但对于演示用途而言,GetSessionToken 操作是最简单的。以下代码段通过调用 PHP SDK 的 STS 客户端的 getSessionToken 方法来检索临时凭证。

$sdk = new Aws\Sdk([ 'region' => 'us-east-1', ]); $stsClient = $sdk->createSts(); $result = $stsClient->getSessionToken();

GetSessionToken 和其他 Amazon 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>' ) ... )

向 适用于 PHP 的 Amazon SDK 提供临时凭证

您可以将临时凭证用于其他 Amazon 客户端,方法是实例化客户端并直接传入从 Amazon 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() 帮助程序方法。此方法会从 Amazon STS 结果中提取数据,然后为您创建 Credentials 对象。

$result = $stsClient->getSessionToken(); $credentials = $stsClient->createCredentials($result); $s3Client = new S3Client([ 'version' => '2006-03-01', 'region' => 'us-west-2', 'credentials' => $credentials ]);

有关为何需要在应用程序或项目中使用临时凭证的更多信息,请参阅 文档中的授予临时访问权限的情形Amazon STS。