terraform 在状态文件中存储敏感数据
terraform storing sensitive data in state file
我正在使用敏感度为 true 的变量,尽管状态文件存储了 ID 和密码。有什么办法避免吗?
variable "rs_master_pass" {
type = string
sensitive = true
}
在状态文件中,
"master_password": 'password'
即使手动从状态中取出,每次应用都会返回。
没有“简单”的方法可以避免这种情况。您必须 而不是硬编码 TF 文件中的值。如您所见,设置 sensitive = true
并不能防止以纯文本形式存在秘密。
在 TF 中正确处理机密的一般方法是:
- 使用专门的外部保险库,例如 Terraform Vault、AWS Parameter Store 或 AWS Secret Manger。必须单独设置它们,以免它们的秘密在 TF 状态文件中可用。
- 使用
local-exec
在 TF 之外设置 秘密。您在 local-exec
中所做的任何事情都不会存储在 TF 状态文件中。这通常是为了将 TF 代码中可能需要的虚拟机密(例如 RDS 密码)更改为 TF 知识之外的实际值。
- 如果无法访问上述解决方案,那么您必须保护您的状态文件(无论如何这是一个好习惯)。这通常是通过在严格的访问策略下将其远程存储在 S3 中来完成的。
我正在使用敏感度为 true 的变量,尽管状态文件存储了 ID 和密码。有什么办法避免吗?
variable "rs_master_pass" {
type = string
sensitive = true
}
在状态文件中,
"master_password": 'password'
即使手动从状态中取出,每次应用都会返回。
没有“简单”的方法可以避免这种情况。您必须 而不是硬编码 TF 文件中的值。如您所见,设置 sensitive = true
并不能防止以纯文本形式存在秘密。
在 TF 中正确处理机密的一般方法是:
- 使用专门的外部保险库,例如 Terraform Vault、AWS Parameter Store 或 AWS Secret Manger。必须单独设置它们,以免它们的秘密在 TF 状态文件中可用。
- 使用
local-exec
在 TF 之外设置 秘密。您在local-exec
中所做的任何事情都不会存储在 TF 状态文件中。这通常是为了将 TF 代码中可能需要的虚拟机密(例如 RDS 密码)更改为 TF 知识之外的实际值。 - 如果无法访问上述解决方案,那么您必须保护您的状态文件(无论如何这是一个好习惯)。这通常是通过在严格的访问策略下将其远程存储在 S3 中来完成的。