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 元数据服务(通常无需额外配置)。
相关推荐
const_qiu3 分钟前
第三章 08:3.10 本章小结
java·人工智能
Pniubi4 分钟前
快速排序(力扣基础)(递归)
java·数据结构·算法
CarIise21 分钟前
Spring MVC 请求参数绑定与常用注解2
java·spring·mvc
七夜zippoe28 分钟前
Spring Boot 接通义千问:从拿 Key 到第一个对话接口跑通(保姆级)
java·spring boot·后端
SimonKing30 分钟前
别再花钱调 OCR 接口了!这个国产开源工具,免费还能离线跑
java·后端·程序员
Nebula_g30 分钟前
SpringBoot企业级实战项目—云禾外卖—SpringBoot常用注解解析
java·网络·数据库·spring boot·后端·spring·javase
const_qiu31 分钟前
第三章 07:3.9 能力收束与统一入口
java·人工智能
const_qiu35 分钟前
第三章 05:3.7 结构化输出与程序化消费
java·人工智能
企业数字化笔记1 小时前
租户停用后数据和任务怎么处理?冻结、恢复与保留策略的实现
android·java·spring boot
CarIise1 小时前
Spring MVC 请求参数绑定与常用注解
java·spring·mvc