本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
凭证提供程序
默认凭证提供程序链解析在 1.4.0 版本中更改的凭据的顺序有关详细信息,请参阅以下注释。
要使用向 Amazon Web Services 发出请求 AWS SDK for Kotlin,软件开发工具包使用由颁发的加密签名证书。 AWS要获取证书,软件开发工具包可以使用位于多个位置的配置设置,例如 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.accessKeyId
aws.secretAccessKey
、和aws.sessionToken
JVM 系统属性。 - 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.profile
JVM 系统属性),SDK 将查找 “默认” 配置文件,否则会查找与AWS_PROFILE’s
值匹配的配置文件。SDK 根据上一段所述的配置查找配置文件,并使用此处定义的设置。如果 SDK 找到的设置包含适用于不同凭证提供者方法的混合设置,则 SDK 将使用以下顺序:
-
AWS 访问密钥(配置文件)-SDK 使用
aws_access_key_id
aws_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_region
sso_account_id
、和sso_role_name
设置,则软件开发工具包会从 IAM Identity Center 服务中检索临时证书。 -
流程配置-如果 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物品紧随当前的4f物品。
显式凭证提供商
您可以指定 SDK 应使用的特定凭证提供商或自定义链 (CredentialsProviderChain
),而不是使用默认提供商链。例如,如果您使用环境变量设置默认凭据,请EnvironmentCredentialsProvider
向客户端生成器提供,如以下代码片段所示。
val ddb = DynamoDbClient { region = "us-east-1" credentialsProvider = EnvironmentCredentialsProvider() }
注意
默认链会缓存凭证,但独立提供商不会。您可以使用CachedCredentialsProvider
类封装任何凭证提供程序,以避免在每次 API 调用时不必要地获取凭证。缓存的提供者仅在当前凭证过期时获取新凭证。
注意
您可以通过实现CredentialsProvider
接口来实现自己的凭证提供程序或提供者链。