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-sso
sso_account_id = 111122223333
sso_role_name = readOnly
region = us-west-2
output = text
[profile user1]
sso_session = my-sso
sso_account_id = 444455556666
sso_role_name = readOnly
region = us-east-1
output = json
[sso-session my-sso]
sso_region = us-east-1
sso_start_url = https://my-sso-portal.awsapps.com/start
sso_registration_scopes = sso:account:access
- AWS IAM Identity Center Lagacy SSO:
这种模式下不需要 credentials 文件,所以不展示。
Config file:
[default]
sso_start_url = https://my-sso-portal.awsapps.com/start
sso_region = us-east-1
sso_account_id = 111122223333
sso_role_name = readOnly
region = us-west-2
output = text
[profile user1]
sso_start_url = https://my-sso-portal.awsapps.com/start
sso_region = us-east-1
sso_account_id = 444455556666
sso_role_name = readOnly
region = us-east-1
output = json
- AWS Identity and Access Management 的短期凭证:
Credentials file:
[default]
aws_access_key_id=ASIAIOSFODNN7EXAMPLE
aws_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
aws_session_token = IQoJb3JpZ2luX2IQoJb3JpZ2luX2IQoJb3JpZ2luX2IQoJb3JpZ2luX2IQoJb3JpZVERYLONGSTRINGEXAMPLE
[user1]
aws_access_key_id=ASIAI44QH8DHBEXAMPLE
aws_secret_access_key=je7MtGbClwBF/2Zp9Utk/h3yCo8nvbEXAMPLEKEY
aws_session_token = fcZib3JpZ2luX2IQoJb3JpZ2luX2IQoJb3JpZ2luX2IQoJb3JpZ2luX2IQoJb3JpZVERYLONGSTRINGEXAMPLE
Config file:
[default]
region=us-west-2
output=json
[profile user1]
region=us-east-1
output=text
- Assume Role 配置:
使用 IAM 角色的 profile 需要从另一个 profile 中获取凭证,然后应用 IAM 角色权限。 下面例子中,default
profile
用来提供所需的凭证, user1
使用这里的凭证来假扮新的角色(Assume role).
Credentials file:
[default]
aws_access_key_id=ASIAIOSFODNN7EXAMPLE
aws_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
aws_session_token = IQoJb3JpZ2luX2IQoJb3JpZ2luX2IQoJb3JpZ2luX2IQoJb3JpZ2luX2IQoJb3JpZVERYLONGSTRINGEXAMPLE
Config file:
[default]
region=us-west-2
output=json
[profile user1]
role_arn=arn:aws:iam::777788889999:role/user1role
source_profile=default
role_session_name=session_user1
region=us-east-1
output=text
- Amazon EC2 instance metadata credentials:
这个例子展示一个从 Amazon EC2 实例元数据中获得的凭证。
Credentials file: 不使用.
Config file:
[default]
role_arn=arn:aws:iam::123456789012:role/defaultrole
credential_source=Ec2InstanceMetadata
region=us-west-2
output=json
[profile user1]
role_arn=arn:aws:iam::777788889999:role/user1role
credential_source=Ec2InstanceMetadata
region=us-east-1
output=text
- 长期凭证(Long-term credentials):
警告:为了避免安全风险,在开发专用软件或处理真实数据时,请勿使用 IAM 用户进行身份验证。
Credentials file:
[default]
aws_access_key_id=AKIAIOSFODNN7EXAMPLE
aws_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
[user1]
aws_access_key_id=AKIAI44QH8DHBEXAMPLE
aws_secret_access_key=je7MtGbClwBF/2Zp9Utk/h3yCo8nvbEXAMPLEKEY
Config file:
[default]
region=us-west-2
output=json
[profile user1]
region=us-east-1
output=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-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
在多个 profile 中重用同一个 sso-session 的配置示例:
[profile dev]
sso_session = my-sso
sso_account_id = 111122223333
sso_role_name = SampleRole
[profile prod]
sso_session = my-sso
sso_account_id = 111122223333
sso_role_name = SampleRole2
[sso-session my-sso]
sso_region = us-east-1
sso_start_url = https://my-sso-portal.awsapps.com/start
使用 sso_registration_scopes 的配置示例:
[sso-session my-sso]
sso_region = us-east-1
sso_start_url = https://my-sso-portal.awsapps.com/start
sso_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 = Ec2InstanceMetadata
endpoint_url = https://profile-a-endpoint.aws/
[profile B]
source_profile = A
role_arn = arn:aws:iam::123456789012:role/roleB
services = profileB
[services profileB]
ec2 =
endpoint_url = https://profile-b-ec2-endpoint.aws