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/database、matchrpg/redis、matchrpg/app、matchrpg/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)
相關概念¶
相關視角¶
以下頁面與本概念共享主題,但從不同角度切入。保留獨立視角同時提供交叉參考:
- Alertmanager ExternalSecret — 共享:
aws-secrets-manager,terraform/ 獨特:alertmanager,external-secret
來源 Sessions¶
| 日期 | Session | 貢獻摘要 |
|---|---|---|
| 2026-03-19 | 12166813-461c-4fea-8bdc-9685a03af89c | 完整記錄了用 Terraform random_password + Secrets Manager 取代手動 TF_VAR 環境變數的實作模式,並有 terraform plan 實際輸出(sensitive value)作為驗證依據。 |