本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
中的默认凭证提供者链 Amazon SDK for Java 2.x
中的默认凭证提供程序链 Amazon SDK for Java 2.x 会自动在预定义的位置序列中搜索 Amazon 凭据,从而允许应用程序在 Amazon Web Services 服务 不明确指定凭据来源的情况下进行身份验证。
默认凭证提供程序链由该DefaultCredentialsProvider
要使用默认凭证提供程序链来提供临时证书,请创建服务客户端生成器,但不要指定凭证提供程序。以下代码段创建了一个DynamoDbClient
使用默认凭证提供程序链来查找和检索配置设置的。
// Any external Region configuration is overridden. // The SDK uses the default credentials provider chain because no specific credentials provider is specified. Region region = Region.US_WEST_2; DynamoDbClient ddb = DynamoDbClient.builder() .region(region) .build();
凭证设置检索顺序
适用于 Java 的 SDK 2.x 的默认凭证提供程序链使用预定义的顺序在您的环境中搜索配置。
-
Java 系统属性
-
软件开发工具包使用SystemPropertyCredentialsProvider
类从 aws.accessKeyId
aws.secretAccessKey
、和aws.sessionToken
Java 系统属性加载临时证书。注意
有关如何设置 Java 系统属性的信息,请参阅官方 Java Tutorials 网站中的 System Properties
教程。
-
-
环境变量
-
SDK 使用EnvironmentVariableCredentialsProvider
类从 AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY
、和AWS_SESSION_TOKEN
环境变量加载临时证书。
-
-
网络身份令牌和 IAM 角色 ARN
-
SDK 使用该WebIdentityTokenFileCredentialsProvider
类通过使用 Web 身份令牌扮演角色来加载凭证。 -
凭据提供程序会查找以下环境变量或 JVM 系统属性:
-
AWS_WEB_IDENTITY_TOKEN_FILE or
aws.webIdentityTokenFile
-
AWS_ROLE_ARN
或aws.roleArn
-
AWS_ROLE_SESSION_NAME
或aws.roleSessionName
(可选)
-
-
SDK 获取值后,它会调用 Amazon Security Token Service (STS) 并使用返回的临时证书对请求进行签名。
-
诸如 Amazon Elastic Kubernetes Service (EKS) 之类的运行环境会自动 Amazon SDKs向其提供网络身份令牌,从而使应用程序能够获得临时证书。 Amazon
-
-
共享的
credentials
和config
文件-
软件开发工具包使用从共享
credentials
和文件中的[default]
配置config
文件中加载 IAM Identity Center 单点登录设置或临时证书。ProfileCredentialsProvider《 Amazon SDKs 和工具参考指南》详细介绍了适用于 Java 的 SDK 如何与 IAM Identity Center 单点登录令牌配合使用,以获取开发工具包用来调用的 Amazon Web Services 服务临时证书。
注意
credentials
和config
文件由各种 Amazon SDKs 和工具共享。有关更多信息,请参阅。 aws/credentials and .aws/config Amazon SDKs 和《工具参考指南》中的文件。 -
由于共享
credentials
和config
文件中的配置文件可能包含许多不同的设置集,因此ProfileCredentialsProvider
委托给一系列其他提供商在[default]
配置文件下查找设置:-
基本凭证(类别
StaticCredentialsProvider
):当配置文件包含aws_access_key_id
和时aws_secret_access_key
。 -
会话凭证(类别
StaticSessionCredentialsProvider
):当配置文件包含aws_access_key_id
aws_secret_access_key
、和时aws_session_token
。 -
流程凭证(类别
ProcessCredentialsProvider
):当配置文件包含时credential_process
。 -
SSO 凭证(类别
SsoCredentialsProvider
):当配置文件包含与 SSO 相关的属性时,例如。sso_role_name
sso_account_id
-
Web 身份令牌凭证(类别
WebIdentityTokenCredentialsProvider
):当配置文件包含role_arn
和时web_identity_token_file
。 -
带有来源配置文件(类别
StsAssumeRoleCredentialsProvider
)的基于角色的凭证:当配置文件包含role_arn
和source_profile
时。 -
带有凭据来源的基于角色的凭证(类别
StsAssumeRoleWithSourceCredentialsProvider
):当配置文件包含role_arn
和时。credential_source
-
时间
credential_source = Environment
:它使用的是SystemPropertyCredentialsProvider
和链EnvironmentVariableCredentialsProvider
-
什么时候
credential_source = Ec2InstanceMetadata
:它使用InstanceProfileCredentialsProvider
-
什么时候
credential_source = EcsContainer
:它使用ContainerCredentialsProvider
-
-
-
-
Amazon ECS 容器凭证
-
SDK 使用ContainerCredentialsProvider
类通过以下环境变量加载临时证书: -
AWS_CONTAINER_CREDENTIALS_RELATIVE_URI
或AWS_CONTAINER_CREDENTIALS_FULL_URI
-
AWS_CONTAINER_AUTHORIZATION_TOKEN_FILE
或AWS_CONTAINER_AUTHORIZATION_TOKEN
-
ECS 容器代理会自动设置
AWS_CONTAINER_CREDENTIALS_RELATIVE_URI
环境变量,该变量指向 ECS 凭据端点。其他环境变量通常是在不使用标准 ECS 凭据端点的特定场景中设置的。 -
-
Amazon EC2 实例 IAM 角色提供的证书
-
SDK 使用InstanceProfileCredentialsProvider
类从 Amazon EC2 元数据服务加载临时证书。
-
-
如果 SDK 无法通过上面列出的所有步骤找到必要的配置设置,则会抛出异常,输出类似于以下内容:
software.amazon.awssdk.core.exception.SdkClientException: Unable to load credentials from any of the providers in the chain AwsCredentialsProviderChain(credentialsProviders=[SystemPropertyCredentialsProvider(), EnvironmentVariableCredentialsProvider(), WebIdentityTokenCredentialsProvider(), ProfileCredentialsProvider(), ContainerCredentialsProvider(), InstanceProfileCredentialsProvider()])
使用输入DefaultCredentialsProvider
代码
你可以在代码中明确使用默认的凭证提供程序链。这在功能上等同于您根本不指定凭证提供商,因为 SDK DefaultCredentialsProvider
默认使用凭证提供商。但是,明确使用它可以使你的代码更具可读性和自记录性。它清楚地表明了您打算使用默认凭证链。
import software.amazon.awssdk.auth.credentials.DefaultCredentialsProvider; import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.s3.S3Client; public class ExplicitDefaultCredentialsExample { public static void main(String[] args) { // Explicitly create the DefaultCredentialsProvider. DefaultCredentialsProvider defaultCredentialsProvider = DefaultCredentialsProvider .builder().build(); // Use it with any service client. S3Client s3Client = S3Client.builder() .region(Region.US_WEST_2) .credentialsProvider(defaultCredentialsProvider) .build(); // Now you can use the client with the default credentials chain. s3Client.listBuckets(); } }
在构建默认凭证提供程序时,您可以提供更多配置:
DefaultCredentialsProvider customizedProvider = DefaultCredentialsProvider.builder() .profileName("custom-profile") // Use a specific profile if the chain gets to the `ProfileCredentialsProvider` stage. .asyncCredentialUpdateEnabled(true) // Enable async credential updates. .build();
这种方法为您提供了更多的控制权,同时还提供了默认凭证链的便利。