You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用预签名URL访问KMS加密S3文件时遇Signature Version 4错误排查

S3预签名URL访问KMS加密对象报错解决方案

生成预签名URL访问启用了默认KMS加密的S3对象时,收到如下错误:

<Error>
<Code>InvalidArgument</Code>
<Message>Requests specifying Server Side Encryption with AWS KMS managed keys require AWS Signature Version 4.</Message>
<ArgumentName>Authorization</ArgumentName>
<ArgumentValue>null</ArgumentValue>
<RequestId>F6VK4TD1S0G4K6YR</RequestId>
<HostId>HOTh/YUsnxC4sSBYVsK5psX5vBz21q1M/qx+pVmKa6s7Np4EbRUbBV4toRJ52OAtqpHIejY03Zk=</HostId>
</Error>

生成URL的代码为:

client.generate_presigned_url('get_object', Params={'Bucket': 'bucket1', 'Key': a})

即使使用boto3默认配置仍出现该问题,可通过以下方式排查解决:

  • 显式指定签名版本:创建boto3 S3客户端时,强制配置使用Signature Version 4,避免默认配置因环境差异出现异常。示例代码:
import boto3
from botocore.config import Config

s3_client = boto3.client('s3', config=Config(signature_version='s3v4'))
presigned_url = s3_client.generate_presigned_url('get_object', Params={'Bucket': 'bucket1', 'Key': a})
  • 确认客户端区域配置:确保boto3客户端的区域与S3存储桶所在区域完全一致。部分场景下,区域未明确指定时,boto3可能采用兼容模式,导致签名版本不符合要求。

  • 验证存储桶加密类型:确认存储桶启用的是AWS KMS托管密钥加密(而非SSE-S3),因为只有KMS加密的对象要求必须使用V4签名访问。

内容的提问来源于stack exchange,提问作者elena

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 07:15:44