Terraform的本地状态(2个tfstate文件)包含非常敏感的信息

37次阅读
没有评论

问题描述

在使用Terraform描述Azure系统时,其中包括CosmosDB和Keyvaults。他发现Terraform创建了所有资源,并且他能够将CosmosDB的输出(数据库密钥)作为Keyvault的输入(作为密钥保管库的密钥)来安全地存储数据库密钥。然而,他在查看terraform.tfstate文件时发现,所有的CosmosDB密钥(主键和副键,读写和只读)以及保险库的明文密钥都以明文形式存储在其中。
这就导致了一个问题 – 这些状态文件显然是必不可少的,必须进行维护(据我所知),但我真的不喜欢将它们提交到任何仓库中。除了尽可能冗余地维护本地仓库,我想不出其他好的解决方案了。

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1

不要将状态存储在除远程后端之外的任何地方。即使将其存储在远程后端中,密钥也会再次以明文形式显示,这是Terraform的一个持续限制。
在我们的情况下,我们使用AWS S3后端(尽管我们有多个云环境),我们从中获得了以下关键优势:
– 在传输和静态时进行加密。
– 访问策略配置。
– 接近最大的耐久性和可用性。
– 锁定能力。
– 版本控制。
请不要使用尽可能冗余的本地仓库。

方案2

请注意以下操作注意版本差异及修改前做好备份。
正确的做法是:
– 不要将状态文件提交到源代码控制中。
– 使用远程状态。
– 不要允许用户访问生产环境的远程状态。
– 强制执行生产环境的持续部署。

正文完