对 Terraform 状态保密

Ken*_*ney 12 terraform

我试图避免在 Terraform 状态下拥有秘密。

是否有更好的方法从 Secrets Manager 中的密钥设置 RDS 密码来执行此操作?

resource "null_resource" "master_password" {
  triggers = {
    db_host = module.myrdsdatabase.cluster_id
  }

  provisioner "local-exec" {
    command = <<TOF
    password=$(aws secretsmanager get-secret-value --secret-id myrdscreds | jq '.SecretString | fromjson | .password' | tr -d '"')
    aws rds modify-db-cluster --db-cluster-identifier ${module.myrdsdatabase.cluster_id} --master-user-password $password --apply-immediately
    TOF

    interpreter = ["bash", "-c"]
  }
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*cin 16

这个问题没有具体的解决方案。关于在 TF 中处理机密的问题,在TF github 问题上已有近 7 年的历史,但仍然很活跃。

在你的问题中,你已经避免了aws_secretsmanager_secret_version这是一个好的做法。aws_secretsmanager_secret_version 不会保护您的秘密以纯文本形式保存在 TF 状态文件中!

一般来说,人们会做两件事来保守秘密:

  1. 将您的 TF 状态存储在远程后端。例如具有严格IAM 和存储桶策略控制以及静态加密的 S3。
  2. 使用外部过程设置数据库的密码。一种方法是local-exec,其他方法可以通过使用远程 lambda aws_lambda_invocation

其他方法也是可能的,例如通过 CloudFormation (CFN) 从 TF 创建 RDS 数据库。CFN 有一种通过动态引用安全地访问秘密管理器的正确方法。