调用GetObject操作遇SignatureDoesNotMatch错误:S3大文件下载失败
解决S3大文件复制时的SignatureDoesNotMatch错误
先修正命令拼写错误
你执行的命令aws cli s3 cp s3://${my_bucket}/${my_file}存在语法错误,正确的AWS CLI命令格式应为aws s3 cp s3://${my_bucket}/${my_file} <本地目标路径>,多出来的cli会导致命令解析异常,这可能是触发签名错误的直接原因。
其他排查与解决步骤
如果修正命令后问题仍存在,按以下步骤排查:
强制使用S3签名版本v4
部分AWS区域仅支持签名版本v4,大文件分段传输时可能默认使用了旧版本签名。- 临时生效:执行
export AWS_S3_SIGNATURE_VERSION=s3v4后再重新运行复制命令 - 永久生效:在
~/.aws/config文件中添加配置:[default] s3 = signature_version = s3v4
- 临时生效:执行
同步系统时间
AWS签名验证依赖精准的系统时间,若本地时间与AWS服务器时间偏差超过5分钟,会直接导致签名不匹配。- 使用
date命令查看本地时间,通过NTP服务同步(如timedatectl set-ntp true或ntpdate pool.ntp.org)
- 使用
明确指定存储桶区域
若CLI默认区域与存储桶所在区域不一致,可能引发签名错误。复制命令中添加--region参数指定实际区域:aws s3 cp s3://${my_bucket}/${my_file} ./ --region <存储桶区域>检查临时凭证有效性
若使用IAM角色的临时凭证,凭证过期会导致权限验证失败。重新获取凭证:- EC2实例:重启实例或重新关联IAM角色
- 本地环境:重新执行获取临时凭证的命令(如
aws sts assume-role相关操作)
内容的提问来源于stack exchange,提问作者Zhu Weiji
相关产品推荐
相关产品推荐

