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

使用 AWS 开发工具包、CLI 和 Explorer

使用 Amazon S3 开发应用程序时,您可以使用 AWS 开发工具包。AWS 开发工具包包装了底层 REST API,可以简化您的编程任务。还提供 AWS 移动开发工具包和 AWS Amplify JavaScript 库,用于使用 AWS 构建互连移动和 Web 应用程序。

本部分提供使用 AWS 软件开发工具包开发 Amazon S3 应用程序的概述。本节还描述了如何测试本指南中提供的 AWS 开发工具包代码示例。

除了 AWS 开发工具包外,AWS Explorer 也适用于 Visual Studio 和 Eclipse for Java IDE。在此情况下,可以将开发工具包和 Explorer捆绑在一起来作为 AWS 工具包。

此外,您还可以使用 AWS 命令行界面 (AWS CLI) 来管理 Amazon S3 存储桶和对象。

AWS Toolkit for Eclipse

AWS Toolkit for Eclipse 包含AWS SDK for Java和 AWS Explorer for Eclipse。AWS Explorer for Eclipse 是适用于 Eclipse for Java IDE 的开源插件,能够让开发人员更为轻松地使用 AWS 开发、调试和部署 Java 应用程序。易于使用的 GUI 使您可以访问和管理您的 AWS 基础设施,包括 Amazon S3。在 Eclipse for Java IDE 环境中,您可以在开发应用程序的同时,执行常见的操作 (例如管理您的存储桶和对象,以及设置 IAM 策略)。有关设置说明,请参阅设置工具包。有关使用 Explorer 的示例,请参阅如何访问 AWS Explorer

AWS Toolkit for Visual Studio

AWS Explorer for Visual Studio 是针对 Microsoft Visual Studio 的扩展,使开发人员能够更容易地使用 Amazon Web Services 来开发、调试和部署 .NET 应用程序。易于使用的 GUI 使您可以访问和管理您的 AWS 基础设施,包括 Amazon S3。在 Visual Studio 环境中,您可以在开发应用程序的同时,执行常见的操作 (例如管理您的存储桶和对象,或设置 IAM 策略)。有关设置说明,请参阅设置 AWS Toolkit for Visual Studio。有关通过 Explorer 使用 Amazon S3 的示例,请参阅从 AWS Explorer 使用 Amazon S3

AWS 软件开发工具包

您只能下载开发工具包。有关下载开发工具包库的信息,请参阅示例代码库

AWS CLI

AWS CLI 是用于管理您的 AWS 服务的统一工具,包括 Amazon S3。有关下载 AWS CLI 的信息,请参阅 AWS Command Line Interface

在请求身份验证中指定签名版本

Amazon S3 在大多数 AWS 区域中只支持 AWS 签名版本 4。在某些较旧的 AWS 区域中,Amazon S3 同时支持签名版本 4 和签名版本 2。但是,签名版本 2 将要被关闭(弃用)。有关结束对签名版本 2 支持的更多信息,请参阅已为 Amazon S3 关闭(弃用)AWS 签名版本 2

有关所有 Amazon S3 区域的列表以及这些区域支持的签名版本,请参阅 AWS 一般参考 中的区域和终端节点

对于所有 AWS 区域,默认情况下,AWS 开发工具包使用签名版本 4 对请求进行身份验证。如果使用 2016 年 5 月之前发布的 AWS 开发工具包,您可能需要请求签名版本 4,如下表所示。

开发工具包 请求使用签名版本 4 进行请求身份验证
AWS CLI

对于默认配置文件,运行以下命令:

$ aws configure set default.s3.signature_version s3v4

对于自定义配置文件,运行以下命令:

$ aws configure set profile.your_profile_name.s3.signature_version s3v4
Java 软件开发工具包

在代码中添加以下内容:

System.setProperty(SDKGlobalConfiguration.ENABLE_S3_SIGV4_SYSTEM_PROPERTY, "true");

或者在命令行中指定以下内容:

-Dcom.amazonaws.services.s3.enableV4
JavaScript 开发工具包

在构建客户端时,将 signatureVersion 参数设置为 v4

var s3 = new AWS.S3({signatureVersion: 'v4'});
PHP 开发工具包

