使用AWS SDK for Java通过ARN用户/角色实现DynamoDB认证
基于ARN角色修改DynamoDB Java SDK认证配置
根据你的需求,将硬编码的accessKey/secretKey认证改为IAM角色(ARN)认证,分两种常见场景处理:
场景1:运行在AWS托管服务(EC2/ECS/EKS等)
直接利用AWS服务的实例角色/任务角色,SDK会自动从环境中获取临时凭证,无需手动指定ARN:
修改后的配置类
@Configuration @EnableDynamoDBRepositories(basePackages = "mypackage.repository") public class DynamoDBConfiguration { @Bean public AmazonDynamoDB amazonDynamoDB(@Value("${aws.dynamoDBUrl}") String dynamoDBUrl){ AmazonDynamoDBClientBuilder builder = AmazonDynamoDBClientBuilder.standard() .withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration(dynamoDBUrl, "sa-east-1")) .withCredentials(DefaultAWSCredentialsProviderChain.getInstance()); return builder.build(); } }
注意事项
- 给你的EC2实例/ECS任务/EKS Pod关联具备DynamoDB操作权限的IAM角色
- 删除原有的
awsCredentialsBean以及aws.accessKey、aws.secretKey配置项
场景2:本地开发/非AWS环境运行
需要通过STS服务假定指定ARN的IAM角色,获取临时凭证进行认证:
修改后的配置类
@Configuration @EnableDynamoDBRepositories(basePackages = "mypackage.repository") public class DynamoDBConfiguration { @Value("${aws.iamRoleArn}") private String iamRoleArn; @Value("${aws.dynamoDBUrl}") private String dynamoDBUrl; // 若公司要求外部ID,可添加此配置 // @Value("${aws.externalId}") // private String externalId; @Bean public AmazonDynamoDB amazonDynamoDB() { // 初始化STS客户端(可通过默认凭证链获取基础认证,比如本地环境的AWS配置文件) AWSSecurityTokenService stsClient = AWSSecurityTokenServiceClientBuilder.standard() .withRegion("sa-east-1") .withCredentials(DefaultAWSCredentialsProviderChain.getInstance()) .build(); // 构建假定角色请求,自动处理凭证刷新 STSAssumeRoleSessionCredentialsProvider credentialsProvider = new STSAssumeRoleSessionCredentialsProvider.Builder( iamRoleArn, "dynamodb-operation-session" // 自定义会话名称 ) .withStsClient(stsClient) // .withExternalId(externalId) // 有外部ID则启用 .build(); return AmazonDynamoDBClientBuilder.standard() .withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration(dynamoDBUrl, "sa-east-1")) .withCredentials(credentialsProvider) .build(); } }
注意事项
- 权限配置:用来假定角色的实体(如本地配置的IAM用户)需要具备
sts:AssumeRole权限,且目标角色的信任策略要允许该实体访问 - 凭证自动刷新:
STSAssumeRoleSessionCredentialsProvider会自动处理临时凭证的过期刷新(默认1小时有效期) - 添加新配置项
aws.iamRoleArn,删除原有的aws.accessKey、aws.secretKey配置
内容的提问来源于stack exchange,提问作者Italo Vieira
相关产品推荐
相关产品推荐

