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

本地Minio集成putObject请求授权失败,提示需使用AWS4-HMAC-SHA256

解决Minio与AWS Java SDK集成的认证错误问题

问题核心

使用AWS Java SDK连接本地Minio时,收到错误:The authorization mechanism you have provided is not supported. Please use AWS4-HMAC-SHA256.,尽管日志显示SDK已使用AWS4-HMAC-SHA256签名算法。

解决方案

1. 启用路径风格访问

Minio默认使用路径风格的存储桶访问方式,而AWS SDK默认采用虚拟主机风格,这会导致签名验证失败。必须在AmazonS3客户端配置中添加路径风格启用项。

2. 修正凭证加载逻辑

AWS SDK的EnvironmentVariableCredentialsProvider默认读取AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY环境变量,你当前使用的AWS_ACCESS_KEY和AWS_SECRET_KEY不会被正确加载,导致匿名访问触发认证错误,提供两种解决方式:

方法一:修改环境变量名称

将运行参数中的环境变量调整为SDK默认识别的名称:

<option name="ACTIVE_PROFILES" value="local" />
<envs>
  <env name="AWS_ACCESS_KEY_ID" value="你的Minio Access Key" />
  <env name="AWS_SECRET_ACCESS_KEY" value="你的Minio Secret Key" />
  <env name="SMTP_PASSWORD" value="test" />
</envs>

对应修改客户端配置,添加路径风格启用:

@Bean
AmazonS3 amazonS3() {
    var credentialsProviderChain = new AWSCredentialsProviderChain(new EnvironmentVariableCredentialsProvider());
    return AmazonS3ClientBuilder.standard()
            .withCredentials(credentialsProviderChain)
            .withEndpointConfiguration(new EndpointConfiguration(s3Url, "eu-central-1"))
            .withPathStyleAccessEnabled(true) // 关键配置:启用路径风格访问
            .build();
}

方法二:自定义凭证提供者(保留原有环境变量名)

如果不想修改环境变量名称,可自定义凭证提供者读取你设置的变量:

@Bean
AmazonS3 amazonS3() {
    AWSCredentialsProvider credentialsProvider = () -> {
        String accessKey = System.getenv("AWS_ACCESS_KEY");
        String secretKey = System.getenv("AWS_SECRET_KEY");
        if (accessKey == null || secretKey == null) {
            throw new AmazonClientException("未找到凭证环境变量AWS_ACCESS_KEY和AWS_SECRET_KEY");
        }
        return new BasicAWSCredentials(accessKey, secretKey);
    };

    return AmazonS3ClientBuilder.standard()
            .withCredentials(credentialsProvider)
            .withEndpointConfiguration(new EndpointConfiguration(s3Url, "eu-central-1"))
            .withPathStyleAccessEnabled(true)
            .build();
}

原因说明

  1. 访问风格不匹配:Minio默认使用http://<minio-endpoint>/<bucket>/<object>的路径风格,而AWS SDK默认用http://<bucket>.<minio-endpoint>/<object>的虚拟主机风格,两者的签名计算逻辑不同,导致Minio无法验证签名,触发认证错误。
  2. 凭证未正确加载:环境变量名称不匹配导致SDK无法获取有效凭证,尝试匿名访问,而Minio不支持匿名访问使用的旧认证机制,因此报错要求使用AWS4-HMAC-SHA256。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 06:05:57