使用 AWS 账户或 IAM 用户凭证发出请求 - Amazon Simple Storage Service
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

欢迎使用新的 Amazon S3 用户指南! Amazon S3 用户指南结合了以下三个已停用的指南中的信息和说明:Amazon S3 开发人员指南Amazon S3 控制台用户指南Amazon S3 入门指南

使用 AWS 账户或 IAM 用户凭证发出请求

您可以使用 AWS 账户或 IAM 用户安全凭证向 Amazon S3 发送经身份验证的请求。本节提供了有关如何使用适用于 Java 的 AWS 开发工具包、适用于 .NET 的 AWS 开发工具包和适用于 PHP 的 AWS 开发工具包发送经身份验证的请求的示例。有关可用 AWS 开发工具包的列表,请转到示例代码和库

每个 AWS 开发工具包都使用开发工具包特有的凭证提供程序链来查找和使用凭证,并代表凭证所有者执行操作。所有这些凭证提供程序链的共同点是,它们都会寻找您的本地 AWS 凭证文件。

有关更多信息,请参阅以下主题:

创建本地 AWS 凭证文件

为 AWS 开发工具包配置凭证的最简单方法是使用 AWS 凭证文件。如果您使用 AWS 命令行界面 (AWS CLI),那么您可能已经配置了本地 AWS 凭证文件。否则,请按照以下步骤设置凭证文件:

  1. 登录 AWS 管理控制台,并通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/

  2. 创建一个新用户,其权限仅限于您希望您的代码有权访问的服务和操作。有关创建新 IAM 用户的更多信息,请参阅创建 IAM 用户(控制台),并按照直至步骤 8 的说明进行操作。

  3. 选择 Download .csv 以保存 AWS 凭证的本地副本。

  4. 在您的计算机上,导航至主目录,并创建 .aws 目录。在基于 Unix 的系统 (例如 Linux 或 OS X) 上,它在以下位置:

    ~/.aws

    在 Windows 上,它在以下位置:

    %HOMEPATH%\.aws
  5. .aws 目录中,创建名为 credentials 的新文件。

  6. 打开您从 IAM 控制台中下载的凭证 .csv 文件,并使用以下格式将其内容复制到 credentials 文件:

    [default] aws_access_key_id = your_access_key_id aws_secret_access_key = your_secret_access_key
  7. 保存 credentials 文件,并删除在步骤 3 中下载的 .csv 文件。

您的共享凭证文件现在已在本地计算机上配置完毕,可以与 AWS 开发工具包一起使用。

使用 AWS 开发工具包发送经身份验证的请求

使用 AWS 开发工具包发送经过身份验证的请求。

Java

要使用 AWS 账户或 IAM 用户凭证向 Amazon S3 发送经身份验证的请求,请执行以下操作:

  • 使用 AmazonS3ClientBuilder 类创建 AmazonS3Client 实例。

  • 运行 AmazonS3Client 方法之一,以向 Amazon S3 发送请求。客户端将通过您提供的凭证生成所需的签名并将其包含在请求中。

以下示例将执行上述任务。有关创建和测试有效示例的信息,请参阅 测试 Amazon S3 Java 代码示例

import com.amazonaws.AmazonServiceException; import com.amazonaws.SdkClientException; import com.amazonaws.auth.profile.ProfileCredentialsProvider; import com.amazonaws.regions.Regions; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3ClientBuilder; import com.amazonaws.services.s3.model.ListObjectsRequest; import com.amazonaws.services.s3.model.ObjectListing; import com.amazonaws.services.s3.model.S3ObjectSummary; import java.io.IOException; import java.util.List; public class MakingRequests { public static void main(String[] args) throws IOException { Regions clientRegion = Regions.DEFAULT_REGION; String bucketName = "*** Bucket name ***"; try { AmazonS3 s3Client = AmazonS3ClientBuilder.standard() .withCredentials(new ProfileCredentialsProvider()) .withRegion(clientRegion) .build(); // Get a list of objects in the bucket, two at a time, and // print the name and size of each object. ListObjectsRequest listRequest = new ListObjectsRequest().withBucketName(bucketName).withMaxKeys(2); ObjectListing objects = s3Client.listObjects(listRequest); while (true) { List<S3ObjectSummary> summaries = objects.getObjectSummaries(); for (S3ObjectSummary summary : summaries) { System.out.printf("Object \"%s\" retrieved with size %d\n", summary.getKey(), summary.getSize()); } if (objects.isTruncated()) { objects = s3Client.listNextBatchOfObjects(objects); } else { break; } } } catch (AmazonServiceException e) { // The call was transmitted successfully, but Amazon S3 couldn't process // it, so it returned an error response. e.printStackTrace(); } catch (SdkClientException e) { // Amazon S3 couldn't be contacted for a response, or the client // couldn't parse the response from Amazon S3. e.printStackTrace(); } } }
.NET

使用 AWS 账户或 IAM 用户凭证发送经身份验证的请求:

  • 创建 AmazonS3Client 类的实例。

  • 运行 AmazonS3Client 方法之一,以向 Amazon S3 发送请求。客户端将通过您提供的凭证生成所需的签名并将其包含在它发送到 Amazon S3 的请求中。

有关更多信息,请参阅 使用 AWS 账户或 IAM 用户凭证发出请求

注意
  • 您可以在不提供安全凭证的情况下创建 AmazonS3Client 客户端。使用此客户端发送的请求是匿名的请求,它们不带签名。如果为不是公开可用的资源发送了匿名请求,Amazon S3 将返回错误。

  • 您可以创建 AWS 账户并创建所需的用户账户。您还可以管理这些用户账户的凭证。您需要这些凭证才能执行以下示例中的任务。有关更多信息,请参阅适用于 .NET 的 AWS 开发工具包开发人员指南中的配置 AWS 凭证

    然后,您还可以将应用程序配置为主动检索配置文件和凭证,然后在创建 AWS 服务客户端时明确使用这些凭证。有关更多信息,请参阅适用于 .NET 的 AWS 开发工具包开发人员指南中的访问应用程序中的凭证和配置文件

以下 C# 示例说明如何执行上述任务。有关运行本指南中的 .NET 示例的信息以及有关如何将凭证存储在配置文件中的说明,请参阅运行 Amazon S3 .NET 代码示例

using Amazon; using Amazon.S3; using Amazon.S3.Model; using System; using System.Threading.Tasks; namespace Amazon.DocSamples.S3 { class MakeS3RequestTest { private const string bucketName = "*** bucket name ***"; // Specify your bucket region (an example region is shown). private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2; private static IAmazonS3 client; public static void Main() { using (client = new AmazonS3Client(bucketRegion)) { Console.WriteLine("Listing objects stored in a bucket"); ListingObjectsAsync().Wait(); } } static async Task ListingObjectsAsync() { try { ListObjectsRequest request = new ListObjectsRequest { BucketName = bucketName, MaxKeys = 2 }; do { ListObjectsResponse response = await client.ListObjectsAsync(request); // Process the response. foreach (S3Object entry in response.S3Objects) { Console.WriteLine("key = {0} size = {1}", entry.Key, entry.Size); } // If the response is truncated, set the marker to get the next // set of keys. if (response.IsTruncated) { request.Marker = response.NextMarker; } else { request = null; } } while (request != null); } catch (AmazonS3Exception e) { Console.WriteLine("Error encountered on server. Message:'{0}' when writing an object", e.Message); } catch (Exception e) { Console.WriteLine("Unknown encountered on server. Message:'{0}' when writing an object", e.Message); } } } }

有关有效示例,请参阅 Amazon S3 对象概述存储桶概述。您可以使用 AWS 账户或 IAM 用户证书测试这些示例。

例如,要列出您的存储桶中的所有对象键,请参阅 以编程方式列出对象键

PHP

此部分说明如何使用版本 3 的适用于 PHP 的 AWS 开发工具包中的类来通过 AWS 账户或 IAM 用户凭证发送经身份验证的请求。此部分假定您已按照使用适用于 PHP 的 AWS 开发工具包和运行 PHP 示例中的说明执行操作,并正确安装了适用于 PHP 的 AWS 开发工具包。

以下 PHP 示例说明客户端如何使用您的安全凭证发出请求以列出您的账户的所有存储桶。

require 'vendor/autoload.php'; use Aws\Sts\StsClient; use Aws\S3\S3Client; use Aws\S3\Exception\S3Exception; $bucket = '*** Your Bucket Name ***'; $s3 = new S3Client([ 'region' => 'us-east-1', 'version' => 'latest', ]); // Retrieve the list of buckets. $result = $s3->listBuckets(); try { // Retrieve a paginator for listing objects. $objects = $s3->getPaginator('ListObjects', [ 'Bucket' => $bucket ]); echo "Keys retrieved!" . PHP_EOL; // Print the list of objects to the page. foreach ($objects as $object) { echo $object['Key'] . PHP_EOL; } } catch (S3Exception $e) { echo $e->getMessage() . PHP_EOL; }
注意

您可以在不提供安全凭证的情况下创建 S3Client 客户端。使用此客户端发送的请求是匿名的请求,它们不带签名。如果为不是公开可用的资源发送了匿名请求,Amazon S3 将返回错误。有关更多信息,请参阅适用于 PHP 的 AWS 开发工具包文档中的创建匿名客户端

有关有效示例,请参阅Amazon S3 对象概述。您可以使用 AWS 账户或 IAM 用户凭证测试这些示例。

有关列出存储桶中的对象键的示例,请参阅以编程方式列出对象键

Ruby

在您可以使用适用于 Ruby 的 AWS 开发工具包的版本 3 调用 Amazon S3 之前,必须设置 AWS 访问凭证以便开发工具包用来验证您对存储桶和对象的访问权限。如果您在本地系统上的 AWS 凭证配置文件中设置了共享凭证,则适用于 Ruby 的开发工具包的版本 3 可以在无需您在代码中声明这些凭证的情况下使用它们。有关设置共享凭证的更多信息,请参阅使用 AWS 账户或 IAM 用户凭证发出请求

以下 Ruby 代码段使用本地计算机上 AWS 凭证文件中的共享凭证,对要获取特定存储桶中的所有对象键名的请求进行身份验证。它将执行以下操作:

  1. 创建 Aws::S3::Client 类的实例。

  2. 使用 Aws::S3::Clientlist_objects_v2 方法,通过枚举存储桶中的对象向 Amazon S3 发出请求。客户端将根据计算机上 AWS 凭证文件中的凭证生成所需的签名值,并将其包含在发送给 Amazon S3 的请求中。

  3. 将对象键名阵列打印到终端。

require 'aws-sdk-s3' # Prints the list of objects in an Amazon S3 bucket. # # @param s3_client [Aws::S3::Client] An initialized Amazon S3 client. # @param bucket_name [String] The bucket's name. # @return [Boolean] true if all operations succeed; otherwise, false. # @example # s3_client = Aws::S3::Client.new(region: 'us-east-1') # exit 1 unless list_bucket_objects?(s3_client, 'doc-example-bucket') def list_bucket_objects?(s3_client, bucket_name) puts "Accessing the bucket named '#{bucket_name}'..." objects = s3_client.list_objects_v2( bucket: bucket_name, max_keys: 50 ) if objects.count.positive? puts 'The object keys in this bucket are (first 50 objects):' objects.contents.each do |object| puts object.key end else puts 'No objects found in this bucket.' end return true rescue StandardError => e puts "Error while accessing the bucket named '#{bucket_name}': #{e.message}" return false end

即使没有本地 AWS 凭证文件,您仍可以创建 Aws::S3::Client 资源并针对 Amazon S3 存储桶和对象运行代码。使用适用于 Ruby 的开发工具包的版本 3 发送的请求是匿名的,默认情况下没有签名。如果为不是公开可用的资源发送了匿名请求,Amazon S3 将返回错误。

可以针对适用于 Ruby 的开发工具包应用程序使用并扩展前一个代码段,如下面的更可靠的示例所示。

require 'aws-sdk-s3' # Prints a list of objects in an Amazon S3 bucket. # # Prerequisites: # # - An Amazon S3 bucket. # # @param s3_client [Aws::S3::Client] An initialized Amazon S3 client. # @param bucket_name [String] The bucket's name. # @return [Boolean] true if all operations succeed; otherwise, false. # @example # s3_client = Aws::S3::Client.new(region: 'us-east-1') # exit 1 unless can_list_bucket_objects?(s3_client, 'doc-example-bucket') def list_bucket_objects?(s3_client, bucket_name) puts "Accessing the bucket named '#{bucket_name}'..." objects = s3_client.list_objects_v2( bucket: bucket_name, max_keys: 50 ) if objects.count.positive? puts 'The object keys in this bucket are (first 50 objects):' objects.contents.each do |object| puts object.key end else puts 'No objects found in this bucket.' end return true rescue StandardError => e puts "Error while accessing the bucket named '#{bucket_name}': #{e.message}" end

相关资源