配置 AWS 命名配置文件

发布: (2025年12月14日 GMT+8 05:34)
5 min read
原文: Dev.to

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

如果遇到 UnauthorizedOperationAccessDenied 错误,请确认附加到该配置文件的 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 部署基础设施。

Back to Blog

相关文章

阅读更多 »