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

如何使用Java V2 SDK获取EC2实例附加IAM角色的凭证?

AWS SDK V2 获取EC2实例IAM角色临时凭证的等效实现

在AWS SDK V2中,不再使用V1里的EC2MetadataUtils静态工具类,而是通过以下两种方式实现相同需求:

1. 推荐:使用默认凭证提供者链(无需手动处理凭证)

SDK V2的默认凭证链会自动从EC2实例元数据中获取关联IAM角色的临时凭证,大部分业务场景下无需手动调用元数据接口,直接创建AWS服务客户端即可自动使用凭证:

// 示例:创建S3客户端,自动获取实例角色凭证
S3Client s3Client = S3Client.create();

2. 手动获取凭证详情(使用Ec2InstanceMetadataClient)

如果需要主动获取凭证的具体信息(如密钥、过期时间等),可以使用专门的Ec2InstanceMetadataClient:

第一步:添加依赖(Maven示例)

<dependency>
    <groupId>software.amazon.awssdk</groupId>
    <artifactId>ec2-instance-metadata</artifactId>
    <version>请替换为SDK V2最新版本</version>
</dependency>

第二步:代码实现

import software.amazon.awssdk.services.ec2instancemetadata.Ec2InstanceMetadataClient;
import software.amazon.awssdk.services.ec2instancemetadata.model.GetIamRoleCredentialsRequest;
import software.amazon.awssdk.services.ec2instancemetadata.model.GetIamRoleCredentialsResponse;
import software.amazon.awssdk.services.ec2instancemetadata.model.IamRole;
import java.util.List;

public class InstanceCredsExample {
    public static void main(String[] args) {
        try (Ec2InstanceMetadataClient metadataClient = Ec2InstanceMetadataClient.create()) {
            // 获取实例关联的所有IAM角色
            List<IamRole> roles = metadataClient.listIamRoles().roles();
            
            for (IamRole role : roles) {
                // 获取指定角色的临时凭证
                GetIamRoleCredentialsResponse credsResp = metadataClient.getIamRoleCredentials(
                    GetIamRoleCredentialsRequest.builder()
                        .roleName(role.roleName())
                        .build()
                );
                
                // 提取凭证字段
                String accessKey = credsResp.credentials().accessKeyId();
                String secretKey = credsResp.credentials().secretAccessKey();
                String sessionToken = credsResp.credentials().token();
                
                System.out.printf("角色:%s,AccessKey:%s,过期时间:%s%n",
                    role.roleName(), accessKey, credsResp.credentials().expiration());
            }
        }
    }
}

说明

  • SDK V2采用客户端模式替代V1的静态工具类,Ec2InstanceMetadataClient提供了更规范的元数据访问方式。
  • 默认凭证链会自动处理凭证的刷新逻辑,优先推荐在业务代码中使用这种方式,减少手动维护凭证的复杂度。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 17:18:25