我尝试访问使用 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"。
解决方法
以下原因可能会导致"Requests specifying Server Side Encryption with AWS KMS managed keys require AWS Signature Version 4"错误消息:
- 您的请求未使用 AWS 签名版本 4 进行签名。
- 您发出了匿名请求。
您的请求未使用 AWS 签名版本 4 进行签名
当您将签名版本 2 与使用 AWS KMS 加密的对象一起使用时,您可能会收到一条错误消息。某些 S3 REST API 端点和 AWS 区域仍然支持使用签名版本 2 签名的请求。但是,最佳做法是使用签名版本 4 进行登录。有关详细信息,请参阅 AWS Signature Version 2 turned off (deprecated) for Amazon S3。
您可以向支持签名版本 2 的区域中的存储桶发出使用签名版本 2 签名的请求。但是,AWS KMS 要求您的请求使用签名版本 4 进行签名。
要确定您向存储桶中的对象发出请求时使用的签名版本,请执行以下操作:
- 使用 AWS CloudTrail 事件日志。
- 检查 API 的授权标头。标头必须包含 AWS4-HMAC-SHA256。
**注意:**如果您生成了预签名的 URL,请检查查询参数是否包含 ?X-Amz-Algorithm=AWS4-HMAC-SHA256。如果找不到此查询参数,请修改代码以使用签名版本 4。
**注意:**对于指定 AWS KMS 托管式密钥的请求,必须使用 SSL 或 TLS。如果您不使用 SSL 或 TLS,并且通过不安全的连接发出请求,则会出现以下错误:
"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.""Requests specifying Server Side Encryption with AWS KMS managed keys require AWS Signature Version 4"
您发出了匿名请求
匿名请求是指未使用 AWS 凭证签名的请求。例如,您在浏览器或 HTTP 客户端上使用对象 URL 来下载 S3 对象。
对象 URL 的示例为 https://bucketname.s3.region.amazonaws.com/folder/file.txt。
以下是您运行以发出匿名请求的 curl 命令的示例:
curl -vo ./local/path/file.txt https://bucketname.s3.region.amazonaws.com/folder/file.txt
为防止出现错误消息,请确保您的请求使用 AWS 凭证进行签名。