我正在尝试访问使用 AWS Key Management Service(AWS KMS)加密的 Amazon Simple Storage Service(Amazon S3)对象。我收到错误“Requests specifying Server Side Encryption with AWS KMS managed keys require AWS Signature Version 4”(指定具有 Amazon S3 托管式密钥的服务器端加密的请求需要 AWS 签名版本 4)。
解决方法
当您使用非 AWS 签名版本 4 的签名版本访问 AWS KMS 加密的对象时,会遇到此错误。当您访问使用 AWS KMS 密钥加密的 S3 对象时,请确保您的所有请求都采用 AWS 签名版本 4 进行签名。
确保您没有发出匿名请求
当您发出匿名请求时,您可能会遇到此错误。匿名请求是指未使用 AWS 凭证签名的请求。例如,在浏览器或 HTTP 客户端上使用对象 URL 下载 S3 对象。S3 对象 URL 如下所示:
https://bucketname.s3.region.amazonaws.com/folder/file.txt
使用 curl 等 HTTP 客户端,您可以通过类似于以下内容的命令发出匿名请求:
curl -vo ./local/path/file.txt https://bucketname.s3.region.amazonaws.com/folder/file.txt
确保您没有使用 AWS 签名版本 2
某些 S3 REST API 端点和区域仍然支持使用签名版本 2 签名的请求。但是,最佳做法是使用签名版本 4 进行登录。有关详细信息,请参阅 Amazon S3 的 AWS 签名版本 2 已关闭(已弃用)。
由于某些区域仍支持签名版本 2,因此您可以向这些区域中的桶发出使用签名版本 2 签名的请求。但是,AWS KMS 要求您的请求使用签名版本 4 进行签名。如果将签名版本 2 与 AWS KMS 加密的对象一起使用,则会出现此错误:
**指定具有 AWS KMS 托管式密钥的服务器端加密的请求需要 AWS 签名版本 4 **。
如需识别您在向桶中的对象发出请求时使用的签名版本,请尝试以下操作:
注意: 对于指定 AWS KMS 托管式密钥的请求,必须使用安全套接字层(SSL)或传输层安全性协议(TLS)。如果通过不安全的连接(没有 SSL/TLS)发出指定 AWS KMS 密钥的请求,则会遇到以下错误:
An error occurred (InvalidArgument) when calling the <operation_performed> operation: Requests specifying Server Side Encryption with AWS KMS managed keys must be made over a secure connection.
相关信息
指定具有 AWS KMS 的服务器端加密 (SSE-KMS)
对请求进行身份验证(AWS 签名版本 2)