跳轉到

Terraform Secrets Management with random_password

概念概覽

核心模式

核心知識

核心模式

使用 hashicorp/random v3.8.1 provider 的 random_password resource 自動生成強密碼,再透過 aws_secretsmanager_secret_version 存入 Secrets Manager,完全消除手動 TF_VAR 環境變數的暴露風險。

resource "random_password" "aurora" {
  length  = 32
  special = false
}

resource "aws_secretsmanager_secret_version" "database" {
  secret_id     = aws_secretsmanager_secret.database.id
  secret_string = jsonencode({ password = random_password.aurora.result })
}

驗證方式

terraform plan 執行後,所有 aws_secretsmanager_secret_version.*secret_string 欄位必須顯示為 (sensitive value),不得有任何明文出現在 terminal output。本 session 已由實際 plan 輸出截圖確認。

Secrets 路徑規範

密碼存放路徑:matchrpg/databasematchrpg/redismatchrpg/appmatchrpg/admin

重要注意事項

  • random_password 結果存於 Terraform state,S3 state bucket 必須啟用 AES256 SSE + Versioning
  • Secret Rotation 是否啟用需後續確認(本 session 遺留技術債)

經驗教訓

  • 手動 TF_VAR_xxx 環境變數會暴露在 terminal history,應改用 random_password 自動生成

  • terraform plan 的 (sensitive value) 輸出是驗證密碼保護是否正確實作的最直接依據

  • random_password 的 special = false 是為了相容不支援特殊字元的服務(如 Aurora)

常見陷阱

  • Secret Rotation 不會自動啟用,需手動到 Secrets Manager 控制台確認並設定

  • Terraform state 若未加密,random_password 結果仍有洩漏風險

最佳實踐

  • 所有密碼一律用 random_password resource 生成,不手動指定

  • plan 輸出後先確認所有 secret_string 欄位都顯示 (sensitive value) 再執行 apply

  • S3 state bucket 必須啟用加密與版本控制,因 random_password 結果存於其中

  • 新增 provider 時明確鎖定版本(如 random v3.8.1)

相關概念

相關視角

以下頁面與本概念共享主題,但從不同角度切入。保留獨立視角同時提供交叉參考:

來源 Sessions

日期 Session 貢獻摘要

| 2026-03-19 | 12166813-461c-4fea-8bdc-9685a03af89c | 完整記錄了用 Terraform random_password + Secrets Manager 取代手動 TF_VAR 環境變數的實作模式,並有 terraform plan 實際輸出(sensitive value)作為驗證依據。 |


本概念頁面由 Semi-Brain Wiki 系統自動維護

最後更新: 2026-03-19