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

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用来自 Amazon STS 的临时凭证

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

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

获得临时凭证

Amazon STS 有多个操作可返回临时凭证,但对于演示用途而言,GetSessionToken 操作是最简单的。假设您有一个实例 Aws\Sts\StsClient 存储在 $stsClient 变量中,您可以调用它,如下所示。

$result = $stsClient->getSessionToken();

GetSessionToken 和其他 Amazon STS 操作的结果始终包含一个 'Credentials' 值。如果输出结果(例如,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>' ) ... )

向 Amazon SDK for PHP 提供临时凭证

您可以将临时凭证用于其他 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。