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

2023-11-25

Terraform 存储库上有许多关于此问题的 Git 问题,其中有很多有趣的评论,但截至目前我仍然没有看到此问题的解决方案。

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

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

那么如何隐藏你的密码呢?

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

我考虑过以下选项:

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

从我的角度来看,这是我希望看到的:

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

这只是一个愿望。

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


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

  • 为RDS设置一个初始密码,忽略与生命周期钩子的差异,稍后更改。忽略差异的方法如下:

     resource "aws_db_instance" "db_instance" {
       ...
       password = "hoge"
    
       lifecycle {
         ignore_changes = ["password"]
       }
     }
    
  • IAM 用户由 Terraform 管理,但 IAM 登录配置文件(包括密码)则不是由 Terraform 管理。我认为IAM密码应该由个人管理,而不是由管理员管理。

  • 应用程序使用的 API 密钥也不由 Terraform 管理。它们使用AWS KMS(密钥管理服务)进行加密,加密后的数据保存在应用程序的git存储库或S3存储桶中。 KMS加密的优点是解密权限可以由IAM角色控制。无需管理解密密钥。

  • 虽然我还没有尝试过,但最近我注意到aws ssm put-parameter --key-id可以用作支持 KMS 加密的简单键值存储,因此这也可能是一个不错的选择。

我希望这可以帮助你。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • 为什么我无法重写接口方法?

    假设我有一个如下界面 interface CardHolder IEnumerable
  • Scala:如何继承“静态槽”?

    嗯 我正在学习 Scala 所以这个问题对于大多数人来说可能太基础了 在 Java 中 我可以在类中拥有静态槽 函数或变量 然后我也会在继承类中拥有该槽 在 Scala 中 我没有静态槽 但有伴生对象 但我发现这些对象不是继承类的一部分 所
  • 如何使用ABCPdf.NET从PDF文件的所有页面中提取文本?

    如何使用ABCPdf NET工具从PDF文件中提取内容文本 我尝试了 GetText 方法 但没有提取内容 var doc new Doc var url FileName pdf doc Read url string xmlConten
  • 客户端 HTML 清理有多安全?

    我最近一直在研究 Pagedown js 因为在我的页面上使用 mark down 而不是丑陋的只读文本区域的吸引力 不过 我非常谨慎 因为欺骗经过消毒的转换器似乎很容易 我已经看到了一些关于 Angular js 及其 html 绑定的讨
  • 如何使用ajaxStart显示加载微调器?

    我有一个使用命令 shell exec 运行 python 脚本的网页 我想要一个加载微调器 在 python 脚本运行时显示 请稍候此页面加载 之类的消息 然后在完成后显示其余的回显 HTML 我找到了一个似乎不错的解决方案https s
  • 生成迷宫的好算法是什么? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 假设你想要一个 N M 网格上的简单迷宫 有一条路径通过 并且有很多死胡同 但这看起来 正确 即就像有人手工制作的 没有太多微小的死胡同和所有这些
  • org.apache.spark.rpc.RpcTimeoutException:Futures 在 [120 秒] 后超时。这个超时由spark.rpc.lookupTimeout控制

    将 Spark 应用程序提交到 YARN 时 出现与容器相关的以下错误 HADOOP 2 7 3 SPARK 2 1 环境在单节点集群中运行伪分布式模式 该应用程序在本地模型中运行时可以完美运行 但是尝试使用 YARN 作为 RM 在集群模
  • 在Android中以编程方式创建基于VpnService的L2TP/IPSec VPN

    我搜索了一天 关于基于VpnService创建L2TP IPSec VPN 但没有匹配到的结果 使用本地VPN https github com hexene LocalVPN 我可以基于 VPNService 创建一个 VPN OpenV
  • Solr - 如何“分组”和“限制”?

    假设我从数据库中索引了以下内容 Id Code Description 1 A1 Hello world 2 A1 Hello world 123 3 A1 World hello hi 4 B1 Quick fox jumped 5 B1
  • 在Vue中将多个事件绑定到v-on指令

    在 jQuery 中 您可以通过执行以下操作来绑定多个事件 myDiv on touchstart mousedown more code here 据我了解 这会监听touchstart OR mousedown同时地 但我不知道如何用
  • 将单词转换为字符列表[重复]

    这个问题在这里已经有答案了 我可以将一个句子分成单独的单词 如下所示 string This is a string with words string split This is a string with words 但我不知道如何将单
  • 从 formatCurrency 中删除货币符号

    我正在尝试格式化从数据库获取的收入总额 并使用 php 的 NumberFormatter 类和 formatCurrency 方法 但是 我不想用这个打印出实际的欧元 欧元符号 我只想要简单的数字 带有逗号和小数点 例子 1234 56
  • 手电筒相机2 API

    Android Camera2 API 中可以同时使用相机预览和手电筒吗 当我尝试使用时CameraManager setTorchMode String cameraId boolean enabled 当相机未打开时它工作正常 但是当相
  • 将 Javascript 回调传递给 Qml 中的 C++ 调用方法

    在 C 中 我有一个带有可调用函数的类 我想做的是从 QML Javascript 调用该方法 我已经开始工作 并向其传递一个 Javascript 回调 在代码中 我定义我的类如下 class MyObject public QObjec
  • Rails - AJAX 模态对话框?

    我有兴趣学习如何 AJAX 模式对话框 通常 如果我想向网站添加模式对话框 我会在主 JS 文件中添加 jquery UI 对话框代码 并将其绑定到 ID 我相信使用 Rails 我可以创建一个链接 它从服务器获取所有对话框代码 然后打开对
  • 将 TBytes (UTF-16) 转换为字符串的最佳方法是什么?

    在 Delphi 2009 中将声明为 TBytes 的字节数组转换为 unicode 字符串的最佳方法是什么 在我的特定情况下 TBytes 数组已经具有 UTF 16 编码数据 每个字符 2 个字节 由于 TBytes 不存储空终止符
  • 为什么 vscode 从打字稿缓存导入包

    我已经开始使用 cli 生成一个反应本机项目 该应用程序似乎工作得很好 但我注意到导入指向打字稿缓存而不是本地节点模块 我什至没有使用打字稿 IDE vscode 1 19 3 import React Component from rea
  • SwiftUI - 如何检测长按按钮?

    我有一个按钮 当按下它时 它会执行一些操作 但我想修改同一个按钮来检测较长的按下时间 并执行一组不同的过程 如何修改此代码以检测长按 Button action some processes Image systemName circle
  • 为什么 numpy 比 python 慢?如何让代码执行得更好

    我将我的神经网络从纯 python 重新编写为 numpy 但现在它的运行速度甚至更慢 所以我尝试了这两个功能 def d a 1 2 3 4 5 b 10 20 30 40 50 c i j for i j in zip a b retu
  • (远程)状态文件中的 Terraform 和明文密码

    Terraform 存储库上有许多关于此问题的 Git 问题 其中有很多有趣的评论 但截至目前我仍然没有看到此问题的解决方案 Terraform 将纯文本值 包括密码 存储在 tfstate 文件中 大多数用户都需要远程存储它们 以便团队可