AWS CLI config 文件和 credential 文件格式
通常, 这两种文件都是由 AWS CLI 命令行工具生成并且维护的, 不需要手动编辑。
这些文件中存储了一些常用的配置项和凭证(credential).
文件的内容被划分成多个 Profile. 默认情况下, AWS CLI 会使用名称为 default 的 Profile 中的配置项和凭证。
文件的格式
config 文件和 credentials 文件由多个 section 组成,其中包括: profile, sso-session 和 service.
section 是一个有名称的配置项的集合。
一个 config 文件和 credentials 文件中可以包含多个 section.
这些文件都是纯文本,未加密的, 使用以下格式:
section名字包含在[]之中。 比如[default],[profile user1],[sso-session]section中的每个配置项使用格式setting_name=value- 以 
#开头的行被认为是注释 
Section: profile
config 文件中, profile 的名称格式为: [default] [profile user1].
credentials 文件中, profile 的名称格式为: [default] [user1]
示例
- AWS IAM Identity Center SSO:
 
这种模式下不需要 credentials 文件,所以不展示。
Config file:
[default]sso_session = my-ssosso_account_id = 111122223333sso_role_name = readOnlyregion = us-west-2output = text[profile user1]sso_session = my-ssosso_account_id = 444455556666sso_role_name = readOnlyregion = us-east-1output = json[sso-session my-sso]sso_region = us-east-1sso_start_url = https://my-sso-portal.awsapps.com/startsso_registration_scopes = sso:account:access
- AWS IAM Identity Center Lagacy SSO:
 
这种模式下不需要 credentials 文件,所以不展示。
Config file:
[default]sso_start_url = https://my-sso-portal.awsapps.com/startsso_region = us-east-1sso_account_id = 111122223333sso_role_name = readOnlyregion = us-west-2output = text[profile user1]sso_start_url = https://my-sso-portal.awsapps.com/startsso_region = us-east-1sso_account_id = 444455556666sso_role_name = readOnlyregion = us-east-1output = json
- AWS Identity and Access Management 的短期凭证:
 
Credentials file:
[default]aws_access_key_id=ASIAIOSFODNN7EXAMPLEaws_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEYaws_session_token = IQoJb3JpZ2luX2IQoJb3JpZ2luX2IQoJb3JpZ2luX2IQoJb3JpZ2luX2IQoJb3JpZVERYLONGSTRINGEXAMPLE[user1]aws_access_key_id=ASIAI44QH8DHBEXAMPLEaws_secret_access_key=je7MtGbClwBF/2Zp9Utk/h3yCo8nvbEXAMPLEKEYaws_session_token = fcZib3JpZ2luX2IQoJb3JpZ2luX2IQoJb3JpZ2luX2IQoJb3JpZ2luX2IQoJb3JpZVERYLONGSTRINGEXAMPLE
Config file:
[default]region=us-west-2output=json[profile user1]region=us-east-1output=text
- Assume Role 配置:
 
使用 IAM 角色的 profile 需要从另一个 profile 中获取凭证,然后应用 IAM 角色权限。 下面例子中,default profile
用来提供所需的凭证, user1 使用这里的凭证来假扮新的角色(Assume role).
Credentials file:
[default]aws_access_key_id=ASIAIOSFODNN7EXAMPLEaws_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEYaws_session_token = IQoJb3JpZ2luX2IQoJb3JpZ2luX2IQoJb3JpZ2luX2IQoJb3JpZ2luX2IQoJb3JpZVERYLONGSTRINGEXAMPLE
Config file:
[default]region=us-west-2output=json[profile user1]role_arn=arn:aws:iam::777788889999:role/user1rolesource_profile=defaultrole_session_name=session_user1region=us-east-1output=text
- Amazon EC2 instance metadata credentials:
 
这个例子展示一个从 Amazon EC2 实例元数据中获得的凭证。
Credentials file: 不使用.
Config file:
[default]role_arn=arn:aws:iam::123456789012:role/defaultrolecredential_source=Ec2InstanceMetadataregion=us-west-2output=json[profile user1]role_arn=arn:aws:iam::777788889999:role/user1rolecredential_source=Ec2InstanceMetadataregion=us-east-1output=text
- 长期凭证(Long-term credentials):
 
