Django+Heroku调用S3 PutObject时SignatureDoesNotMatch错误求助
Django + Heroku + AWS S3 签名不匹配问题排查求助
开发的Django应用部署在Heroku平台,已在配置文件中指定Access Key ID等相关环境变量(配置代码如下)。当前使用django-storages(1.12.3版本)和boto3(1.26.31版本)调用AWS S3的PutObject接口时,持续出现「SignatureDoesNotMatch」错误,提示请求签名不匹配。
尝试过多种权限配置的IAM用户(含S3全权限、全局账号Access Key),核对过Access Key的正确性,也尝试通过Django后台管理页面上传文件,均出现该错误,网站返回内部服务器错误。请求协助排查并解决此问题。
配置代码
# Amazon S3 Settings AWS_ACCESS_KEY_ID= config("AWS_ACCESS_KEY_ID") AWS_SECRET_ACCESS_KEY_ID= config("AWS_SECRET_ACCESS_KEY_ID") AWS_STORAGE_BUCKET_NAME= config("AWS_STORAGE_BUCKET_NAME") AWS_S3_CUSTOM_DOMAIN=f"{AWS_STORAGE_BUCKET_NAME}.s3.us-west-1.amazonaws.com" # this is the default storage class to generate url for storage AWS_DEFAULT_ACL="public-read" AWS_S3_OBJECT_PARAMETERS = { "CacheControl": "max-age=86400" } AWS_LOCATION= "static" #A path prefix that will be prepended to all uploads AWS_S3_REGION_NAME = "eu-west-1" AWS_QUERYSTRING_AUTH=False AWS_HEADERS={ "Access-Control-Allow-Origin":"*", } DEFAULT_FILE_STORAGE= "storages.backends.s3boto3.S3Boto3Storage" STATICFILES_STORAGE= "storages.backends.s3boto3.S3StaticStorage" STATIC_URL= f"https://{AWS_S3_CUSTOM_DOMAIN}/static/" MEDIA_URL= f"https://{AWS_S3_CUSTOM_DOMAIN}/media/" # Heroku Logging DEBUG_PROPAGATE_EXCEPTIONS = True # Assets Management ASSETS_ROOT = os.getenv('ASSETS_ROOT', f"https://{AWS_S3_CUSTOM_DOMAIN}/static/assets")
相关依赖版本
django-storages==1.12.3 boto3==1.26.31
错误信息
botocore.exceptions.ClientError: An error occurred (SignatureDoesNotMatch) when calling the PutObject operation: The request signature we calculated does not match the signature you provided. Check your key and signing method.
网站返回内容
Internal Server Error The server encountered an unexpected internal server error (generated by the waitress)
内容的提问来源于stack exchange,提问作者Julia Julchen
相关产品推荐
相关产品推荐

