TERRAFORM APPLY コース

state に秘密を
残さない Terraform

秘密の表示を隠すことと、stateに保存しないことは別問題です。後者を解決するのが ephemeral と write-only 属性です。

TL;DR
  1. sensitive は主に表示制御。
  2. ephemeral値は実行時だけ存在する。
  3. write-only属性はproviderへ渡してもstateへ残さない。

01 sensitive の限界

stateに残る秘密のリスク
マスク表示でも、通常のresource値はstateに残る。
state は秘密保管庫ではありません。 stateへのアクセス権を持つ人が秘密を読める設計にしないことが重要です。

02 ephemeral + write-only の経路

秘密をstateに残さずRDSへ渡す図
一時値をRDSへ渡し、stateには永続化しない。

ephemeral "random_password" で生成した値を、password_wo のような write-only 属性へ渡す。必要ならSecrets Manager等の専用ストアにも保存し、stateを正本にしない。

03 秘密の保管とローテーション

Secrets Managerとversion管理
秘密の値ではなく、変更を示すversionをTerraformで管理する。

write-only値は後からTerraform outputで読めません。再参照が必要な値はSecrets Manager等から読む。更新は password_wo_version のような意図的なversion変更で追跡します。

結論: secretの値は専用ストア、Terraformは構成と更新意思を管理する。これでstateを不用意な秘密の複製にしません。