适用于 PHP 的 AWS 开发工具包
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

使用 AWS STS 中的临时凭证

AWS Security Token Service (AWS STS) 使您能够为 AWS IAM 用户或您通过联合身份验证进行身份验证的用户请求权限受限的临时凭证

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

注意

并不是每项服务都支持 AWS STS 所生成的临时凭证。为了确定您使用的服务是否支持临时凭证,请参阅 IAM 临时安全凭证

获得临时凭证

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

$result = $stsClient->getSessionToken();

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

向 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 文档中的授予临时访问权限的情形