Terraform 中的机密。它是如何处理的。项目
抱歉,我需要您提供要翻译的具体文本内容(即文章正文)。请把您想要翻译的完整文字粘贴在这里,我会按照要求保留源链接并进行简体中文翻译。
项目 1 — AWS Secrets Manager
场景
- 公司类型:中大型、SaaS、金融科技、电子商务、医疗健康(例如,符合 SOC2、HIPAA、PCI 合规性的客户数据)。
- 应用:使用 RDS(MySQL/Postgres)。
- 需求:
- 密码 不能 出现在 Git 中或对开发者可见。
- 必须可轮换。
- 只能由 IAM 授权的服务访问。
期望结果
创建 RDS 数据库时不硬编码密码。Terraform 应该:
- 在运行时安全读取密码。
- 永不在代码中存储密码。
- 仅允许 IAM 授权的服务访问。
aws secretsmanager create-secret \
--name prod/rds/db_password \
--secret-string '{"password":"StrongProdPass123!"}'
注意: 该密钥是在 Terraform 之外 创建的。
Terraform 后端配置
terraform {
backend "s3" {
bucket = "terraform-state-prod"
key = "rds/terraform.tfstate"
region = "us-east-1"
dynamodb_table = "terraform-locks"
encrypt = true
}
}
- 加密状态。
- 防止状态损坏。
- 实现团队安全部署。
读取 Terraform 中的 secret
data "aws_secretsmanager_secret" "db" {
name = "prod/rds/db_password"
}
data "aws_secretsmanager_secret_version" "db" {
secret_id = data.aws_secretsmanager_secret.db.id
}
Terraform 不会创建该 secret;它只会读取它。
RDS 实例资源
resource "aws_db_instance" "prod" {
engine = "mysql"
instance_class = "db.t3.micro"
username = "admin"
password = jsondecode(
data.aws_secretsmanager_secret_version.db.secret_string
)["password"]
}
- 支持密码轮换。
- 通过 IAM 进行审计。
- 符合安全合规要求。
- 在 Git 中零密钥泄露。
在生产环境中,数据库密码存储在 AWS Secrets Manager 中。Terraform 在运行时使用 IAM 权限读取这些密码,避免硬编码的密钥,并支持轮换和合规性。
场景:简单 EC2 Secrets(SSM 参数存储)
目标
安全地将机密传递给 EC2 实例,而不暴露它们。
aws ssm put-parameter \
--name /prod/app/api_key \
--type SecureString \
--value "api-key-123"
创建具有 ssm:GetParameter 权限的 IAM 角色并将其附加到 EC2 实例。
data "aws_ssm_parameter" "api_key" {
name = "/prod/app/api_key"
with_decryption = true
}
EC2 用户数据示例
# For simple secrets, we use SSM SecureString. EC2 IAM roles allow secure access without exposing secrets in scripts or repositories.
CI‑驱动的秘密注入
背景
- 现代 DevOps、远程团队、平台工程。
- Terraform 在 CI 中运行;开发者本地不应拥有 AWS 密钥。
示例
variable "db_password" {
sensitive = true
}
CI 环境变量(例如 GitHub Actions):
env:
TF_VAR_db_password: ${{ secrets.DB_PASSWORD }}
- 没有本地秘密。
- 零信任模型。
- 审计日志和一致的部署。
Terraform 仅在 CI 流水线中运行。秘密在运行时从 CI 秘密管理器注入,防止本地泄露。
集中式 Terraform 执行(Terraform Cloud)
- 集中执行并对敏感变量进行加密存储。
- 提供状态锁定、加密存储和远程运行。
- 为团队成员消除本地 Terraform 安装需求。
Terraform Cloud 集中执行并安全地存储敏感变量,使协作更加安全。
动态密钥与 Vault
- 适用于高安全性环境(银行、FinTech、企业)。
- Vault 发放短期 DB 凭证。
- Terraform 读取动态凭证;它们会自动过期。
Vault 提供动态密钥,通过发放有时间限制的凭证来降低冲击范围。
Tool Summary
| Tool | Typical Use Case |
|---|---|
| AWS Secrets Manager | 生产数据库(高价值密钥) |
| AWS SSM Parameter Store | 简单的 EC2 密钥(SecureString) |
| CI secret stores | 流水线级别的密钥注入 |
| Terraform Cloud | 集中式团队执行 |
| HashiCorp Vault | 高安全性、动态密钥生成 |