在请求身份验证中指定签名版本
Amazon S3 在大多数 Amazon Web Services 区域 中只支持 Amazon Signature Version 4。不过,在某些较旧的 Amazon Web Services 区域 中,Amazon S3 同时支持 Signature Version 4 和 Signature Version 2。但是,签名版本 2 将要被关闭(弃用)。有关结束对签名版本 2 支持的更多信息,请参阅 已为 Amazon S3 关闭(弃用)Amazon 签名版本 2。
有关所有 Amazon S3 区域的列表以及这些区域支持的 Signature Version,请参阅《Amazon 一般参考》中的区域和终端节点。
对于所有 Amazon Web Services 区域,默认情况下,Amazon 开发工具包使用 Signature Version 4 对请求进行身份验证。如果使用 2016 年 5 月之前发布的 Amazon 开发工具包,您可能需要请求 Signature Version 4,如下表所示。
| 开发工具包 | 请求使用签名版本 4 进行请求身份验证 |
|---|---|
| Amazon CLI |
对于默认配置文件,运行以下命令:
对于自定义配置文件,运行以下命令:
|
| Java 软件开发工具包 |
在代码中添加以下内容:
或者在命令行中指定以下内容:
|
| JavaScript 开发工具包 |
在构建客户端时,将
|
| PHP 开发工具包 |
在为 PHP 开发工具包 v2 构建 Amazon S3 服务客户端时,将
使用 PHP 开发工具包 v3 时,在构建 Amazon S3 服务客户端期间将
|
| Ruby 开发工具包 |
Ruby 开发工具包 – 版本 1:在构建客户端时,将
Ruby 开发工具包 – 版本 3:在构建客户端时,将
|
| .NET 开发工具包 |
在创建 Amazon S3 客户端之前将以下内容添加到代码中:
或将以下内容添加到配置文件中:
|
已为 Amazon S3 关闭(弃用)Amazon 签名版本 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。
更多信息
-
有关使用 Signature Version 4 的更多信息,请参阅签署 Amazon API 请求。
-
在签名版本 4 中的变化中可查看签名版本 2 与签名版本 4 之间的改动列表。
-
查看 Amazon 论坛中的帖子:Amazon Signature Version 4 将取代 Amazon Signature Version 2 用于签署 Amazon S3 API 请求
。 -
如果您有任何问题或疑虑,请联系 Amazon Web Services Support。
从签名版本 2 转向签名版本 4
如果您为 Amazon S3 API 请求身份验证使用签名版本 2,则应改为使用签名版本 4。对签名版本 2 的支持将结束,如已为 Amazon S3 关闭(弃用)Amazon 签名版本 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 |
|
适用于 PHP 的 Amazon SDK v1 |
建议升级至最新版本的 PHP,或者至少升级至已在 S3 客户端的配置中将签名参数设置为 v4 的 v2.7.4。 | 是 | 适用于 PHP 的 Amazon SDK |
|
适用于 PHP 的 Amazon SDK v2 |
建议升级至最新版本的 PHP,或者至少升级至已在 S3 客户端的配置中将签名参数设置为 v4 的 v2.7.4。 | 否 | 适用于 PHP 的 Amazon SDK |
|
适用于 PHP 的 Amazon SDK v3 |
无需开发工具包升级。 | 否 | 适用于 PHP 的 Amazon SDK |
|
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 |
|
适用于 Ruby 的 Amazon SDK v1 |
升级至 Ruby V3。 | 是 | 的 Ruby V3Amazon |
|
适用于 Ruby 的 Amazon SDK v2 |
升级至 Ruby V3。 | 是 | 的 Ruby V3Amazon |
|
适用于 Ruby 的 Amazon SDK v3 |
无需开发工具包升级。 | 否 | 的 Ruby V3Amazon |
|
Go |
无需开发工具包升级。 | 否 | 适用于 Go 的 Amazon SDK |
|
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 流量发送到其上。