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

升级S3 Java依赖后向Ceph Bucket上传文件出现403 S3Exception

解决升级AWS S3 SDK v2后Ceph Bucket上传403的问题

核心原因

AWS SDK v2与v1在请求构造、默认配置上存在差异,结合Ceph S3的特性,触发403的常见原因包括:

  • 默认启用虚拟主机样式访问,但Ceph集群未配置Bucket对应的DNS解析
  • 请求签名或编码逻辑与Ceph兼容不匹配
  • Spring Boot 3.x对AWS SDK v2的自动配置参数发生变更

解决方案

1. 强制启用路径样式访问

Ceph S3大多依赖路径样式访问(http://<endpoint>/<bucket>),而AWS SDK v2默认使用虚拟主机样式(http://<bucket>.<endpoint>),需显式开启路径样式:

代码配置方式

import software.amazon.awssdk.services.s3.S3Client;
import software.amazon.awssdk.services.s3.S3Configuration;

public S3Client s3Client() {
    S3Configuration s3Config = S3Configuration.builder()
            .pathStyleAccessEnabled(true) // 关键配置:启用路径样式
            .build();

    return S3Client.builder()
            .serviceConfiguration(s3Config)
            .endpointOverride(URI.create("你的Ceph端点地址"))
            .credentialsProvider(你的凭证提供者)
            .build();
}

Spring Boot自动配置方式

在application.yml中添加:

spring:
  cloud:
    aws:
      s3:
        path-style-access: true
      region:
        static: us-east-1 # Ceph通用默认区域,可根据集群配置调整
      endpoint: 你的Ceph端点地址

2. 锁定签名算法版本

确保SDK使用Ceph支持的SignatureV4签名算法,可显式指定:

import software.amazon.awssdk.auth.signer.Aws4Signer;
import software.amazon.awssdk.core.client.config.ClientOverrideConfiguration;

ClientOverrideConfiguration overrideConfig = ClientOverrideConfiguration.builder()
        .signer(Aws4Signer.create())
        .build();

return S3Client.builder()
        .overrideConfiguration(overrideConfig)
        // 其他配置项
        .build();

3. 调整请求编码逻辑

AWS SDK v2默认的双重编码、分块编码可能与部分Ceph集群不兼容,可尝试禁用:

S3Configuration s3Config = S3Configuration.builder()
        .disableChunkedEncoding(true)
        .build();

4. 核对Spring Boot配置参数

Spring Boot 3.x对AWS SDK v2的自动配置参数前缀有变化,需确保配置项正确:

  • 原v1的aws.s3.endpoint对应v2的spring.cloud.aws.s3.endpoint(使用spring-cloud-aws-starter时)
  • 验证access key、secret key配置无误,可通过@Value注入后打印确认

验证步骤

  1. 保留listBuckets()测试确认基础连接正常(你已能获取Bucket名称,此步骤可快速验证客户端配置有效性)
  2. 启用路径样式后,尝试上传小文件测试
  3. 查看Ceph集群日志,确认403的具体触发原因(如签名不匹配、路径格式错误)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 14:47:10