🦈

Terraform Ephemeral Resourceの仕様と対応状況

2024/12/15に公開

Epehemral Resource ってなぁに?

Terraform v1.10.0から Ephemeral ResourceがGAされました
これまではaws_ssm_parameterなどはtfstateにキー情報が保持されてしまい、tfstateに秘匿情報が保持されていました。
クラウドプロバイダの権限管理だけでなく、tfstateも権限管理する必要がありました。

小技として、ignore_changesを利用し初期値は適当な値にしておき、後からコンソール上で上書きする方法もありますが、差分として検知するかどうか、しか仕様として定義されておらず、
tfstateへの更新は各Terraform Providerの実装次第です。

Resourceのignore_changes時の挙動と課題

resource
aws_ssm_parameter tfstateに値を上書きする
aws_secretsmanager_secret_version tfstateに値を上書きしない

上記の問題は従来はVaultを使うことが案内されていましたが、別途鍵を保持するサーバのようなものを用意する必要があり、管理構成が大きくなってしまい導入しづらい側面がありました。
tfstateに利用しない秘匿情報を保持しないでくれ、という要件のためには少々大きい構成ですね

そこで、epehemeral Resourceという新しいリソースが登場しました
ephemeral Resourceはその名の通り、tfstateには保持せず、参照されたタイミングでのみ値を持ってきます。

Ephemeral Context

Ephemeralな値を参照できるのはEpehmeral Contextと呼ばれる条件が揃った場合に限ります。

  • 別のephemeral resource上での参照
  • Local Value
  • Epehmeral Variable
    ephemeral = true指定されたVariable
  • Ephemera Outputs
    ephemeral = true指定されたOutputs
  • ProviderブロックにおけるProvider設定
    Providerの認証情報に使う用途を想定している
  • ProvisionerのConnectionブロック内

対応状況

執筆時点:2024 12/15

AWS (v5.81.0)

  • aws_ssm_parameter
  • aws_secretsmanager_secret_version
  • aws_lambda_invocation
  • aws_kms_secrets

インスタンスのパスワード系はまだ未対応

Google (v6.13.0)

  • google_service_account_key
  • google_service_account_jwt
  • google_service_account_id_token
  • google_service_account_access_token

Azurem (v4.14.0)

  • azurerm_key_vault_certificate
  • azurerm_key_vault_secret

EOF

Discussion