使用共享的 config 和 credentials 文件进行 AWS SDK 和工具全局配置 - AWS SDK 和工具

使用共享的 configcredentials 文件进行 AWS SDK 和工具全局配置

共享的 AWS configcredentials 文件是您可以为 AWS SDK 和工具指定身份验证和配置的最常用方式。

共享的 configcredentials 文件包含一组配置文件。配置文件由一组键值对形式的配置设置组成,供 AWS SDK、AWS Command Line Interface(AWS CLI)以及其他工具使用。配置值附加到配置文件中,以便在使用该配置文件时配置 SDK/工具的某些方面。这些文件是“共享”的,因为这些值会对用户本地环境中的任何应用程序、流程或 SDK 生效。

共享config文件和credentials文件都是纯文本文件,仅包含 ASCII 字符(UTF-8 编码)。它们采用通常称为 INI 文件的形式。

配置文件

共享文件 configcredentials 中的设置与特定的配置文件相关联。可以在该文件中定义多个配置文件,从而创建将在不同开发环境中应用的不同设置配置。

如果未指定特定的命名 [default] 配置文件,则该配置文件包含由 SDK 或工具操作使用的值。您也可以创建单独的配置文件,您可以按名称明确引用这些配置文件。每个配置文件都可以根据应用程序和场景的需要使用不同的设置和值。

注意

[default]只是一个未命名的配置文件。此配置文件之所以命名为default,是因为如果用户未指定配置文件,则它是 SDK 使用的默认配置文件。它不为其他配置文件提供接替的默认值。如果您在 [default] 配置文件中设置了某些值,但未在命名配置文件中相应设置,则在使用命名配置文件时不会设置该值。

设置命名配置文件

[default] 配置文件和多个命名配置文件可以在同一个文件中共存。使用以下设置来选择 SDK 或工具在运行代码时将使用配置文件中的具体设置。此外还可以在代码中或使用 AWS CLI 时按命令选择配置文件。

通过设置以下配置之一来配置此功能:

AWS_PROFILE - 环境变量

将此环境变量设置为某个命名配置文件或“默认”时,所有 SDK 代码和 AWS CLI 命令都使用该配置文件中的设置。

Linux/macOS 通过命令行设置环境变量的示例:

export AWS_PROFILE="my_default_profile_name";

Windows 通过命令行设置环境变量的示例:

setx AWS_PROFILE "my_default_profile_name"
aws.profile:JVM 系统属性

对于 JVM 上适用于 Kotlin 的 SDK 和适用于 Java 的 SDK 2.x,您可以设置 aws.profile 系统属性。当 SDK 创建服务客户端时,将会使用命名配置文中件的设置,但该设置在代码中被覆盖的情况除外。适用于 Java 的 SDK 1.x 不支持此系统属性。

注意

如果应用程序位于运行多个应用程序的服务器上,我们建议您始终使用命名配置文件而不是默认配置文件。环境中的任何 AWS 应用程序都会自动获取默认置配文件并相互共享。因此,如果其他人更新了其应用程序的默认配置文件,则可能会在无意中影响其他应用程序。为防止出现这种情况,请在共享的 config 文件中定义一个命名配置文件,然后在代码中设置该命名配置文件,从而在应用程序中使用该命名配置文件。如果您知道命名配置文件的作用域仅影响您的应用程序,则可以使用环境变量或 JVM 系统属性来设置该命名配置文件。

配置文件的格式

config 文件将归入各个节中。节是一个命名的设置集合,它一直持续到遇到另一个节定义行为止。

