我想使用Terraform MySQL提供者来保存一个mysql用户列表和用于创建新测试环境的授权。.tf和.tfstate文件似乎都希望以明文形式存储MySQL密码。
据我理解,.tf文件处于修订控制中,由团队维护。当秘密在.tf中时,这种做法有何不同?加密这些值是可能的吗?
在运行Terraform之后,我可以安全地存储.tfstate,但是这个用例最好不要存储它?
发布于 2018-07-27 05:03:52
如果您在AWS上,那么请看一下AWS博客上的“正确的秘密管理方式” by Segment.io。我们提倡对所有客户使用chamber来管理秘密。它通过利用AWS系统管理器参数存储(SSM)和KMS密钥来工作。这确保秘密在静止(和传输中)被加密,使用IAM进行保护,使用CloudTrails进行审计,并且只在运行时作为环境变量公开。
在配置室和设置KMS键之后,我们将秘密写入参数存储区。
chamber write db TF_VAR_DB_USER foobar
chamber write db TF_VAR_DB_PASS secret那么当你打电话给terraform的时候就用这些秘密。
chamber exec db -- terraform plan这假设您已经在HCL代码中定义了一个名为DB_USER和DB_PASS的变量。
例如,可以将其添加到variables.tf中。
variable "DB_USER" { }
variable "DB_PASS" { }注意:chamber总是以大写格式导出环境变量。
我们提供了一个名为terraform-aws-kms-key的terraform模块来简化KMS的配置。查看我们的详细文档,并举例说明如何使用带有多个名称空间的chamber以及如何使用带地形的密室来管理秘密。有关供应室依赖关系,请参见我们的完整参考示例。
至于.tfstate,您对状态文件中的纯文本秘密的存在提出了一个很好的观点。这真的是无法避免的。为了使地形计算变化来建立一个计划,它需要知道“前”和“后”的状态。因此,我们建议使用带有强制版本控制的加密S3桶。使用terraform-aws-tfstate-backend模块根据最佳实践提供桶和DynamoDB锁表。
发布于 2017-09-15 19:10:53
我们避开地形来处理我们的秘密。即使如前所述,通过var文件"secrtes.tfvars“注入机密,这些秘密也将存储在terraform (远程)状态中。
您可以使用例如S3授权来保护远程状态文件,或者可以提供本地状态文件,但我们决定不依赖这种保护。
发布于 2018-02-15 07:31:16
要将机密导入.tf文件,还可以使用外部数据源。这可能是一个解密你的秘密的剧本。
https://devops.stackexchange.com/questions/79
复制相似问题