使用 Amazon SDK 通过 Amazon S3 进行开发 - Amazon Simple Storage Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

使用 Amazon SDK 通过 Amazon S3 进行开发

Amazon 软件开发工具包 (SDK) 适用于许多常用编程语言。每个软件开发工具包都提供 API、代码示例和文档,使开发人员能够更轻松地以其首选语言构建应用程序。

注意

您可以使用 Amazon Amplify 进行 Web 和移动应用程序的端到端全栈开发。Amplify Storage 将文件存储和管理功能无缝集成到基于 Amazon S3 构建的前端 Web 和移动应用程序中。有关更多信息,请参阅《Amplify 用户指南》中的 Storage

SDK 编程接口

每个 Amazon SDK 都提供一个或多个编程接口来与 Amazon S3 结合使用。每个 SDK 都为 Amazon S3 提供一个低级别接口,其方法与 API 操作非常相似。一些 SDK 为 Amazon S3 提供高级别接口,这类抽象旨在简化常见的应用场景。

例如,当您使用低级别 API 操作来执行分段上传时,您需要使用一个操作来启动上传,使用另一个操作来上传各个分段,然后使用最后一个操作来完成上传。高级别分段上传 API 操作可让您在单个 API 调用中执行上传所需的所有操作。有关示例,请参阅使用分段上传操作上传对象

低级别 API 操作可以更好地控制上传。如果您需要暂停和恢复上传,在上传期间更改分段的大小,或者在事先不知道数据大小的情况下开始上传,建议您使用低级别 API。

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

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

有关所有 Amazon S3 区域的列表以及这些区域支持的 Signature Version,请参阅《Amazon 一般参考》中的区域和终端节点

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

开发工具包 请求使用签名版本 4 进行请求身份验证
Amazon 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已为 Amazon S3 关闭(弃用) Signature Version 2

但是,Amazon S3 即将关闭(弃用)签名版本 2。之后,Amazon S3 仅接受使用签名版本 4 签名的 API 请求。

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

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

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

有关签署 Amazon 请求的更多信息,请参阅《Amazon Web Services 一般参考》中的签署 Amazon API 请求

进行了哪些更新?

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

有关签署 Amazon 请求的更多信息,请参阅《Amazon Web Services 一般参考》中的签名版本 4 中的变化

为什么进行这些更新?

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

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

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

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

有关将 Signature Version 4 与 Amazon S3 REST API 结合使用的信息,请参阅《Amazon Simple Storage Service API 参考》中的对请求进行身份验证 (Amazon Signature Version 4)

如果我不更新会怎样?

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

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

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

更多信息

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

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

有关将 Signature Version 4 与 Amazon S3 REST API 结合使用的信息,请参阅《Amazon Simple Storage Service API 参考》中的对请求进行身份验证 (Amazon Signature Version 4)

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

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

Amazon SDK for Java v1

升级至 Java 1.11.201+ 或 v2。 在请求身份验证中指定签名版本

Amazon SDK for Java v2

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

Amazon SDK for .NET v1

升级至 3.1.10 或更高版本。 Amazon SDK for .NET

Amazon SDK for .NET v2

升级至 3.1.10 或更高版本。 Amazon SDK for .NET v2

Amazon SDK for .NET v3

升级至 3.3.0.0 或更高版本。 Amazon SDK for .NET v3

Amazon SDK for JavaScript v1

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

Amazon SDK for JavaScript v2

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

Amazon SDK for JavaScript v3

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

Amazon SDK for PHP v1

建议升级至最新版本的 PHP,或者至少升级至已在 S3 客户端的配置中将签名参数设置为 v4 的 v2.7.4。 Amazon SDK for PHP

Amazon SDK for PHP v2

建议升级至最新版本的 PHP,或者至少升级至已在 S3 客户端的配置中将签名参数设置为 v4 的 v2.7.4。 Amazon SDK for PHP

Amazon SDK for PHP v3

无需开发工具包升级。 Amazon SDK for PHP

Boto2

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

Boto3

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

Amazon CLI

升级至 1.11.108。 Amazon Command Line Interface

Amazon CLI v2(预览)

无需开发工具包升级。 Amazon Command Line Interface 版本 2

Amazon SDK for Ruby v1

升级至 Ruby V3。 Amazon 的 Ruby V3

Amazon SDK for Ruby v2

升级至 Ruby V3。 Amazon 的 Ruby V3

Amazon SDK for Ruby v3

无需开发工具包升级。 Amazon 的 Ruby V3

Go

无需开发工具包升级。 Amazon SDK for Go

C++

无需开发工具包升级。 Amazon SDK for C++
Amazon Tools for Windows PowerShell 或者 Amazon Tools for PowerShell Core

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

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

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

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

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

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