config 文件是使用以下格式的纯文本文件:

  • 节中的所有条目均采用 setting-name=value 的一般形式。

  • 可以通过以井号字符 (#) 开头来注释掉行。

节类型

节定义是将名称应用于设置集合的行。节定义行以方括号 ([]) 开头和结尾。方括号内有一个节类型标识符和该节的自定义名称。可以使用字母、数字、连字符 (-) 和下划线 (_),但不能使用空格。

节类型:default

节定义行示例:[default]

[default] 是唯一一个不需要 profile 节标识符的配置文件。

下面的示例介绍一个有 [default] 配置文件的基本 config 文件。它设置了region设置。该行之后的所有设置都包含该配置文件中,直到遇到另一个节定义为止。

[default] #Full line comment, this text is ignored. region = us-east-2

节类型:profile

节定义行示例:[profile dev]

profile 节定义行是一个您可以应用到不同开发场景的命名配置分组。要更好地了解命名配置文件,请参阅前面关于配置文件的部分。

以下示例展示了一个带有 profile 节定义行和命名配置文件 fooconfig 文件。该行之后的所有设置都包含该命名配置文件中,直到遇到另一个节定义为止。

[profile foo] ...settings...

某些设置有自己的嵌套子设置组,例如以下示例中的 s3 设置和子设置。通过缩进一个或多个空格将子设置与组相关联。

[profile test] region = us-west-2 s3 = max_concurrent_requests=10 max_queue_size=1000

节类型:sso-session

节定义行示例:[sso-session my-sso]

sso-session 节定义行命名了一组设置,您使用这些设置来配置配置文件以解析使用 AWS IAM Identity Center 的 AWS 凭证。有关配置单点登录身份验证的更多信息,请参阅 使用 IAM Identity Center 进行 AWS SDK 和工具的身份验证。配置文件通过键值对链接到 sso-session 节,其中 sso-session 是密钥,您的 sso-session 节名称是值,例如 sso-session = <name-of-sso-session-section>

以下示例配置了一个配置文件,该配置文件将使用 “my-sso” 中的令牌获取 “111122223333” 账户中 “SampleRole” IAM 角色的短期 AWS 凭证。在profile节中,使用 sso-session 密钥按名称引用 “my-sso” sso-session 节。

[profile dev] sso_session = my-sso sso_account_id = 111122223333 sso_role_name = SampleRole [sso-session my-sso] sso_region = us-east-1 sso_start_url = https://my-sso-portal.awsapps.com/start

节类型:services

节定义行示例:[services dev]

注意

services节支持服务特定的端点自定义,并且仅在包含此功能的 SDK 和工具中可用。要查看此功能是否适用于您的 SDK,请参阅 AWS SDK 和工具支持 以了解服务特定的端点。

services 节定义行命名一组为 AWS 服务请求配置自定义端点的设置。配置文件通过键值对链接到 services 节,其中 services 是密钥,您的 services 节名称是值,例如 services = <name-of-services-section>

services 节按 <SERVICE> = 行进一步分成多个小节,其中 <SERVICE> 是 AWS 服务 标识键。AWS 服务 标识符基于 API 模型的 serviceId,不过需要将所有空格替换为下划线,并将所有字母小写。有关 services 节中要使用的所有服务标识符密钥的列表,请参阅特定于服务的端点的标识符。服务标识符密钥后面是嵌套的设置,每个设置单独成行,缩进两个空格。

以下示例使用services定义来配置端点,使其仅用于向 Amazon DynamoDB 服务发出的请求。在"local-dynamodb" services节中,使用services密钥按名称引用profile节。AWS 服务标识符密钥是 dynamodb。Amazon DynamoDB 服务小节从行 dynamodb = 开始。后面紧跟的任何缩进行都包含在该小节中,并适用于该服务。

[profile dev] services = local-dynamodb [services local-dynamodb] dynamodb = endpoint_url = http://localhost:8000

有关自定义端点配置的更多信息,请参阅特定于服务的端点

凭证文件的格式

credentials文件的规则通常与config文件的规则相同,唯一的不同是配置文件部分不是以单词profile开头。在方括号之间仅使用配置文件名称本身。以下示例展示了一个带有命名配置文件节 foocredentials 文件。

[foo] ...credential settings...

只有以下被视为“密钥”或敏感的设置才能存储在 credentials 文件中:aws_access_key_idaws_secret_access_keyaws_session_token。尽管也可以将这些设置放在共享的 config 文件中,但我们建议您将这些敏感的值保存在单独的 credentials 文件中。这样,如有必要,您可以为每个文件提供单独的权限。

下面的示例介绍一个有 [default] 配置文件的基本 credentials 文件。它会设置 aws_access_key_id、aws_secret_access_key 和 aws_session_token 全局设置。

[default] aws_access_key_id=AKIAIOSFODNN7EXAMPLE aws_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY aws_session_token=IQoJb3JpZ2luX2IQoJb3JpZ2luX2IQoJb3JpZ2luX2IQoJb3JpZ2luX2IQoJb3JpZVERYLONGSTRINGEXAMPLE

无论您在 credentials 文件中使用命名配置文件还是“default”,此处的任何设置都将与 config 文件中具有相同置配文件名称的任何设置合并。如果两个文件中都有共享相同名称的配置文件的凭证,则凭证文件中的密钥优先。