Java 在AWS上使用SDK凭证获取顺序

在AWS 环境上凭证获取

我们平常在AWS云上会部署Java服务,其中会使用Java服务操作AWS 资源,其中会涉及到Java使用AWS 凭证操作AWS资源,AWS默认提供了一系列的方式来获取AWS 凭证,下面是获取的一些顺序。

DefaultCredentialsProvider 是什么

DefaultCredentialsProvider 是 AWS SDK for Java 提供的一个默认凭证提供链(Default Credential Provider Chain)。它的作用是为应用程序自动检索 AWS 凭证,而无需手动指定凭证。这种机制使得应用程序能够在不同环境下(如本地开发环境、EC2 实例、ECS 任务等)无缝切换。

DefaultCredentialsProvider 的凭证查找顺序

DefaultCredentialsProvider 按以下优先级顺序查找 AWS 凭证:

  1. 环境变量

    • 检查以下环境变量是否存在:
      • AWS_ACCESS_KEY_ID 和 AWS_SECRET_ACCESS_KEY
      • (可选)AWS_SESSION_TOKEN(如果使用临时凭证)
    • 如果环境变量中存在这些凭证,则直接使用。
  2. Java 系统属性

    • 检查以下 Java 系统属性:

      • aws.accessKeyId 和 aws.secretKey
      • (可选)aws.sessionToken
    • 这些属性可以通过 JVM 参数设置,例如:

      java -Daws.accessKeyId=yourAccessKeyId -Daws.secretKey=yourSecretKey YourApp

  3. 默认配置文件

    • 检查本地 AWS 配置文件(~/.aws/credentials 和 ~/.aws/config)。
    • 默认使用 default 配置文件中的凭证。
    • 示例文件内容:
    • [default] aws_access_key_id = yourAccessKeyId aws_secret_access_key = yourSecretKey
  4. ECS 容器凭证

如果应用运行在 ECS 容器中,DefaultCredentialsProvider 会从 ECS 容器元数据服务(169.254.170.2)中获取临时凭证。

这需要在 ECS 任务中配置 IAM 角色。

  1. EC2 实例元数据服务

​ 如果应用运行在 EC2 实例中,DefaultCredentialsProvider 会尝试从实例元数据服务(169.254.169.254)中获取临时凭证。这需要为 EC2 实例配置 IAM 角色。

  1. 自定义凭证提供链

​ 如果以上来源都没有找到凭证,可以使用自定义的凭证提供器。

使用 AWS SDK 自动获取临时凭证

java 复制代码
import software.amazon.awssdk.auth.credentials.AwsCredentials;
import software.amazon.awssdk.auth.credentials.DefaultCredentialsProvider;

public class DebugCredentials {
    public static void main(String[] args) {
        // 使用 DefaultCredentialsProvider
        DefaultCredentialsProvider provider = DefaultCredentialsProvider.create();

        // 获取当前凭证
        AwsCredentials credentials = provider.resolveCredentials();

        // 打印凭证信息
        System.out.println("Access Key: " + credentials.accessKeyId());
        System.out.println("Secret Key: " + credentials.secretAccessKey());
        // 检查是否包含 Session Token(临时凭证)
        if (credentials instanceof AwsSessionCredentials) {
            AwsSessionCredentials sessionCredentials = (AwsSessionCredentials) credentials;
            System.out.println("Session Token: " + sessionCredentials.sessionToken());
        } else {
            System.out.println("No Session Token available.");
        }
    }
}

注意事项

  1. 临时凭证的有效期 :
    • ECS 提供的临时凭证通常有效期为 6 小时。
    • AWS SDK 会自动刷新临时凭证,无需手动处理。
  2. 权限范围 :
    • 确保 IAM 角色的权限策略足够精确,只授予应用程序需要的最小权限。
  3. 网络配置 :
    • 确保 ECS 容器可以访问 169.254.170.2 元数据服务(通常无需额外配置)。
相关推荐
这个昵称不容易4 分钟前
SpringBoot 美容院管理系统:232个Java文件315个接口,5套角色从预约到发货一整条链路
java·springboot·毕设
装不满的克莱因瓶1 小时前
【SpringAI Alibaba】ReactAgent记忆管理MessageTrimmingHook与MessageDeletionHook
java·人工智能·ai·ai编程·springai·springaialibaba
文丑颜不良啊1 小时前
LeetCode2241~2260题目解析
java·leetcode
文丑颜不良啊1 小时前
LeetCode2321~2340题目解析
java·leetcode
驭渊的小故事2 小时前
Spring AOP 核心概念与通知类型详解
java·后端·spring
vipxieliang2 小时前
ValidX vs 手写验证代码:开发效率对比实测
java·spring boot·后端
vipxieliang2 小时前
虚拟线程与 GraalVM:Spring Boot 3.x 云原生性能跃迁
java·spring boot·后端
Rain的Java大神之路2 小时前
面试官最烦的答案:“我用 Redis + Token”!接口幂等 8 种方案 + 四层防御,把重复扣款工单干到 0
java·后端·面试
Rainmicro3 小时前
【无标题】
java·数据库·算法
驭渊的小故事3 小时前
Spring AOP 入门:从 AOP 概念到第一个耗时统计切面
java·后端·spring