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();
相关推荐
freephp2 天前
AWS学习笔记之Lambda执行权限引发的思考
aws·lambda
可观测性用观测云2 天前
AWS ELB 可观测性最佳实践
aws
forrestzhaoc2 天前
跟AI聊了下GCP、AWS和CF全球故障
云计算·aws
AWS官方合作商3 天前
基于AWS无服务器架构的区块链API集成:零基础设施运维实践
架构·serverless·web3·区块链·aws
qq_390369533 天前
AWS之混合云
云计算·aws
亚林瓜子3 天前
AWS Lambda Python + AWS Secrets Manager + AWS Aurora Mysql
python·mysql·aws·lambda·aurora·vpc·secrets
Clownseven4 天前
Terraform跨云迁移教程:从AWS到阿里云基础设施同步 (2025)
阿里云·aws·terraform
Music 爱好者4 天前
aws s3 sdk c++使用指南、适配阿里云oss和aws
c++·阿里云·aws
国际云,接待4 天前
AWS S3:云存储的“超级基石”
服务器·网络·人工智能·github·aws·亚马逊
qq_390369534 天前
AWS Well-Architected Framework详解
云计算·aws