如何使用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
相关产品推荐
相关产品推荐

