Amazon Simple Storage Service
开发人员指南 (API 版本 2006-03-01)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

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

本主题介绍如何使用版本 3 的适用于 PHP 的 AWS 开发工具包中的类请求适用于联合身份用户和应用程序的临时安全凭证并使用这些凭证访问 Amazon S3 中存储的资源。本主题假定已按照使用适用于 PHP 的 AWS 开发工具包和运行 PHP 示例的说明执行操作并正确安装了适用于 PHP 的 AWS 开发工具包。

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

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

有关运行本指南中的 PHP 示例的信息,请参阅运行 PHP 示例

以下 PHP 示例列出了指定存储桶中的密钥。在此示例中,您将获取联合身份用户 (User1) 的时长一小时的会话的临时安全凭证。然后,您使用临时安全凭证向 Amazon S3 发送经身份验证的请求。

为了提高请求适用于其他人的临时凭证时的安全性,请使用具有请求临时安全凭证的权限的 IAM 用户的安全凭证。要确保 IAM 用户仅向联合身份用户授予特定于应用程序的最低权限,还可以限制此 IAM 用户的访问权限。此示例仅列出特定存储桶中的对象。创建附加了以下策略的 IAM 用户:

{ "Statement":[{ "Action":["s3:ListBucket", "sts:GetFederationToken*" ], "Effect":"Allow", "Resource":"*" } ] }

该策略允许 IAM 用户请求临时安全凭证和用于仅列出 AWS 资源的访问权限。有关如何创建 IAM 用户的更多信息,请参阅 IAM 用户指南 中的创建您的第一个 IAM 用户和管理员组

您现在可以使用 IAM 用户安全凭证测试下面的示例。该示例将使用临时安全凭证向 Amazon S3 发送经身份验证的请求。为联合身份用户 (User1) 请求临时安全凭证时,此示例指定了以下策略,该策略将访问权限限制为列出特定存储桶中的对象。请使用存储桶名称更新该策略。

{ "Statement":[ { "Sid":"1", "Action":["s3:ListBucket"], "Effect":"Allow", "Resource":"arn:aws-cn:s3:::YourBucketName" } ] }

在以下示例中,当指定策略资源时,请将 YourBucketName 替换为您的存储桶的名称:

<?php require 'vendor/autoload.php'; use Aws\Sts\StsClient; use Aws\S3\S3Client; use Aws\S3\Exception\S3Exception; $bucket = '*** Your Bucket Name ***'; // In real applications, the following code is part of your trusted code. It has // the security credentials that you use to obtain temporary security credentials. $sts = new StsClient( [ 'version' => 'latest', 'region' => 'us-east-1'] ); // Fetch the federated credentials. $sessionToken = $sts->getFederationToken([ 'Name' => 'User1', 'DurationSeconds' => '3600', 'Policy' => json_encode([ 'Statement' => [ 'Sid' => 'randomstatementid' . time(), 'Action' => ['s3:ListBucket'], 'Effect' => 'Allow', 'Resource' => 'arn:aws:s3:::' . $bucket ] ]) ]); // The following will be part of your less trusted code. You provide temporary // security credentials so the code can send authenticated requests to Amazon S3. $s3 = new S3Client([ 'region' => 'us-east-1', 'version' => 'latest', 'credentials' => [ 'key' => $sessionToken['Credentials']['AccessKeyId'], 'secret' => $sessionToken['Credentials']['SecretAccessKey'], 'token' => $sessionToken['Credentials']['SessionToken'] ] ]); try { $result = $s3->listObjects([ 'Bucket' => $bucket ]); } catch (S3Exception $e) { echo $e->getMessage() . PHP_EOL; }

相关资源

本页内容: