如何使用Terraform在AWS EC2中隐藏数据库用户名与密码?
隐藏Terraform dev.tfvars中敏感信息的方法
1. 使用环境变量传递敏感值
直接通过环境变量传递敏感数据,避免写入tfvars文件。Terraform会自动识别TF_VAR_前缀的环境变量并映射到对应变量:
- 在Linux/macOS终端设置环境变量:
export TF_VAR_db_password="admin123" export TF_VAR_db_username="admin" - 修改
dev.tfvars引用变量(需提前在variables.tf中定义这些变量):ssm_values = { db_password = var.db_password db_name = "tfdb" db_username = var.db_username } - 在
variables.tf中标记变量为敏感,防止Terraform输出明文:variable "db_password" { type = string sensitive = true } variable "db_username" { type = string sensitive = true }
2. 借助AWS Secrets Manager存储敏感值
利用AWS Secrets Manager存储数据库凭证,Terraform通过数据源直接读取,无需本地保存明文:
- 先在AWS Secrets Manager中创建包含
db_password、db_username的密钥 - 在Terraform配置中添加数据源:
data "aws_secretsmanager_secret_version" "db_creds" { secret_id = "你的密钥名称" } locals { db_creds = jsondecode(data.aws_secretsmanager_secret_version.db_creds.secret_string) } - 修改
dev.tfvars引用本地变量:ssm_values = { db_password = local.db_creds.db_password db_name = "tfdb" db_username = local.db_creds.db_username }
3. 加密敏感的tfvars文件
方法1:Terraform内置加密
执行命令加密dev.tfvars:
terraform encrypt dev.tfvars
加密后生成dev.tfvars.encrypted文件,后续使用时指定该文件即可:
terraform apply -var-file=dev.tfvars.encrypted
方法2:git-crypt加密(适用于Git仓库)
如果需要将文件提交到Git仓库,用git-crypt对敏感文件加密:
- 在
.gitattributes中添加加密规则:dev.tfvars filter=git-crypt diff=git-crypt - 初始化加密:
git-crypt init - 只有持有密钥的用户能解密文件,防止仓库泄露敏感信息。
4. 标记变量为敏感并命令行传值
在变量定义中设置sensitive = true,Terraform不会在日志、输出或状态文件中显示明文:
- 在
variables.tf中定义:variable "ssm_values" { type = object({ db_password = string db_name = string db_username = string }) sensitive = true } - 执行
terraform apply时通过命令行传入敏感值:
这种方式避免在tfvars中写入明文密码。terraform apply -var-file=dev.tfvars -var 'ssm_values.db_password=admin123'
内容的提问来源于stack exchange,提问作者Uschcode
相关产品推荐
相关产品推荐

