理解 AWS CLI 配置文件
AWS 命令行界面 (AWS CLI) 是一个功能强大的工具,用于与 Amazon Web Services 进行交互。对于管理多个 AWS 账户或账户内不同角色的用户来说,配置和切换配置文件对于高效的工作流程管理至关重要。命名配置文件允许您存储不同的凭证集、默认区域和输出格式,从而无需每次都手动指定凭证,即可在各种 AWS 环境之间无缝切换。
本指南将引导您完成设置、管理和使用多个 AWS CLI 配置文件。到最后,您将能够优化跨不同 AWS 账户的命令行交互,从而提高安全性和生产力。
设置您的 AWS CLI 配置文件
AWS CLI 将配置信息存储在名为 config 的文件中,将凭证存储在名为 credentials 的文件中。默认情况下,这些文件位于用户主目录下的 .aws 目录中(Linux/macOS 上为 ~/.aws/,Windows 上为 %USERPROFILE%\.aws\)。
默认配置文件
当您首次使用 aws configure 配置 AWS CLI 时,它会创建一个名为 [default] 的默认配置文件。如果未指定其他配置文件,则使用此配置文件。
# ~/.aws/credentials 中 default 配置文件的示例
[default]
aws_access_key_id = YOUR_DEFAULT_ACCESS_KEY
aws_secret_access_key = YOUR_DEFAULT_SECRET_KEY
# ~/.aws/config 中 default 配置文件的示例
[default]
region = us-east-1
output = json
创建命名配置文件
要创建命名配置文件,只需在 credentials 和 config 文件中添加一个新部分,并为该配置文件使用一个描述性名称即可。例如,为生产账户创建一个配置文件,为开发账户创建另一个配置文件:
1. 编辑 ~/.aws/credentials:
添加一个带有配置文件名的新部分(例如 [prod]、[dev])。
# ~/.aws/credentials
[default]
aws_access_key_id = YOUR_DEFAULT_ACCESS_KEY
aws_secret_access_key = YOUR_DEFAULT_SECRET_KEY
[prod]
aws_access_key_id = YOUR_PROD_ACCESS_KEY
aws_secret_access_key = YOUR_PROD_SECRET_KEY
[dev]
aws_access_key_id = YOUR_DEV_ACCESS_KEY
aws_secret_access_key = YOUR_DEV_SECRET_KEY
2. 编辑 ~/.aws/config:
同样地,将相应的节添加到 config 文件中。您可以为每个配置文件指定区域和输出格式。
# ~/.aws/config
[default]
region = us-east-1
output = json
[profile prod]
region = us-west-2
output = text
[profile dev]
region = eu-central-1
output = json
重要提示:
* 在 ~/.aws/config 中定义配置文件时,必须在配置文件名称前加上 profile(例如 [profile prod])。这与 ~/.aws/credentials 不同,后者只使用配置文件名称(例如 [prod])。
* 如果一个设置同时在 [default] 配置文件和命名配置文件中定义,则以命名配置文件的设置为准。
切换配置文件
设置好命名配置文件后,您可以通过在 AWS CLI 命令中使用 --profile 选项来使用它们。
示例: 要列出生产账户中的 S3 存储桶:
aws s3 ls --profile prod
示例: 要描述开发账户中的 EC2 实例:
aws ec2 describe-instances --profile dev
如果省略 --profile 选项,CLI 将使用 [default] 配置文件。
为环境设置默认配置文件
不断键入 --profile 会很繁琐。您可以设置一个环境变量来指定 AWS CLI 在当前会话中默认应使用哪个配置文件。
使用 AWS_PROFILE 环境变量:
在 Linux/macOS 上:
export AWS_PROFILE=prod
# 现在,命令将默认使用 'prod' 配置文件
aws s3 ls
aws ec2 describe-instances
要取消设置:
unset AWS_PROFILE
在 Windows (命令提示符) 上:
set AWS_PROFILE=prod
# 现在,命令将默认使用 'prod' 配置文件
aws s3 ls
要取消设置:
set AWS_PROFILE=
在 Windows (PowerShell) 上:
$env:AWS_PROFILE = "prod"
# 现在,命令将默认使用 'prod' 配置文件
aws s3 ls
要取消设置:
Remove-Item Env:\AWS_PROFILE
使用配置文件管理多个 AWS 账户
这是命名配置文件的常见用例。每个配置文件都可以配置为使用不同 AWS 账户的 IAM 用户访问密钥。这对于以下情况特别有用:
- 开发与生产: 为安全起见,将开发和生产环境分开。
- 不同团队/项目: 隔离不同团队或项目的资源和权限。
- 跨账户访问: 如果您是需要管理多个账户中资源的管理员或开发人员。
最佳实践:使用 IAM 角色
将长期有效的访问密钥直接存储在每个账户的凭证文件中的做法不如使用 IAM 角色安全和推荐。这包括:
- 在目标账户中创建一个 IAM 角色,您(在主账户中的)IAM 用户可以承担该角色。
- 配置本地 AWS CLI,以便在使用特定配置文件时承担此角色。
要在 ~/.aws/config 中配置角色承担:
# ~/.aws/config
[profile dev-role]
role_arn = arn:aws:iam::ACCOUNT_ID:role/ROLE_NAME
source_profile = default # 或具有承担该角色的权限的另一个配置文件
region = us-east-1
output = json
当您使用 aws ec2 describe-instances --profile dev-role 时,CLI 将自动尝试承担指定的 IAM 角色并使用获得的临时凭证。
高级配置选项
除了凭证和区域之外,配置文件还可以指定其他 AWS CLI 设置:
output:json、text、tableregion: 例如us-east-1s3.max_concurrent_requests: S3 操作的并行请求数。s3.max_queue_size: S3 多部分上传的队列大小。cli_binary_url: 指定用于下载 CLI 二进制文件的自定义 URL(不常见)。
示例:为特定配置文件配置 S3 设置
# ~/.aws/config
[profile s3-optimized]
region = us-east-1
output = json
s3.max_concurrent_requests = 50
s3.max_queue_size = 10000
提示和最佳实践
- 使用描述性配置文件名称: 使您的配置文件名称清晰明了,并能表明它们代表的账户或环境(例如
prod-admin、dev-web、sandbox-research)。 - 保护您的凭证: 绝不要将您的
~/.aws/credentials文件提交到版本控制中。尽可能使用 IAM 角色进行跨账户访问,以避免存储长期有效的访问密钥。 - 定期审查访问密钥: 如果必须使用访问密钥,请定期轮换它们并禁用旧的密钥。
- 利用环境变量: 将
AWS_PROFILE用于临时切换或用于需要定位特定账户的 CI/CD 管道。 - 合并配置文件和环境变量: 如果设置了
AWS_PROFILE环境变量,它将覆盖使用--profile指定的任何配置文件。
结论
掌握 AWS CLI 配置文件是任何广泛使用 Amazon Web Services 的人的一项基本技能。通过正确配置和使用命名配置文件,您可以显著提高生产力,维护更好的安全实践,并轻松管理多个 AWS 环境。无论您是在开发、分级和生产账户之间切换,还是管理不同客户的资源,配置文件都提供了高效云操作所需的灵活性和控制力。