本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
凭证提供程序
默认凭证提供程序链解析在 1.4.0 版本中更改的凭据的顺序有关详细信息,请参阅以下注释。
当您使用向 Amazon Web Services 发送请求时 适用于 Kotlin 的 AWS SDK,必须使用颁发的凭证对请求进行 AWS加密签名。Kotlin 软件开发工具包会自动为您签署请求。要获取证书,软件开发工具包可以使用位于多个位置的配置设置,例如 JVM 系统属性、环境变量、共享 AWS config和credentials文件以及 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.sessionTokenJVM 系统属性。 - 2。 AWS 访问密钥(环境变量)
-
SDK 尝试从
AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY以及AWS_SESSION_TOKEN环境变量加载凭证。 - 3. 网络身份令牌
-
SDK 会查找环境变量
AWS_WEB_IDENTITY_TOKEN_FILE和AWS_ROLE_ARN(或 JVM 系统属性aws.webIdentityTokenFile和aws.roleArn)。根据令牌信息和角色,SDK 获取临时证书。 - 4. 配置文件中的配置文件
-
在此步骤中,SDK 使用与配置文件关联的设置。默认情况下,SDK 使用共享 AWS
config和credentials文件,但如果设置了AWS_CONFIG_FILE环境变量,SDK 将使用该值。如果未设置AWS_PROFILE环境变量(或aws.profileJVM 系统属性),SDK 将查找 “默认” 配置文件,否则会查找与AWS_PROFILE’s值匹配的配置文件。SDK 根据上一段所述的配置查找配置文件,并使用此处定义的设置。如果 SDK 找到的设置包含适用于不同凭证提供者方法的混合设置,则 SDK 将使用以下顺序:
-
AWS 访问密钥(配置文件)-SDK 使用
aws_access_key_idaws_access_key_id、和的设置aws_session_token。 -
假设角色配置-如果 SDK 找到
role_arn和source_profile/或credential_source设置,则会尝试代入角色。如果 SDK 找到了该source_profile设置,它会从另一个配置文件获取凭证,以接收指定角色的临时证书role_arn。如果软件开发工具包找到了该credential_source设置,则它会根据设置的值从 Amazon ECS 容器、Amazon EC2 实例或环境变量中credential_source获取证书。然后,它使用这些证书为该角色获取临时证书。配置文件应包含
source_profile设置或credential_source设置,但不能同时包含两者。 -
Web 身份令牌配置-如果 SDK 找到
role_arn并进行了web_identity_token_file设置,它会根据role_arn和令牌获取访问 AWS 资源的临时证书。 -
SSO 令牌配置-如果软件开发工具包找到
sso_session、sso_account_id、sso_role_name设置(以及配置文件中的配套sso-session部分),则软件开发工具包会从 IAM Identity Center 服务中检索临时证书。 -
旧版 SSO 配置-如果软件开发工具包找到
sso_start_url、sso_regionsso_account_id、和sso_role_name设置,则软件开发工具包会从 IAM Identity Center 服务中检索临时证书。 -
登录配置-如果 SDK 找到
login_session设置,它将使用登录会话中的临时证书,或者如果这些证书在 5 分钟内过期,则尝试刷新。要了解如何启动登录会话,请参阅 AWS CLI 用户指南。 -
流程配置-如果 SDK 找到
credential_process设置,它将使用路径值来调用流程并获取临时证书。
-
- 5. 容器凭证
-
SDK 会查找环境变量
AWS_CONTAINER_CREDENTIALS_RELATIVE_URI或AWS_CONTAINER_CREDENTIALS_FULL_URI和AWS_CONTAINER_AUTHORIZATION_TOKEN_FILE或AWS_CONTAINER_AUTHORIZATION_TOKEN。它使用这些值通过 GET 请求从指定的 HTTP 端点加载证书。 - 6. IMDS 凭证
如果此时仍未解析凭证,则客户端创建会失败,但会出现异常。
注意:更改凭据解析顺序
上面描述的凭证解析顺序适用于适用于 Kotlin 的 SDK 的1.4.x+发布。在1.4.0发布之前,3号和4号的物品被切换,当前的4a物品紧随当前的4g物品。
指定凭证提供商
您可以指定凭证提供商,而不是使用默认的提供者链。通过这种方法,您可以直接控制 SDK 使用哪些凭据。
例如,要使用代入的 IAM 角色的证书,请在创建客户端StsAssumeRoleCredentialsProvider时指定:
val ddb = DynamoDbClient { region = "us-east-1" credentialsProvider = StsAssumeRoleCredentialsProvider() }
您还可以创建自定义链 (CredentialsProviderChain),按您的首选顺序组合多个提供商。
使用独立提供商缓存凭证
重要
默认链会自动缓存凭证。独立提供商不缓存凭证。为避免在每次 API 调用时都获取凭证,请将您的提供程序包起来。CachedCredentialsProvider仅当当前凭证过期时,缓存的提供者才会获取新凭证。
要使用独立提供程序缓存凭证,请使用以下CachedCredentialsProvider类:
val ddb = DynamoDbClient { region = "us-east-1" credentialsProvider = CachedCredentialsProvider(StsAssumeRoleCredentialsProvider()) }
或者,使用cached()扩展函数获取更简洁的代码:
val ddb = DynamoDbClient { region = "us-east-1" credentialsProvider = StsAssumeRoleCredentialsProvider().cached() }