HashiCorpはEphemeral Values-Terraformでインフラストラクチャをプロビジョニングする際に必要となるパスワードなどの機密情報を保護するための設計概念を導入したTerraform 1.10をリリースした。
以前のバージョンではTerraformのplanやstateファイル内にシークレットを平文保存する手法が弱点とされていたが、これがEphemeral Valuesによって置き換えられた。Ephemeral Valuesは機密データがTerraform成果物に保存されないようにすることで、セキュアな代替手段を提供する。
Ephemeral Valuesの主な特徴は以下の通り。
- Ephemeral入出力変数: 短期間のトークンやセッション識別子など、一時的にのみ存在する必要がある変数をマーキングできる。
- Ephemeralリソース: 各Terraformフェーズで個別に作成または取得できる新リソースモードで、オブジェクトの構成に使用されその後明示的に閉じられる。
このブログではAWS Secrets Managerを使った例でEphemeral Valuesをデモしている。以前はデータソースを通して取得されたシークレットがTerraformのplanとstateファイルに保存されていたが、Ephemeral Valuesではシークレットは取得され使用されるもののどこにも永続的に保存されることはない。
EphemeralリソースはAWS、Azure、Kubernetesを含む主要クラウドプロバイダーで利用可能だが、プロバイダーが要求リソースをサポートしている必要がある。コミュニティの中にはこれを曖昧でHashiCorpの自社VaultプロバイダーにまだEphemeralリソースがないようだと指摘する者もいた。Google Cloudのサポートもまだリリースされていないが、12月9日に予定されている。プロバイダーとそれに対応するEphemeralリソースは以下の通り:
- AWS:
aws_secretsmanager_secret_version
、aws_lambda_invocation
- Azure:
azurerm_key_vault_secret, azurerm_key_vault_certificate
- Kubernetes:
kubernetes_token_request
、kubernetes_certificate_signing_request
LinkedIn投稿で、Achim Christ氏はEphemeral Valuesの動機を探り-Terraformのstateファイル暗号化の代替になることを説明している:
HashiCorpの人々は、state全体を暗号化することは理想的ではないと主張しています。なぜならそれは管理必須となる別のシークレット-暗号化キー-をもたらすからです。そのため従来のstate暗号化では漏洩したTerraform環境が不正アクセスを許した場合、機密データが漏洩する可能性があり、このリスクは"シークレットの氾濫"として知られています。
- Achim Christ氏
しかし一部のコメンテーターはこれが良い解決策だとは考えておらず、Alexandre Nédélec氏はBlueskyでシークレットの暗号化がより良いアプローチかもしれないと提案している。
Terraform 1.10のEphemeral Valuesにはあまり納得できません。シークレットの暗号化の方が良い解決策に思えます。Pulumiはそうしています。OpenTofuはstateの暗号化を可能にしています。なぜTerraformがそれをしないのか理解できません。
Christ氏はさらにEphemeral入力、出力、変数の使用方法の例を示している。また、Terraform 1.11で予定されている書き込み専用属性のユースケースについても説明している。彼は、「Ephemeralの概念はコアTerraform構成言語への価値ある機能追加だ」とまとめている。他の反応も好意的で、Marko Bevc氏はBlueskyへの投稿でパスワードを安全に保存することのベネフィットについて述べている:
Terraform v1.10のリリースにとてもワクワクしています。Terraform評価の各フェーズで再読み込みされstateに保存されないEphemeralリソースとValuesが導入されています。これはセンシティブな値を安全に保存するためのより良い方法だと思います。
シークレット管理の改善に加えてTerraform 1.10には一部のパフォーマンス強化が含まれており、多数のリソースインスタンスが使用される場合のTerraform planおよび適用操作が改善された。
TerraformのフォークであるOpenTofuがEphemeral Valuesを実装するかどうかはまだ不明だ。しかし、OpenTofuのGitHubアカウントではこれを追跡するためのissueが公開されている。
Terraform 1.10は現在ダウンロード可能で、HCP Terraformでも利用できる。