警告:为了避免安全风险,在开发专用软件或处理真实数据时,请勿使用 IAM 用户进行身份验证。
Credentials file:
[default]aws_access_key_id=AKIAIOSFODNN7EXAMPLEaws_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY[user1]aws_access_key_id=AKIAI44QH8DHBEXAMPLEaws_secret_access_key=je7MtGbClwBF/2Zp9Utk/h3yCo8nvbEXAMPLEKEY
Config file:
[default]region=us-west-2output=json[profile user1]region=us-east-1output=text
Section: sso-session
config 文件的 sso-session section 用于配置使用 SSO 获取访问令牌(Access Token)的相关配置项, 这个访问令牌进一步可用于获取 AWS 凭证。
有以下配置项:
- sso_start_url: 必须项
 - sso_region: 必须项
 - sso_account_id
 - sso_role_name
 - sso_registration_scopes
 
您定义 sso-session section, 并将其与 profile 进行关联。 sso_start_url 和 sso_region 必须配置。
通常情况下,sso_account_id, sso_role_name 也需要配置,以便 SDK 可以用这些信息获取 SSO 凭证. 但是, sso_account_id, sso_role_name 不是必须的。
如果你的应用程序使用的 AWS 服务支持使用 baerer 认证, 那就不需要 SSO 凭证。这种情况下, 这两个配置项就不需要。
可以在 sso-session 中配置 sso_registration_scopes. Scope 是 OAuth 2.0 中用于限制应用程序访问用户帐户的机制. 应用程序可以请求一个或多个 Scope,
发放给应用程序的访问令牌将限制在这些授予的范围内。这些 Scope 定义了为注册的 OIDC 客户端请求授权的权限,以及客户端检索的访问令牌。
以下是一个支持获取 SSO 凭证并可以自动刷新令牌的配置示例:
[profile dev]sso_session = my-ssosso_account_id = 111122223333sso_role_name = SampleRole[sso-session my-sso]sso_region = us-east-1sso_start_url = https://my-sso-portal.awsapps.com/start
在多个 profile 中重用同一个 sso-session 的配置示例:
[profile dev]sso_session = my-ssosso_account_id = 111122223333sso_role_name = SampleRole[profile prod]sso_session = my-ssosso_account_id = 111122223333sso_role_name = SampleRole2[sso-session my-sso]sso_region = us-east-1sso_start_url = https://my-sso-portal.awsapps.com/start
使用 sso_registration_scopes 的配置示例:
[sso-session my-sso]sso_region = us-east-1sso_start_url = https://my-sso-portal.awsapps.com/startsso_registration_scopes = sso:account:access
身份验证令牌缓存在磁盘上, 目录:
~/.aws/sso/cache,
Section: services
services section 是一组设置,用于为 AWS 服务请求配置自定义终端节点。
需要使用相应 services 的 profile 会链接到该 section. 如下:
[profile dev]services = my-services
services section 被 <SERVICE> =  这样的行划分为多个子 section, 这里的 <SERVICE> 是 AWS 服务标识符 (AWS service identifier key).
有关要在 services section 中使用的所有服务标识符列表,请参阅 Using endpoints in the AWS CLI.
Service 标识符后面是一组子设置,每个设置单独一行,并用两个空格缩进。
以下是一个示例:
- 其中在 
my-services中配置了用于向 Amazon DynamoDB 服务发送请求的终端节点。 - 然后这个 services section 被 dev profile 使用.
 
[profile dev]services = my-services[services my-services]dynamodb =   endpoint_url = http://localhost:8000
一个更加复杂的例子:
If your profile has role-based credentials configured through a source_profile parameter for IAM assume role functionality, the SDK only uses service configurations for the specified profile. It does not use profiles that are role chained to it. For example, using the following shared config file:
[profile A]credential_source = Ec2InstanceMetadataendpoint_url = https://profile-a-endpoint.aws/[profile B]source_profile = Arole_arn = arn:aws:iam::123456789012:role/roleBservices = profileB[services profileB]ec2 =   endpoint_url = https://profile-b-ec2-endpoint.aws