Amazon Simple Storage Service
开发人员指南 (API Version 2006-03-01)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

使用联合用户临时凭证创建请求 - 适用于 PHP 的 AWS 开发工具包

本主题将指导您完成使用适用于 PHP 的 AWS 开发工具包中的类请求适用于联合用户和应用程序的临时安全凭证,并使用这些安全凭证访问 Amazon S3 的过程。

注意

本主题假定您已按照 使用适用于 PHP 的 AWS 开发工具包和运行 PHP 示例 的说明执行操作,并正确安装了 适用于 PHP 的 AWS 开发工具包。

您可以为联合用户和应用程序提供临时安全凭证 (参阅 创建请求),以便他们可以发送经身份验证的请求,从而访问您的 AWS 资源。请求这些临时凭证时,您必须提供用户名称和 IAM 策略 (描述您需要授予的资源权限)。当会话持续时间过期时,这些凭证将过期。默认情况下,会话的持续时间为一个小时。您可以在为联合用户和应用程序请求临时安全凭证时,显式地设置其他持续时间值。有关临时安全凭证的更多信息,请参阅 IAM 用户指南 中的临时安全凭证

为了请求适用于联合用户和应用程序的临时安全凭证,出于提高安全性的考虑,您可能需要使用仅具有所需访问权限的专用 IAM 用户。您创建的临时用户可获取的权限不能超过请求临时安全凭证的 IAM 用户。有关联合身份验证的信息,请转到 AWS Identity and Access Management 常见问题

使用联合用户临时凭证创建请求

1

使用 Aws\Sts\StsClientfactory() 方法创建 AWS Security Token Service (AWS STS) 客户端的实例。

2

通过在 array 参数的必需 Name 键值中提供联合用户的名称,执行 Aws\Sts\StsClient::getFederationToken() 方法。还可以添加可选 array 参数的 PolicyDurationSeconds 键值。

该方法返回您可以向联合用户提供的临时安全凭证。

3

拥有临时安全凭证的任何联合用户,都可以通过将 Aws\S3\S3Clientfactory 方法与临时安全凭证一起使用,创建 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-cn: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) 的临时安全凭证,然后使用它们向 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-cn: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"; }

相关资源

本页内容: