🦈
Terraform Ephemeral Resourceの仕様と対応状況
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