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

升级AWSSDK.S3至3.7.305.8后无法向Wasabi上传文件求助

AWSSDK.S3升级后上传Wasabi S3签名不匹配问题解决

成因分析

  • 签名算法默认行为变更:AWSSDK.S3 3.7.305.8版本调整了签名生成的默认逻辑,比如对v4签名的区域解析、请求头包含范围的规则更严格,而Wasabi S3服务的签名校验逻辑与AWS新版本SDK的默认行为存在兼容性差异。
  • 区域配置的细微差异:代码中使用AuthenticationRegion = RegionEndpoint.USEast1.SystemName传递区域,新版本SDK对区域参数的解析方式改变,导致签名计算时使用的区域与Wasabi服务端预期不一致。
  • 路径风格存储的签名逻辑变化:启用ForcePathStyle = true后,新版本SDK对路径风格请求的签名计算逻辑与旧版本不同,进而引发签名不匹配。

解决方法

1. 显式指定签名版本并修正区域配置

修改AmazonS3Config,直接使用RegionEndpoint而非字符串形式的区域名称,并显式指定签名版本为SigV4,确保签名计算逻辑与Wasabi兼容:

AmazonS3Client client = new AmazonS3Client(
      "access",
      "secret",
      new AmazonS3Config
      {
           RegionEndpoint = RegionEndpoint.USEast1,
           ServiceURL = "https://s3.wasabisys.com",
           ForcePathStyle = true,
           RetryMode = RequestRetryMode.Standard,
           MaxErrorRetry = 3,
           SignatureVersion = SignatureVersion.SigV4
       });

2. 使用Wasabi对应区域的专属端点

尝试将ServiceURL替换为Wasabi US East 1区域的专属端点https://s3.us-east-1.wasabisys.com,部分场景下区域专属端点能避免签名计算时的区域歧义:

ServiceURL = "https://s3.us-east-1.wasabisys.com"

3. 验证凭证与Bucket权限

确认你的Access Key和Secret Key未过期,且拥有目标Bucket的s3:PutObject权限。虽然旧版本可用,但新版本SDK可能对权限校验的细节更严格。

4. 禁用签名的额外头包含(可选)

如果上述方法无效,尝试限制签名包含的请求头,避免Wasabi不支持的头被纳入签名计算:

new AmazonS3Config
{
    // 其他配置...
    SigningAlgorithm = SigningAlgorithm.HmacSHA256,
    // 显式指定需要签名的头,仅保留必要项
    SignedHeaders = new HashSet<string> { "host", "content-type" }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 04:34:59