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

使用Django+Boto3生成S3预签名URL遇授权参数错误求助

问题:S3预签名URL生成后出现AuthorizationQueryParametersError错误

我使用Django开发应用,媒体文件托管在AWS S3桶中,应用内保存和展示均正常。但需要生成图片URL用于邮件,于是用boto3编写了生成预签名URL的代码,点击生成的URL时出现AuthorizationQueryParametersError错误。

生成预签名URL的代码

import boto3
from decouple import config

AWS_ACCESS_KEY_ID = config("AWS_ACCESS_KEY_ID")
AWS_SECRET_ACCESS_KEY = config("AWS_SECRET_ACCESS_KEY")
AWS_STORAGE_BUCKET_NAME = 'wiini'
AWS_S3_REGION_NAME = 'ca-central-1'
AWS_S3_SIGNATURE_NAME = 's3v4'
AWS_S3_FILE_OVERWRITE = False


def get_s3_favicon_url():
    s3_client = boto3.client(
        's3',
        aws_access_key_id=AWS_ACCESS_KEY_ID,
        aws_secret_access_key=AWS_SECRET_ACCESS_KEY,
        region_name=AWS_S3_REGION_NAME,
        config=boto3.session.Config(signature_version=AWS_S3_SIGNATURE_NAME)
    )

    favicon_key = 'favicon-32x32.png'

    url = s3_client.generate_presigned_url(
        'get_object',
        Params={'Bucket': AWS_STORAGE_BUCKET_NAME, 'Key': favicon_key},
        ExpiresIn=3600,  # 设置合适的过期时间(秒)
        HttpMethod='GET',  # 指定HTTP方法
    )

    print("Generated URL:", url)
    return url

完整错误信息

This XML file does not appear to have any style information associated with it. The document tree is shown below.
<Error>
<Code>AuthorizationQueryParametersError</Code>
<Message>Query-string authentication version 4 requires the X-Amz-Algorithm, X-Amz-Credential, X-Amz-Signature, X-Amz-Date, X-Amz-SignedHeaders, and X-Amz-Expires parameters.</Message>
<RequestId>MBZZHKZF2ZJEGNJ2</RequestId>
<HostId>1u9Jg6UQWPsdbmN2Qh88HYhsVNILR3CY58RzIMu3Be6FALR6D8qu+GnLEND/Mwee4Mkx0p7zoR8=</HostId>
</Error>

解决方法

  • 调整客户端签名配置:将signature_version直接在boto3.client初始化时指定,替代原来的config参数写法,避免配置传递异常:
    s3_client = boto3.client(
        's3',
        aws_access_key_id=AWS_ACCESS_KEY_ID,
        aws_secret_access_key=AWS_SECRET_ACCESS_KEY,
        region_name=AWS_S3_REGION_NAME,
        signature_version='s3v4'
    )
    
  • 验证权限与区域:确保AWS凭证对应的IAM用户拥有s3:GetObject权限,同时确认AWS_S3_REGION_NAME与S3桶实际所在区域完全一致。
  • 升级依赖包:如果使用的boto3或botocore版本过低,可能存在签名生成的bug,执行以下命令升级:
    pip install --upgrade boto3 botocore
    
  • 检查生成的URL参数:生成后确认URL包含X-Amz-Algorithm、X-Amz-Credential等所有要求的参数,若缺失则说明生成过程存在异常,需排查代码或依赖问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 23:31:30