【发布时间】:2021-10-26 16:23:56
【问题描述】:
我已经成功地实现了在 terraform 中创建敏感资源的流程,而在任何时候都没有透露敏感细节是什么,因此不会以纯文本形式存储在我们的 github 存储库中。为此,我让 TF 创建了一个服务帐户,它是关联的 SA 密钥,然后创建一个 GCP 密钥,例如引用来自 SA 密钥的输出。
我现在想看看是否有任何方法可以对某些预定义的数据库密码执行相同的操作。流程会略有不同:
- 手动创建 GCP 机密(在机密管理器中),其值是我们的 PGbouncer 实例将使用的纯文本数据库密码列表(在流程后面的详细信息)
- 我使用 terraform import 导入此资源,因此 terraform state 现在知道此资源,即使它是在 TF 之外创建的,但我刚刚添加为
secret_data = ""的秘密版本(否则将纯文本密码详细信息放在这里失败对象!) - 我现在想从
google_secret_manager_version中获取secret_data添加到kubernetes_secret中,以便在我们的GKE 集群中使用它。
但是,当我运行terraform plan 时,它想更改我手动创建的 GCP 密钥的值
# google_secret_manager_secret_version.pgbouncer-secret-uat-v1 must be replaced
-/+ resource "google_secret_manager_secret_version" "pgbouncer-secret-uat-v1" {
~ create_time = "2021-08-26T14:42:58.279432Z" -> (known after apply)
+ destroy_time = (known after apply)
~ id = "projects/********/secrets/pgbouncer-secret-uat/versions/1" -> (known after apply)
~ name = "projects/********/secrets/pgbouncer-secret-uat/versions/1" -> (known after apply)
~ secret = "projects/********/secrets/pgbouncer-secret-uat" -> "projects/*******/secrets/pgbouncer-secret-uat" # forces replacement
- secret_data = (sensitive value) # forces replacement
有什么想法可以解决这个问题吗?我想导入 google secret 版本以在 kubernetes 中使用,但不要在资源中设置 secret_data 值,因为我不希望它覆盖我手动创建的内容。这是我正在谈论的相关 terraform 配置:
resource "google_secret_manager_secret" "pgbouncer-secret-uat" {
provider = google-beta
secret_id = "pgbouncer-secret-uat"
replication {
automatic = true
}
depends_on = [google_project_service.secretmanager]
}
resource "google_secret_manager_secret_version" "pgbouncer-secret-uat-v1" {
provider = google-beta
secret = google_secret_manager_secret.pgbouncer-secret-uat.id
secret_data = ""
}
【问题讨论】:
标签: google-cloud-platform terraform kubernetes-secrets google-secret-manager