配置 AWS 命名配置文件
Source: Dev.to
介绍
在使用多个 AWS 账户时,需要一种方式告诉 AWS CLI 和 Terraform 在每次操作时使用哪个账户。命名配置文件(named profiles)提供了一个便捷的解决方案。
什么是 AWS 命名配置文件?
命名配置文件是一组凭证和配置设置的集合,代表特定 AWS 账户中的特定身份。通过在本地 AWS 配置文件中一次性定义配置文件,就可以通过名称引用它们,而不必不断切换凭证或在命令行参数中传递它们。
常见的配置文件名称
management-admin– 管理账户的管理员访问权限backend-dev-admin– 开发账户的管理员访问权限backend-prod-developer– 生产环境的受限开发者访问权限
在 Terraform 中使用命名配置文件
provider "aws" {
region = "us-east-1"
profile = "backend-dev-admin"
}
当 Terraform 运行时,它会在本地 AWS 配置文件中查找指定的配置文件并相应地进行身份验证。
AWS 配置文件
配置文件在位于用户主目录的两个文件中定义:
~/.aws/credentials– 存储身份验证凭证(访问密钥或 SSO 配置)~/.aws/config– 存储区域和输出偏好设置
身份验证方法
1. AWS SSO(推荐)
SSO 提供会自动过期的临时凭证,符合 AWS 的最佳实践。
~/.aws/credentials
[profile management-admin]
sso_start_url = https://mycorp.awsapps.com/start
sso_region = us-east-1
sso_account_id = 123456789012
sso_role_name = AdministratorAccess
~/.aws/config
[profile management-admin]
region = us-east-1
output = json
使用 SSO 配置文件
# 登录 SSO 配置文件(会打开浏览器)
aws sso login --profile management-admin
# 验证凭证
aws sts get-caller-identity --profile management-admin
2. 长期访问密钥(不推荐)
可以存储静态访问密钥,但不推荐,因为它们不会自动过期,安全风险更高。
# ~/.aws/credentials(尽量避免使用)
[management-admin]
aws_access_key_id = AKIAIOSFODNN7EXAMPLE
aws_secret_access_key = wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
重要提示: 当未指定特定配置文件时,默认配置文件(没有前缀)会被使用。为安全起见,最好保持其未配置。
验证配置文件
SSO 配置文件
aws sso login --profile management-admin # 打开浏览器进行身份验证
aws sts get-caller-identity --profile management-admin
访问密钥配置文件
aws sts get-caller-identity --profile management-admin
成功调用会返回类似以下的 JSON:
{
"UserId": "AROA...:user@example.com",
"Account": "123456789012",
"Arn": "arn:aws:sts::123456789012:assumed-role/AdministratorAccess/user@example.com"
}
其他检查
# 列出 S3 桶
aws s3 ls --profile management-admin
# 列出特定区域的 EC2 实例
aws ec2 describe-instances --region us-east-1 --profile management-admin
如果遇到 UnauthorizedOperation 或 AccessDenied 错误,请确认附加到该配置文件的 IAM 用户或角色拥有必要的权限。
在没有 SSO 的情况下工作
如果尚未启用 SSO,可以创建一个专用的 IAM 用户,并为其分配 Terraform/Terragrunt 工作流所需的最小权限。将其访问密钥存储在命名配置文件中(例如 acme-root),并使用上述相同的验证步骤。
总结
- 在
~/.aws/credentials和~/.aws/config中定义命名配置文件。 - 优先使用 AWS SSO 以获取安全的临时凭证。
- 在运行 Terraform 或其他 CLI 命令之前,使用
aws sso login --profile <profile>登录。 - 使用
aws sts get-caller-identity以及基本资源列出命令来验证每个配置文件。
通过正确配置的命名配置文件,您可以安全地管理多个 AWS 账户,并使用 Terraform 和 Terragrunt 部署基础设施。