凭证提供程序 - AWS SDK for Kotlin

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

凭证提供程序

默认凭证提供程序链解析在 1.4.0 版本中更改的凭据的顺序有关详细信息,请参阅以下注释。

要使用向 Amazon Web Services 发出请求 AWS SDK for Kotlin,软件开发工具包使用由颁发的加密签名证书。 AWS要获取证书,软件开发工具包可以使用位于多个位置的配置设置,例如 JVM 系统属性、环境变量、共享 AWS configcredentials文件以及 Amazon EC2 实例元数据。

SDK 使用凭证提供程序抽象来简化从各种来源检索凭证的过程。SDK 包含多个凭据提供程序实现

例如,如果检索到的配置包括共享config文件中的 IAM Identity Center 单点登录访问权限设置,则软件开发工具包将与 IAM Identity Center 合作检索用于向其发出请求的临时证书。 AWS 服务通过这种获取证书的方法,软件开发工具包使用 IAM 身份中心提供商(也称为 SSO 凭证提供商)。本指南的设置部分描述了此配置。

要使用特定的凭据提供程序,可以在创建服务客户端时指定一个。或者,您可以使用默认凭证提供程序链自动搜索配置设置。

默认凭证提供者链

如果在客户端构造时没有明确指定,Kotlin 的 SDK 会使用凭证提供程序,该提供程序会按顺序检查每个可以提供凭据的地方。此默认凭证提供程序是作为证书提供者链实现的。

要使用默认链在应用程序中提供凭证,请在不明确提供credentialsProvider属性的情况下创建服务客户端。

val ddb = DynamoDbClient { region = "us-east-2" }

有关创建服务客户端的更多信息,请参阅构造和配置客户端

了解默认凭证提供商链

默认凭证提供程序链使用以下预定义顺序搜索凭证配置。当配置的设置提供有效的凭据时,链就会停止。

1。 AWS 访问密钥(JVM 系统属性)

SDK 会查找aws.accessKeyIdaws.secretAccessKey、和 aws.sessionToken JVM 系统属性。

2。 AWS 访问密钥(环境变量)

SDK 尝试从AWS_ACCESS_KEY_ID和和AWS_SECRET_ACCESS_KEYAWS_SESSION_TOKEN环境变量加载凭证。

3. 网络身份令牌

SDK 会查找环境变量AWS_WEB_IDENTITY_TOKEN_FILEAWS_ROLE_ARN(或 JVM 系统属性aws.webIdentityTokenFileaws.roleArn)。根据令牌信息和角色,SDK 获取临时证书。

4. 配置文件中的配置文件

在此步骤中,SDK 使用与配置文件关联的设置。默认情况下,SDK 使用共享 AWS configcredentials文件,但如果设置了AWS_CONFIG_FILE环境变量,SDK 将使用该值。如果设置AWS_PROFILE环境变量(或 aws.profile JVM 系统属性),SDK 将查找 “默认” 配置文件,否则会查找与AWS_PROFILE’s值匹配的配置文件。

SDK 根据上一段所述的配置查找配置文件,并使用此处定义的设置。如果 SDK 找到的设置包含适用于不同凭证提供者方法的混合设置,则 SDK 将使用以下顺序:

  1. AWS 访问密钥(配置文件)-SDK 使用aws_access_key_idaws_access_key_id、和的设置aws_session_token

  2. 假设角色配置-如果 SDK 找到role_arnsource_profile /或credential_source设置,则会尝试代入角色。如果 SDK 找到了该source_profile设置,它会从另一个配置文件获取凭证,以接收指定角色的临时证书role_arn。如果软件开发工具包找到了该credential_source设置,则它会根据设置的值从 Amazon ECS 容器、Amazon EC2 实例或环境变量中credential_source获取证书。然后,它使用这些证书为该角色获取临时证书。

    配置文件应包含source_profile设置或credential_source设置,但不能同时包含两者。

  3. Web 身份令牌配置-如果 SDK 找到role_arn并进行了web_identity_token_file设置,它会根据role_arn和令牌获取访问 AWS 资源的临时证书。

  4. SSO 令牌配置-如果软件开发工具包找到sso_sessionsso_account_idsso_role_name设置(以及配置文件中的配套sso-session部分),则软件开发工具包会从 IAM Identity Center 服务中检索临时证书。

  5. 旧版 SSO 配置-如果软件开发工具包找到 sso_start_urlsso_regionsso_account_id、和sso_role_name设置,则软件开发工具包会从 IAM Identity Center 服务中检索临时证书。

  6. 流程配置-如果 SDK 找到credential_process设置,它将使用路径值来调用流程并获取临时证书。

5. 容器凭证

SDK 会查找环境变量AWS_CONTAINER_CREDENTIALS_RELATIVE_URIAWS_CONTAINER_CREDENTIALS_FULL_URIAWS_CONTAINER_AUTHORIZATION_TOKEN_FILEAWS_CONTAINER_AUTHORIZATION_TOKEN。它使用这些值通过 GET 请求从指定的 HTTP 端点加载证书。

6. IMDS 凭证

SDK 尝试使用默认或配置的 HTTP 端点从实例元数据服务获取凭证。SDK 仅支持IMDSv2

如果此时仍未解析凭证,则客户端创建会失败,但会出现异常。

注意:更改凭据解析顺序

上面描述的凭证解析顺序适用于适用于 Kotlin 的 SDK 的1.4.x+发布。在1.4.0发布之前,3号和4号的物品被切换,当前的4a物品紧随当前的4f物品。

显式凭证提供商

您可以指定 SDK 应使用的特定凭证提供商或自定义链 (CredentialsProviderChain),而不是使用默认提供商链。例如,如果您使用环境变量设置默认凭据,请EnvironmentCredentialsProvider向客户端生成器提供,如以下代码片段所示。

val ddb = DynamoDbClient { region = "us-east-1" credentialsProvider = EnvironmentCredentialsProvider() }
注意

默认链会缓存凭证,但独立提供商不会。您可以使用CachedCredentialsProvider类封装任何凭证提供程序,以避免在每次 API 调用时不必要地获取凭证。缓存的提供者仅在当前凭证过期时获取新凭证。

注意

您可以通过实现CredentialsProvider接口来实现自己的凭证提供程序或提供者链。