AWS S3预签名URL无法GET:授权机制不支持问题求助
这个问题我之前也碰到过,根源很明确:你的S3存储桶所在的AWS区域只支持AWS4-HMAC-SHA256(也就是SigV4)签名算法,但默认情况下AWS CLI生成预签名URL时用的是旧版的AWS签名版本2(SigV2),两者不兼容就触发了这个400错误。
临时解决(单次生效)
在生成预签名URL的时候,直接指定签名版本为s3v4即可,命令修改为:
aws s3 presign s3://bucket-name/2018/01/17/small.mp4 --signature-version s3v4
用这个命令生成的URL,不管是curl、wget还是浏览器访问,都能正常工作。
永久解决(全局生效)
如果不想每次都手动加参数,可以修改你的AWS CLI配置文件(Linux/macOS路径为~/.aws/config,Windows路径为C:\Users\<你的用户名>\.aws\config),在对应的配置段添加签名版本设置:
[default] region = <你的存储桶所在区域,比如ap-southeast-1> [s3] signature_version = s3v4
配置完成后,所有通过该profile生成的S3预签名URL都会默认使用SigV4签名,无需再额外指定参数。
补充个小背景:AWS在2014年之后推出的新区域(几乎除了最早的us-east-1之外的所有区域)都仅支持SigV4签名,旧的SigV2已被逐步淘汰,所以只要你的存储桶不在us-east-1,就必须使用SigV4签名的预签名URL才能正常访问。
内容的提问来源于stack exchange,提问作者pjotr_dolphin




