gpt4 book ai didi

(远程)状态文件中的 Terraform 和明文密码

转载 作者:行者123 更新时间:2023-12-04 03:56:43 25 4
gpt4 key购买 nike

Terraform repo 上有很多关于这个问题的 Git 问题,有很多有趣的评论,但到目前为止,我仍然看不到这个问题的解决方案。

Terraform 将纯文本值(包括密码)存储在 tfstate 文件中。

大多数用户都需要远程存储它们,以便团队可以在相同的基础设施上同时工作,其中大多数用户将状态文件存储在 S3 中。

那么如何隐藏密码呢?

这里有人使用 Terraform 进行生产吗?您是否以纯文本形式保存密码?
您是否有特殊的工作流程来删除或隐藏它们?运行 terraform apply 时会发生什么?然后?

我考虑了以下选项:

  • 将它们存储在 Consul 中 - 我不使用 Consul
  • 从状态文件中删除它们 - 这需要每次执行另一个进程,我不知道 Terraform 将如何处理带有空/不可读/无效密码的资源
  • 存储一个默认密码,然后更改(因此 Terraform 在 tfstate 文件中将有一个无效密码) - 与上面相同
  • 使用 Vault 资源 - 听起来这还不是一个完整的工作流程
  • 使用 git-repo-crypt 将它们存储在 Git 中 - Git 也不是一个选项
  • 全局加密 S3 存储桶 - 如果人们以“管理员”级别访问 AWS,这不会阻止人们看到纯文本密码,但它似乎是迄今为止的最佳选择

  • 从我的角度来看,这是我希望看到的:
  • 状态文件不包含密码
  • 状态文件已加密
  • 状态文件中的密码是指向其他资源的“指针”,例如“vault:backend-type:/path/to/password”
  • 每次 Terraform 运行都会从指定的提供程序
  • 收集所需的密码

    这只是一个愿望。

    但回到这个问题 - 你如何在生产中使用 Terraform?

    最佳答案

    我想知道如何处理最佳实践,但让我分享一下我的案例,尽管它是 AWS 的一种有限方式。基本上我不使用 Terraform 管理凭据。

  • 为 RDS 设置初始密码,忽略与生命周期 Hook 的区别,稍后更改。忽略差异的方法如下:
     resource "aws_db_instance" "db_instance" {
    ...
    password = "hoge"

    lifecycle {
    ignore_changes = ["password"]
    }
    }
  • IAM 用户由 Terraform 管理,但包括密码在内的 IAM 登录配置文件不是。我认为 IAM 密码应该由个人而不是管理员管理。
  • 应用程序使用的 API key 也不由 Terraform 管理。它们使用 AWS KMS( key 管理服务)加密,加密数据保存在应用程序的 git 存储库或 S3 存储桶中。 KMS 加密的优点是可以通过 IAM 角色控制解密权限。无需管理用于解密的 key 。
  • 虽然我还没有尝试过,但最近我注意到 aws ssm put-parameter --key-id可以用作支持 KMS 加密的简单键值存储,因此这也可能是一个不错的选择。

  • 我希望这可以帮助你。

    关于(远程)状态文件中的 Terraform 和明文密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42076971/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com