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

IBM COS Java SDK角色ARN配置报错:STS模块依赖缺失

IBM Cloud Object Storage Java SDK 角色扮演配置问题

背景

我正在使用IBM Cloud Object Storage Java SDK(ibm-cos-java-sdk),尝试通过包含role_arn(角色扮演)的配置文件访问存储服务,但遇到了依赖和功能支持的问题。

配置信息

~/.aws/credentials
[default]
aws_access_key_id=XXX
aws_secret_access_key=YYY

[profile dev]
role_arn=arn:aws:iam::123456789012:role/demo
source_profile=default
region=us-east-1

Java代码

ProfileCredentialsProvider provider = new ProfileCredentialsProvider("dev");

AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
        .withCredentials(provider)
        .withEndpointConfiguration(
                new AmazonS3ClientBuilder.EndpointConfiguration(
                        "https://s3.us-east.cloud-object-storage.appdomain.cloud",
                        "us-east-1"))
        .build();

s3Client.listBuckets();

报错信息

Failed to list buckets: To use assume role profiles the ibm-cos-java-sdk-sts module must be on the classpath

核心疑问

  1. 在哪里可以找到ibm-cos-java-sdk-sts的Maven依赖?
  2. IBM COS Java SDK是否支持通过配置文件使用角色扮演(role_arn)?
  3. 如果不支持,使用临时凭证/角色扮演访问IBM COS的推荐方式是什么?
  4. 该报错信息是否过时,或是指向内部专属模块?

额外场景测试

场景1:配置文件定义在~/.aws/config

配置

~/.aws/config
[profile dev]
role_arn=arn:aws:iam::123456789012:role/demo
source_profile=default
region=us-east-1
~/.aws/credentials
[default]
aws_access_key_id=XXX
aws_secret_access_key=YYY

结果:SDK无法读取配置文件,报错:

dev profile could not be found

场景2:将相同配置移至~/.aws/credentials

配置

~/.aws/credentials
[default]
aws_access_key_id=XXX
aws_secret_access_key=YYY

[profile dev]
role_arn=arn:aws:iam::123456789012:role/demo
source_profile=default
region=us-east-1

结果:配置文件被识别,但报错:

To use assume role profiles the ibm-cos-java-sdk-sts module must be on the class path.

场景3:移除配置文件中的role_arn

配置

~/.aws/credentials
[default]
aws_access_key_id=XXX
aws_secret_access_key=YYY

[profile dev]
source_profile=default
region=us-east-1

结果:报错:

Unable to load credentials into profile [dev]: AWS Access Key ID is not specified.

场景4:为配置文件添加静态凭证

配置

# ~/.aws/credentials
[dev]
aws_access_key_id=XXX
aws_secret_access_key=YYY
source_profile=default
region=us-east-1

结果:执行成功。


解答

1. 关于ibm-cos-java-sdk-sts依赖

ibm-cos-java-sdk-sts并非公开的Maven中央仓库构件,该模块是IBM内部使用的组件,并未对外发布,无法通过公开渠道获取。

2. 配置文件方式的角色扮演支持

IBM COS Java SDK不支持通过AWS格式的配置文件(含role_arn和source_profile)直接实现角色扮演。SDK的ProfileCredentialsProvider仅能处理包含静态密钥的配置项,无法自动解析并执行角色切换逻辑。

3. 临时凭证/角色扮演的推荐方式

如果需要使用临时凭证访问IBM COS,推荐手动实现角色切换:

  • 调用IBM IAM的assumeRole接口,传入目标角色ARN和源凭证,获取临时访问密钥(Access Key ID、Secret Access Key、Session Token)。
  • 将临时凭证传入BasicSessionCredentials,再通过AWSStaticCredentialsProvider构建客户端:
BasicSessionCredentials tempCreds = new BasicSessionCredentials(
        "临时Access Key",
        "临时Secret Key",
        "Session Token");

AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
        .withCredentials(new AWSStaticCredentialsProvider(tempCreds))
        .withEndpointConfiguration(new AmazonS3ClientBuilder.EndpointConfiguration(
                "https://s3.us-east.cloud-object-storage.appdomain.cloud",
                "us-east-1"))
        .build();

4. 报错信息的有效性

该报错信息存在误导性,因为对应的STS模块并未对外公开。本质原因是SDK本身不支持配置文件驱动的角色扮演,却错误提示需要依赖一个不存在的公开模块。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.01 16:42:29