是否可以使秘密保持状态?

时间:2019-08-31 18:31:38

标签: terraform

例如可以将密码作为环境变量引用?即使我这样做了,它仍然会以正确的状态存储吗?

variable = models.DecimalField(max_digits=8, decimal_places=2, blank=True, null=True) 

2 个答案:

答案 0 :(得分:1)

状态快照仅包含resourcedataoutput块的结果,以便Terraform在创建计划时可以将其与配置进行比较。

provider块内的参数不会保存在状态快照中,因为Terraform仅需要提供程序配置的 current 参数,而无需与前一个进行比较。

即使状态中未包含提供者参数,最好也不要将特定凭据保留在您的配置中。提供者倾向于提供凭据的论据,作为在异常情况下的最后手段,但也应提供其他方式来提供凭据。对于某些提供程序,存在一些传递证书的现有标准方法,例如,AWS提供程序使用与AWS CLI相同的证书机制。其他提供程序定义了自己的机制,例如环境变量。

特别是对于MySQL提供程序,我们应该在配置中设置endpoint,因为它描述了 Terraform正在管理的内容,但是我们应该使用环境变量来指定正在运行的地形。我们可以使用MYSQL_USERNAMEMYSQL_PASSWORD环境变量为运行Terraform的个人或系统指定凭据。


一个特殊的例外是Terraform本身是负责管理凭据的人。在这种情况下,提供凭据的资源将在状态中存储其数据(包括密码)。无法避免这种情况,因为否则将无法在配置中的其他位置使用密码。

对于具有管理凭据(而不只是使用凭据)的Terraform配置,理想情况下应将它们与其他Terraform配置分开,并将其状态快照存储在以下位置它们可以在静止状态下进行加密,并且只有针对这些配置运行Terraform的个人或系统才能访问。在这种情况下,请将状态快照本身视为秘密。

答案 1 :(得分:0)

否,不可能。最好的选择是使用安全且加密的远程后端(例如S3 + Dynamodb)来保存状态文件。我还读过有关使用git-crypt的人的信息,但从未尝试过自己。

也就是说,您可以使用环境变量作为输入来将秘密隐藏在源代码之外。