首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在.tf和.tfstate中管理秘密?

如何在.tf和.tfstate中管理秘密?
EN

DevOps用户
提问于 2017-02-28 18:14:01
回答 6查看 26.6K关注 0票数 63

我想使用Terraform MySQL提供者来保存一个mysql用户列表和用于创建新测试环境的授权。.tf.tfstate文件似乎都希望以明文形式存储MySQL密码。

关于.tf:

据我理解,.tf文件处于修订控制中,由团队维护。当秘密在.tf中时,这种做法有何不同?加密这些值是可能的吗?

关于.tfstate:

在运行Terraform之后,我可以安全地存储.tfstate,但是这个用例最好不要存储它?

EN

回答 6

DevOps用户

发布于 2018-07-27 05:03:52

如果您在AWS上,那么请看一下AWS博客上的“正确的秘密管理方式” by Segment.io。我们提倡对所有客户使用chamber来管理秘密。它通过利用AWS系统管理器参数存储(SSM)和KMS密钥来工作。这确保秘密在静止(和传输中)被加密,使用IAM进行保护,使用CloudTrails进行审计,并且只在运行时作为环境变量公开。

配置室和设置KMS键之后,我们将秘密写入参数存储区。

代码语言:javascript
复制
chamber write db TF_VAR_DB_USER foobar
chamber write db TF_VAR_DB_PASS secret

那么当你打电话给terraform的时候就用这些秘密。

代码语言:javascript
复制
chamber exec db -- terraform plan

这假设您已经在HCL代码中定义了一个名为DB_USERDB_PASS的变量。

例如,可以将其添加到variables.tf中。

代码语言:javascript
复制
variable "DB_USER" { }
variable "DB_PASS" { }

注意:chamber总是以大写格式导出环境变量。

我们提供了一个名为terraform-aws-kms-key的terraform模块来简化KMS的配置。查看我们的详细文档,并举例说明如何使用带有多个名称空间的chamber以及如何使用带地形的密室来管理秘密。有关供应室依赖关系,请参见我们的完整参考示例

至于.tfstate,您对状态文件中的纯文本秘密的存在提出了一个很好的观点。这真的是无法避免的。为了使地形计算变化来建立一个计划,它需要知道“前”和“后”的状态。因此,我们建议使用带有强制版本控制的加密S3桶。使用terraform-aws-tfstate-backend模块根据最佳实践提供桶和DynamoDB锁表。

票数 11
EN

DevOps用户

发布于 2017-09-15 19:10:53

我们避开地形来处理我们的秘密。即使如前所述,通过var文件"secrtes.tfvars“注入机密,这些秘密也将存储在terraform (远程)状态中。

您可以使用例如S3授权来保护远程状态文件,或者可以提供本地状态文件,但我们决定不依赖这种保护。

票数 8
EN

DevOps用户

发布于 2018-02-15 07:31:16

要将机密导入.tf文件,还可以使用外部数据源。这可能是一个解密你的秘密的剧本。

票数 3
EN
页面原文内容由DevOps提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://devops.stackexchange.com/questions/79

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档