簡體   English   中英

terraform 從 gcp secret 創建 k8s secret

[英]terraform create k8s secret from gcp secret

我已經設法在 terraform 中實現了創建敏感資源的流程,而沒有在任何時候透露敏感細節是什么,因此不會以純文本形式存儲在我們的 github 存儲庫中。 我通過讓 TF 創建一個服務帳戶,它是關聯的 SA 密鑰,然后創建一個從 SA 密鑰引用 output 的 GCP 機密來完成此操作。

我現在想看看是否有任何方法可以對某些預定義的數據庫密碼執行相同的操作。 流程會略有不同:

  • 手動創建 GCP 秘密(在秘密管理器中),它具有我們的 PGbouncer 實例將使用的純文本數據庫密碼列表的值(更多信息在流程后面)
  • 我使用 terraform import 導入它所以 terraform state 現在知道這個資源,即使它是在 TF 之外創建的,但是我剛剛添加的秘密版本作為secret_data = "" (否則將純文本密碼詳細信息放在這里會破壞對象!)
  • 我現在想從google_secret_manager_version中獲取secret_data以添加到kube.netes_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 版本以在 kube.netes 中使用,但不在資源中設置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 = ""
}

如果您只想檢索/讀取秘密而不主動管理它,那么您可以改用關聯data

data "google_secret_manager_secret_version" "pgbouncer-secret-uat-v1" {
  provider = google-beta
  
  secret = google_secret_manager_secret.pgbouncer-secret-uat.id
}

然后,您可以使用 Kube.netes 集群中的值作為數據導出資源屬性的秘密: data.google_secret_manager_secret_version.pgbouncer-secret-uat-v1.secret_data 請注意,提供者可能會將此導出的資源屬性標記為sensitive ,並且會帶來正常的后果。

您還可以查看完整文檔以獲取更多信息。

此外,由於您將資源導入 state 以在 Terraform 配置中管理它,因此您需要在從配置中刪除它的同時將其從 state 中刪除。 您可以使用terraform state rm google_secret_manager_secret_version.pgbouncer-secret-uat-v1最輕松地做到這一點。 然后,您可以安全地從您的配置中刪除資源,並將data單獨包含在您的配置中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM