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

连接Lumen自建类S3存储桶时C#代码AWS密钥报错问题

解决第三方S3兼容存储连接报错"The AWS Access Key you provided does not exist in our records"

问题根源

你的代码存在两个关键问题导致报错:

  • 未指定第三方存储的自定义端点,AWS SDK默认向AWS官方服务发送请求,自然无法识别第三方的密钥
  • UploadAsync方法参数传递错误,你把存储端点当成了桶名传入

修正后的代码

以下是适配第三方S3兼容存储的调整后代码:

var jsonObject = listOfStrings;
var jsonBytes = JsonSerializer.SerializeToUtf8Bytes(jsonObject);
await using var stream = new MemoryStream(jsonBytes);

// 配置第三方S3兼容存储的核心参数
var s3Config = new AmazonS3Config
{
    // 设置客户提供的存储端点地址
    ServiceURL = _lumenServiceConfiguration.Endpoint,
    // 根据端点实际协议调整:HTTP设为true,HTTPS设为false
    UseHttp = false,
    // 启用路径风格访问(部分第三方存储强制要求此格式)
    ForcePathStyle = true,
    // 若第三方存储要求特定签名版本,可按需设置,例如签名版本2:
    // SignatureVersion = "2"
};

// 使用自定义配置初始化S3客户端
var s3Client = new AmazonS3Client(
    _lumenServiceConfiguration.KeyId,
    _lumenServiceConfiguration.KeySecret,
    s3Config);

var transferUtility = new TransferUtility(s3Client);
// 正确传递参数:流对象、目标桶名、文件名
await transferUtility.UploadAsync(stream, "目标桶名称", "file.json").ConfigureAwait(false);

关键修改说明

  • AmazonS3Config配置:通过ServiceURL指定第三方存储的实际端点,让SDK向正确的服务发送请求,而非默认的AWS官方节点
  • ForcePathStyle:多数第三方S3兼容存储不支持虚拟主机风格的桶访问(即bucket.endpoint.com),启用路径风格后会采用endpoint.com/bucket的标准格式访问
  • 参数修正:UploadAsync的第二个参数是桶名,而非端点,需替换为客户提供的实际存储桶名称

额外注意事项

  • 确认端点的协议类型(HTTP/HTTPS),对应调整UseHttp属性
  • 如果仍出现签名相关错误,可尝试切换SignatureVersion(比如改为"2"),不同第三方存储的签名规则可能存在差异
  • 确保所有配置项(密钥、桶名、端点)与Postman中使用的完全一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 18:36:24