如何隐藏/屏蔽存储在terraform状态文件中的凭据

68次阅读
没有评论

问题描述

在使用terraform创建资源时,遇到一个问题:当创建一个资源密钥(例如ibm_resource_key)时,所有创建的凭据都以明文形式存储在状态文件中。用户想知道如何隐藏/屏蔽状态文件中的凭据部分/秘密部分。

解决方案

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

方案1

在terraform中,tfstate文件可以被视为你的”可执行文件”。因此,你无法从中隐藏/删除敏感值。但是,你可以将其安全地存储起来。Terraform提供了一些教程,介绍如何配置后端以存储tfstate文件(因为该文件绝不能出现在Git存储库中)。通常,这包括一个S3存储桶(用于存储内容)和一个DynamoDB表(用于版本管理)。
以下是配置后端以存储tfstate文件的示例:

terraform {
  backend "s3" {
    bucket = "your-s3-bucket"
    key    = "path/to/your/tfstate/file"
    region = "your-aws-region"
    dynamodb_table = "your-dynamodb-table"
  }
}

在上面的示例中,我们使用S3作为后端存储tfstate文件,并指定了S3存储桶、tfstate文件的路径、AWS区域和DynamoDB表。

方案2

另一种策略是将密码放在terraform管理之外,并使用数据查询来收集所需的密码。这样,如果需要进行密码轮换,terraform不会使用先前的密码重新配置资源。使用AWS的Secrets Manager或HashiCorp Vault是不错的选择。

方案3

如果你将凭据存储在terraform状态文件中,你可以使用terraform state show命令来屏蔽敏感字段:

terraform state show -no-color module.web | sed -e 's/sensitive_string.<em>/sensitive_string = "</em>**"/'

这将用星号替换敏感字符串字段。
以上是几种隐藏/屏蔽存储在terraform状态文件中凭据的解决方案。根据你的具体需求和环境选择适合你的方法。

正文完