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

特定Mac设备上AWS SDK for Java v2(S3)连接异常求助

特定Mac设备上AWS SDK for Java v2操作S3异常排查求助

在一台Mac设备上使用AWS SDK for Java v2调用S3的listObjectsV2接口时触发400错误,但相同代码在其他Mac及Ubuntu设备上可正常运行。该问题设备上AWS SDK v1和AWS CLI均能正常操作S3,排除凭证、桶名、区域等基础配置错误。

代码片段

String accessKeyId = “<my-access-key>;
String secretAccessKey = "<my-secret-access-key>"; 

String bucketName = "activate-datafeed";
String prefix = "work_area/";

// Create AWS credentials
AwsBasicCredentials awsCredentials = AwsBasicCredentials.create(accessKeyId, secretAccessKey);

// Create the S3 client
S3Client s3 = S3Client.builder()
    .region(Region.US_EAST_1) // Replace with your bucket's region
    .credentialsProvider(StaticCredentialsProvider.create(awsCredentials))
    .build();

try {
    // List objects in the specified bucket and prefix
    ListObjectsV2Request listObjectsReqManual = ListObjectsV2Request.builder()
        .bucket(bucketName)
        .prefix(prefix)
        .build();

    ListObjectsV2Response listObjResponse = s3.listObjectsV2(listObjectsReqManual);
    // Process response...
} catch (S3Exception e) {
    e.printStackTrace();
}

Maven依赖配置

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>software.amazon.awssdk</groupId>
            <artifactId>bom</artifactId>
            <version>2.26.14</version> <!-- Use the latest stable version -->
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

<dependencies>
    <dependency>
        <groupId>software.amazon.awssdk</groupId>
        <artifactId>s3</artifactId>
    </dependency>
</dependencies>

错误堆栈信息

software.amazon.awssdk.services.s3.model.S3Exception: null (Service: S3, Status Code: 400, Request ID: null) 
at software.amazon.awssdk.protocols.xml.internal.unmarshall.AwsXmlPredicatedResponseHandler.handleErrorResponse(...) 
... 
at    software.amazon.awssdk.core.internal.http.AmazonSyncHttpClient$RequestExecutionBuilderImpl.execute(...) 
at software.amazon.awssdk.core.internal.handler.BaseSyncClientHandler.invoke(...) 
at software.amazon.awssdk.services.s3.DefaultS3Client.listObjectsV2(DefaultS3Client.java:6430) 
at com.example.s3.S3ListObjects.main(S3ListObjects.java:39)

已尝试排查步骤

  • 相同代码在其他设备运行正常,确认问题为该Mac特有
  • 验证该Mac上AWS SDK v1及AWS CLI可正常操作S3
  • 确认区域、存储桶名称、凭证信息均正确

排查思路与解决建议

  1. 检查Java版本兼容性:AWS SDK v2对Java版本有要求(通常需要Java 8及以上,部分版本要求Java 11+),对比问题Mac与正常设备的Java版本,尝试切换到同版本Java运行代码。
  2. 排查网络代理/防火墙配置:SDK v2的HTTP客户端实现(默认是UrlConnectionHttpClient)可能与v1、CLI使用的代理配置逻辑不同。检查系统代理设置,尝试在代码中显式禁用代理:
S3Client s3 = S3Client.builder()
    .region(Region.US_EAST_1)
    .credentialsProvider(StaticCredentialsProvider.create(awsCredentials))
    .httpClientBuilder(UrlConnectionHttpClient.builder().proxyConfiguration(ProxyConfiguration.builder().useSystemPropertyValues(false).build()))
    .build();
  1. 验证系统SSL证书:SDK v2依赖系统信任的SSL证书,若问题Mac的证书存储有异常,可能导致请求失败。尝试导出正常设备的信任证书导入问题Mac,或在代码中指定自定义信任存储。
  2. 检查环境变量冲突:排查是否存在AWS相关环境变量(如AWS_PROXY_HOST、AWS_CA_BUNDLE)在问题Mac上配置异常,这些变量可能仅影响SDK v2的行为。
  3. 切换SDK HTTP客户端:AWS SDK v2支持多种HTTP客户端(如ApacheHttpClient、NettyNioAsyncHttpClient),尝试切换到其他客户端实现,看是否解决问题:
<!-- 添加Apache HttpClient依赖 -->
<dependency>
    <groupId>software.amazon.awssdk</groupId>
    <artifactId>apache-client</artifactId>
</dependency>
// 使用ApacheHttpClient构建S3客户端
S3Client s3 = S3Client.builder()
    .region(Region.US_EAST_1)
    .credentialsProvider(StaticCredentialsProvider.create(awsCredentials))
    .httpClient(ApacheHttpClient.create())
    .build();
  1. 启用SDK详细日志:开启SDK的DEBUG级别日志,查看请求的具体参数、签名信息和响应详情,定位400错误的具体原因:
<!-- 在logback.xml或log4j配置中添加 -->
<logger name="software.amazon.awssdk" level="DEBUG"/>
<logger name="software.amazon.awssdk.request" level="DEBUG"/>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 15:22:39