由 Linux 基金会管理、社区驱动的基础设施即代码(IaC)工具 OpenTofu,近日在其夜间版本中引入了两项重磅功能——临时属性(Ephemeral) 与 只写属性(Write-Only)。
这两项改进将于 1.11 正式版本 中推出,旨在彻底提升秘密(Secrets)与状态文件的安全管理。
🧩 什么是临时属性(Ephemeral Attributes)
简单来说,临时属性就是一次性变量。
它的值仅在一次执行(plan
或 apply
)期间存在,执行结束后立即被丢弃,不会写入状态文件(state)。
过去,即便在 Terraform 或 OpenTofu 中将变量标记为“敏感(Sensitive)”,
它们依然会以明文形式存在于状态文件中,只是不会显示在日志中。
这意味着,一旦状态文件被暴露,机密信息依旧面临风险。
而临时属性的引入,直接从根本上消除了这一风险。
✅ 临时属性的四个关键特性:
- 值仅在单次执行期间可用。
- 永不写入状态文件。
- 任务完成后立即销毁,不可读取。
- 仅对支持此特性的资源生效。
举例来说,当你在 OpenTofu 中配置一条 SSH 密钥、数据库密码或 KMS 加密密钥时,
如果它被标记为临时属性,那么这些值在执行结束后将不会出现在任何状态数据中。
这对于管理机密变量、临时访问密钥等高风险配置场景,堪称一次革命性的安全改进。
🔐 只写属性(Write-Only):安全传递而不保存
除了临时属性,OpenTofu 还引入了一个互补功能:只写属性(Write-Only Attributes)。
只写属性允许将临时数据安全地传递给资源,而这些数据不会被保存到状态文件中。
换句话说,资源可以使用这些值,但不会“记住”它们。
举例:
在部署时,用户可以将密码作为只写属性传递给一个数据库实例资源,
数据库会在配置阶段使用该密码创建账户,但状态文件中不会出现任何明文密码记录。
这让敏感数据的“使用与存储”实现了彻底分离。
🧠 临时 + 只写 = 更安全的 IaC 工作流
这两项功能的结合,意味着 OpenTofu 在 IaC 安全性上实现了质的飞跃。
它允许开发者构建“零持久化秘密”的自动化工作流,例如:
- 临时 SSH 隧道访问
- KMS 密钥分发任务
- 临时数据库密码注入
- 安全文件传输或 API Token 临时认证
这些秘密数据将在执行结束后彻底销毁,不会在日志、状态或配置文件中留下任何痕迹。
⚠️ 但也要注意这些限制
需要强调的是,临时属性并非万能方案。
- 数据不会存储,因此无法在后续状态中进行验证或复用;
- 并非所有资源或提供者都会立即支持临时或只写属性;
- 当前功能仍处于**夜间版本(Nightly Build)**阶段,尚未适合生产环境使用。
项目维护者也特别提醒用户:
“此功能尚未投入生产环境,请勿在关键工作负载中使用。”
🚀 展望:OpenTofu 1.11 将带来什么?
预计在 OpenTofu 1.11 正式版本中,这些特性将被稳定化并正式发布。
这不仅是对 Terraform 长期安全隐患的一次回应,也代表社区在 IaC 安全领域的一次重大突破。
它让开发者第一次可以在 IaC 工作流中真正做到“使用秘密但不保存秘密”。
更多详情可查看 OpenTofu 官方公告。