AwsCredentialsProvider认证接口

一、介绍

1、简介

AwsCredentialsProvider 是 AWS SDK 中用于提供 AWS 身份验证凭证的一个接口。AWS SDK 中涉及身份验证和授权的操作都需要用到凭证,而 AwsCredentialsProvider 作为一种抽象,负责提供这些凭证。AwsCredentialsProvider 在 Java SDK 中尤为重要,它可以用于各种场景,比如访问 AWS 服务、执行 AWS CLI 命令、部署到 AWS 上等。

2、作用

AwsCredentialsProvider 是 AWS SDK 中的一个接口,用于提供 AwsCredentials(AWS 凭证),AwsCredentials 通常包含 AWS 的访问密钥 ID 和秘密访问密钥,可能还包括会话令牌(用于临时凭证)。

在 SDK 中使用凭证时,AwsCredentialsProvider 作为一个工厂接口负责提供合适的凭证。

3、好处

(1)灵活性:可以根据不同的运行环境自动选择不同的凭证提供方式,如在开发机器上使用本地文件,在 EC2 上使用实例元数据。

(2)安全性:通过使用 IAM 角色和 STS,临时凭证可以为应用程序提供更高的安全性,避免硬编码访问密钥。

(3)简化配置:AWS SDK 提供了多种方式来加载凭证,开发人员可以专注于业务逻辑,而无需关注如何管理凭证。

二、常见实现

AWS SDK 提供了一些常见的 AwsCredentialsProvider 实现方式,根据不同的场景自动选择合适的凭证提供方式:

1、DefaultCredentialsProvider

DefaultCredentialsProvider 是最常见的凭证提供器,它会按照以下顺序查找凭证:

  • 环境变量:首先检查环境变量 AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY,如果存在,使用这些凭证。
  • 系统属性:然后检查系统属性 aws.accessKeyIdaws.secretKey,如果存在,使用这些凭证。
  • 默认配置文件:检查默认的配置文件(~/.aws/credentials)中的凭证。
  • EC2 实例元数据服务:如果以上方式都没有找到凭证,DefaultCredentialsProvider 会尝试从 EC2 实例元数据中获取临时凭证(适用于 EC2 实例)。
  • ECS 环境:在 ECS 上运行时,它会尝试从 ECS 环境的凭证提供者中获取凭证。
2、ProfileCredentialsProvider

ProfileCredentialsProvider 从配置文件中的指定配置文件读取凭证。默认读取 ~/.aws/credentials 文件中的配置,支持多个配置文件和配置文件名称。

复制代码
ProfileCredentialsProvider provider = new ProfileCredentialsProvider("my-profile");
AwsCredentials credentials = provider.resolveCredentials();

在实际开发中,AWS SDK 可以自动使用默认的 AwsCredentialsProvider,也可以手动配置。

例如,当你创建 AWS 服务客户端时,你可以传入一个自定义的凭证提供器:

复制代码
S3Client s3 = S3Client.builder()
    .credentialsProvider(ProfileCredentialsProvider.create())
    .region(Region.US_WEST_2)
    .build();
3、EnvironmentVariableCredentialsProvider

此提供器从环境变量中读取 AWS 凭证。可以通过设置环境变量 AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, 和 AWS_SESSION_TOKEN 来提供凭证。

复制代码
AwsCredentialsProvider provider = EnvironmentVariableCredentialsProvider.create();
AwsCredentials credentials = provider.resolveCredentials();
4、SystemPropertyCredentialsProvider

此提供器从 JVM 系统属性中读取凭证。可以通过设置系统属性 aws.accessKeyIdaws.secretKey 来提供凭证。

复制代码
AwsCredentialsProvider provider = SystemPropertyCredentialsProvider.create();
AwsCredentials credentials = provider.resolveCredentials();
5、EC2InstanceMetadataCredentialsProvider

此提供器专为 EC2 实例设计,它可以从 EC2 元数据服务中自动检索临时凭证。

复制代码
AwsCredentialsProvider provider = EC2InstanceMetadataCredentialsProvider.create();
AwsCredentials credentials = provider.resolveCredentials();
6、STSAssumeRoleCredentialsProvider

如果你需要使用 AWS STS(Security Token Service)来假设一个角色,这个提供器非常有用。它会通过 STS 假设角色,并返回相应的临时凭证。

复制代码
STSAssumeRoleCredentialsProvider assumeRoleProvider = 
    STSAssumeRoleCredentialsProvider.builder()
        .stsClient(stsClient)
        .roleArn("arn:aws:iam::123456789012:role/my-role")
        .build();
AwsCredentials credentials = assumeRoleProvider.resolveCredentials();
相关推荐
可观测性用观测云2 天前
Lambda NodeJS 运行时链路接入观测云
aws
我先去打把游戏先3 天前
TCP、TLS、HTTP、HTTPS、MQTT、MQTTS几种网络协议的对比与解释
嵌入式硬件·mcu·物联网·网络协议·tcp/ip·http·aws
China_Yanhy3 天前
AWS EC2 挂载新网卡不通?从网卡启动到策略路由的完整排查指南
网络·云计算·aws
在云上(oncloudai)4 天前
Amazon EFS 全面解析
aws·亚马逊云科技
卖芒果的潇洒农民4 天前
AWS EC2
云计算·aws
在云上(oncloudai)9 天前
AWS 成本异常检测(AWS Cost Anomaly Detection)全解析
aws·亚马逊云科技
bluetata9 天前
Spring AI 使用 AWS Amazon Nova 模型
人工智能·spring·aws
翼龙云_cloud9 天前
亚马逊云渠道商:如何解决AWS EC2搭建的网站无法访问?
运维·云计算·aws
EMQX10 天前
大规模使用 AWS IoT Core 的成本困境:EMQX 如何削减 80% 开支
物联网·mqtt·云计算·aws
weixin_3077791310 天前
通过AWS Transfer Family集成Active Directory实现安全SFTP文件访问
安全·云计算·aws