AWS Java SDK 1与SDK 2的ProfileCredentialsProvider差异及报错排查
两个ProfileCredentialsProvider的核心差异
- 所属SDK版本不同
com.amazonaws.auth.profile.ProfileCredentialsProvider属于AWS Java SDK 1.x旧版本software.amazon.awssdk.auth.credentials.ProfileCredentialsProvider属于AWS Java SDK 2.x重写版本,是官方新一代SDK的标准组件
- 配置读取逻辑不同
- v2版本实现会优先读取
AWS_CONFIG_FILE、AWS_SHARED_CREDENTIALS_FILE环境变量指定的配置路径,同时默认合并读取~/.aws/credentials和~/.aws/config两个文件的profile配置 - v1版本的ProfileCredentialsProvider默认仅读取
~/.aws/credentials文件中的profile配置,不会主动读取~/.aws/config文件的配置,若将default profile写在config文件中会直接识别失败
- v2版本实现会优先读取
- 构造规则不同
- v1支持直接传入profile名称构造实例
- v2强制使用Builder模式构造实例
报错原因
你遇到的No AWS profile named 'default'异常,核心是v1版本的ProfileCredentialsProvider未定位到你的default profile,常见触发场景有两类:
- default的凭证配置写在了
~/.aws/config文件中,v1默认不读取该文件的凭证信息 - 你通过环境变量指定了自定义的配置文件路径,v1原生不支持自动识别该类自定义路径,仅会读取默认路径下的credentials文件
修复方案
可选择任意一种方案解决v1的报错问题:
- 将default的凭证配置迁移到
~/.aws/credentials文件中,格式参考:
[default] aws_access_key_id = 你的访问密钥ID aws_secret_access_key = 你的秘密访问密钥
- 显式指定配置文件路径构造实例:
AmazonS3 s3Client = AmazonS3ClientBuilder.standard() // 第一个参数传入你的配置文件实际路径 .withCredentials(new ProfileCredentialsProvider("~/.aws/config", "default")) .withRegion("us-east-1") .build();
- 直接使用v1默认凭证链加载逻辑,无需显式指定ProfileCredentialsProvider,默认会自动按优先级读取环境变量、系统属性、默认路径配置文件、EC2实例角色等凭证:
AmazonS3 s3Client = AmazonS3ClientBuilder.standard() .withRegion("us-east-1") .build();
内容的提问来源于stack exchange,提问作者user3867198
相关产品推荐
相关产品推荐

