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

使用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角色
  • 删除原有的awsCredentials Bean以及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();
    }
}

注意事项

  1. 权限配置:用来假定角色的实体(如本地配置的IAM用户)需要具备sts:AssumeRole权限,且目标角色的信任策略要允许该实体访问
  2. 凭证自动刷新:STSAssumeRoleSessionCredentialsProvider会自动处理临时凭证的过期刷新(默认1小时有效期)
  3. 添加新配置项aws.iamRoleArn,删除原有的aws.accessKey、aws.secretKey配置

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 23:43:24