在为 PHP 开发工具包 v2 构建 Amazon S3 服务客户端时,将 signature 参数设置为 v4

<?php $client = S3Client::factory([ 'region' => 'YOUR-REGION', 'version' => 'latest', 'signature' => 'v4' ]);

使用 PHP 开发工具包 v3 时,在构建 Amazon S3 服务客户端期间将 signature_version 参数设置为 v4

<?php $s3 = new Aws\S3\S3Client([ 'version' => '2006-03-01', 'region' => 'YOUR-REGION', 'signature_version' => 'v4' ]);
Ruby 开发工具包

Ruby 开发工具包 – 版本 1:在构建客户端时,将 :s3_signature_version 参数设置为 :v4

s3 = AWS::S3::Client.new(:s3_signature_version => :v4)

Ruby 开发工具包 – 版本 3:在构建客户端时,将 signature_version 参数设置为 v4

s3 = Aws::S3::Client.new(signature_version: 'v4')
.NET 开发工具包

在创建 Amazon S3 客户端之前将以下内容添加到代码中:

AWSConfigsS3.UseSignatureVersion4 = true;

或将以下内容添加到配置文件中:

<appSettings> <add key="AWS.S3.UseSignatureVersion4" value="true" /> </appSettings>

 

已为 Amazon S3 关闭(弃用)AWS 签名版本 2

签名版本 2 将 Amazon S3 中被关闭(弃用)。 然后 Amazon S3 将仅接受使用签名版本 4 签名的 API 请求。

本部分提供有关结束签名版本 2 支持的常见问题解答。

什么是签名版本 2/4,以及这对于签名请求意味着什么?

签名版本 2 或签名版本 4 签名过程用于对 Amazon S3 API 请求进行身份验证。签名请求使得 Amazon S3 可以确定谁在发送请求并保护您的请求免遭恶意人士侵害。

有关签署 AWS 请求的更多信息,请参阅 AWS General Reference 中的签署 AWS API 请求

进行了哪些更新?

我们当前支持使用签名版本 2 和签名版本 4 过程签名的 Amazon S3 API 请求。在此之后,Amazon S3 将仅接受使用签名版本 4 签名的请求。

有关对 AWS 请求签名的更多信息,请参阅 AWS General Reference 中的签名版本 4 中的变化

为什么进行这些更新?

签名版本 4 使用签名密钥而非您的秘密访问密钥,提供了更好的安全性。当前所有 AWS 区域中支持签名版本 4,而只有在 2014 年 1 月之前启动的区域中支持签名版本 2。此更新使得我们可以在所有区域中提供更为一致的体验。

如何确保我使用的是签名版本 4,需要进行哪些更新?

对请求进行签名所用的签名版本通常由客户端上的工具或开发工具包设置。默认情况下,AWS 开发工具包的最新版本使用签名版本 4。对于第三方软件,请联系您软件的相应支持团队以确认所需的版本。如果您向 Amazon S3 发送直接 REST 调用,则必须修改应用程序以使用签名版本 4 签名过程。

有关在转向签名版本 4 时所用 AWS 开发工具包版本的信息,请参阅从签名版本 2 转向签名版本 4

有关将签名版本 4 与 Amazon S3 REST API 配合使用的信息,请参阅 Amazon Simple Storage Service API Reference 中的对请求进行身份验证(AWS 签名版本 4)

如果我不更新会怎样?

在此之后使用签名版本 2 签名的请求将无法通过 Amazon S3 的身份验证。请求者将看到错误,说明请求必须使用签名版本 4 签名。

如果我使用要求我签名 7 天以上的预签名 URL,是否应进行更改?

如果您使用了要求您签名 7 天以上的预签名 URL,目前无需任何操作。您可以继续使用 AWS 签名版本 2 对预签名 URL 进行签名并通过身份验证。我们将后续跟进并提供更多详情,说明如何为预签名 URL 场景迁移签名版本 4。

更多信息

从签名版本 2 转向签名版本 4

如果您为 Amazon S3 API 请求身份验证使用签名版本 2,则应改为使用签名版本 4。对签名版本 2 的支持将结束,如 已为 Amazon S3 关闭(弃用)AWS 签名版本 2 中所述。

有关将签名版本 4 与 Amazon S3 REST API 配合使用的信息,请参阅 Amazon Simple Storage Service API Reference 中的对请求进行身份验证(AWS 签名版本 4)

下表列出了使用签名版本 4 (SigV4) 所需的开发工具包最低版本列表。
如果您使用通过 AWS Java、JavaScript (Node.js) 或 Python (Boto/CLI) 开发工具包预签名 URL,则必须设置正确的 AWS 区域并在客户端配置中设置签名版本 4。有关在客户端配置中设置 SigV4 的信息,请参阅在请求身份验证中指定签名版本

如果您使用此开发工具包/产品 请升级至此开发工具包版本 客户端是否需要进行代码更改以使用 Sigv4? 指向开发工具包文档的链接

AWS SDK for Java v1

升级至 Java 1.11.x 或 2018 年 4 季度的 v2。 在请求身份验证中指定签名版本

AWS SDK for Java v2(预览)

无需开发工具包升级。 AWS SDK for Java

适用于 .NET 的 AWS 开发工具包 v1

升级至 3.1.10 或更高版本。 适用于 .NET 的 AWS 开发工具包

适用于 .NET 的 AWS 开发工具包 v2

升级至 3.1.10 或更高版本。 适用于 .NET 的 AWS 开发工具包 v2

适用于 .NET 的 AWS 开发工具包 v3

无需开发工具包升级。 适用于 .NET 的 AWS 开发工具包 v3

AWS SDK for JavaScript v1

升级至 2.68.0 或更高版本。 AWS SDK for JavaScript

AWS SDK for JavaScript v2

升级至 2.68.0 或更高版本。 AWS SDK for JavaScript

AWS SDK for JavaScript v3

当前无需任何操作。2019 年 3 季度升级至主要版本 V3。 AWS SDK for JavaScript

适用于 PHP 的 AWS 开发工具包 v1

建议升级至最新版本的 PHP,或者至少升级至已在 S3 客户端的配置中将签名参数设置为 v4 的 v2.7.4。 适用于 PHP 的 AWS 开发工具包

适用于 PHP 的 AWS 开发工具包 v2

建议升级至最新版本的 PHP,或者至少升级至已在 S3 客户端的配置中将签名参数设置为 v4 的 v2.7.4。 适用于 PHP 的 AWS 开发工具包

适用于 PHP 的 AWS 开发工具包 v3

无需开发工具包升级。 适用于 PHP 的 AWS 开发工具包

Boto2

升级至 Boto2 v2.49.0。 Boto 2 升级

Boto3

升级至 1.5.71 (Botocore)、1.4.6 (Boto3)。 Boto3 – 适用于 Python 的 AWS 开发工具包

AWS CLI

升级至 1.11.108。 AWS 命令行界面

AWS CLI v2(预览)

无需开发工具包升级。 AWS 命令行界面版本 2

适用于 Ruby 的 AWS 开发工具包 v1

升级至 Ruby V3。 适用于 AWS 的 Ruby V3

适用于 Ruby 的 AWS 开发工具包 v2

升级至 Ruby V3。 适用于 AWS 的 Ruby V3

适用于 Ruby 的 AWS 开发工具包 v3

无需开发工具包升级。 适用于 AWS 的 Ruby V3

转到

无需开发工具包升级。 适用于 Go 的 AWS 开发工具包

C++

无需开发工具包升级。 适用于 C++ 的 AWS 开发工具包

适用于 Windows PowerShell 的 AWS 工具 或者 适用于 PowerShell Core 的 AWS 工具

如果您使用的模块版本早于 3.3.99,则必须升级到 3.3.99。

要获取版本信息,请使用 Get-Module cmdlet:

Get-Module –Name AWSPowershell Get-Module –Name AWSPowershell.NetCore

要更新 3.3.99 版本,请使用 Update-Module cmdlet:

Update-Module –Name AWSPowershell Update-Module –Name AWSPowershell.NetCore

您可以使用有效期超过 7 天的预签名 URL 以将签名版本 2 流量发送到其上。