例如,可以将密码引用为环境变量吗?即使我这样做了,它也会被储存在州里,对吗?
# Configure the MySQL provider
provider "mysql" {
endpoint = "my-database.example.com:3306"
username = "app-user"
password = "app-password"
}发布于 2019-09-03 17:52:33
状态快照只包含resource、data和output块的结果,以便Terraform可以在创建计划时将它们与配置进行比较。
provider块中的参数不会保存在状态快照中,因为Terraform只需要提供程序配置的当前参数,并且从不需要与前面的参数进行比较。
即使提供程序参数不包含在状态中,最好将特定的凭据排除在配置之外。提供者倾向于为凭据提供论据,作为特殊情况下的最后手段,但也应提供其他提供凭据的方法。对于某些提供程序,有一些现有的标准方法来传递凭据,例如使用与AWS相同的凭据机制的AWS提供程序。其他提供程序定义自己的机制,例如环境变量。
特别是对于MySQL提供程序,我们应该在配置中设置endpoint,因为这说明了Terraform正在管理什么,但是我们应该使用环境变量来指定谁在运行Terraform。我们可以使用MYSQL_USERNAME和MYSQL_PASSWORD环境变量为运行Terraform的个人或系统指定凭据。
这方面的一个特殊例外是Terraform本身负责管理凭据。在这种情况下,提供凭据的资源将其数据(包括密码)存储在状态中。没有办法避免这种情况,因为否则就不可能在配置的其他地方使用密码。
对于管理凭据(而不仅仅是使用凭据)的Terraform配置,理想情况下,它们应该与其他Terraform配置分离,并将它们的状态快照存储在一个位置,在该位置可以对它们进行加密,并且只能对针对这些配置运行Terraform的个人或系统进行访问。在这种情况下,将状态快照本身视为一个秘密。
发布于 2019-09-02 01:28:19
不,这不可能。最好的选择是使用安全和加密的远程后端(如S3 + Dynamodb )来保存状态文件。我也读过一些关于使用git-crypt的人的文章,但我从未尝试过。
也就是说,您可以使用环境变量作为输入来隐藏源代码中的秘密。
https://stackoverflow.com/questions/57740689
复制相似问题