{"componentChunkName":"component---src-templates-blog-template-js","path":"/ja/blog/introducing-the-psono-terraform-provider","result":{"data":{"markdownRemark":{"html":"<h1>Psono Terraform プロバイダーのご紹介</h1>\n<p>Psono Terraform プロバイダーのベータリリースが、パブリックの\n<a href=\"https://registry.terraform.io/providers/psono/psono/latest\">Terraform Registry</a>\nで利用可能になったことをお知らせします。</p>\n<p>インフラチームは、作成済みの Psono 環境変数エントリ内の個別キーを Terraform のワークフローの一部として管理できるようになりました。\nプロバイダーは既存の値の維持、新しいパスワードの生成、管理された値のローテーション、外部で供給された値の書き込み、\nTerraform の一時リソースを通じたシークレットの読み取りなどを行うことができます。</p>\n<h2>シークレットを Terraform の状態に入れることなく管理</h2>\n<p>IaC（Infrastructure as Code）でのシークレット管理には特別な注意が必要です。\nセンシティブフラグで CLI 出力から値を隠すことはできますが、その値を Terraform の状態からも排除できるとは限りません。\nPsono プロバイダーは Terraform の「書き込み専用」と「一時的」なリソース機能を活用し、この課題を回避します（Terraform 1.11 以降が必要）。</p>\n<p>プロバイダーは主に以下の 3 つのワークフローをサポートしています：</p>\n<ul>\n<li>Psono で値を生成し、管理リソース経由で値を返さない。</li>\n<li>書き込み専用引数（write-only argument）を使って値を供給し、Terraform の plan や state に値が保持されないようにする。</li>\n<li>既存の値を一時リソースを使って読み取り、それを他の一時リソースや書き込み専用のコンテキストにのみ受け渡す。</li>\n</ul>\n<p>これらにより、実際のシークレット値を Psono 内に保管しつつ、シークレットのライフサイクル操作を Terraform で安全に含めることが可能となります。</p>\n<h2>制限付きアクセスとローカル暗号化</h2>\n<p>このプロバイダーは制限された Psono API キーを使用します。\nTerraform が必要とする環境変数エントリだけを割り当て、すべての操作に対し「読み取り権限」を付与します。\nキーの作成・更新・ローテーション・削除にはさらに「書き込み権限」が必要です。\nプロバイダーは無制限の API キーを必要とせず、また金庫エントリやフォルダ、データストアの作成はできません。</p>\n<p>暗号化および復号はプロバイダー内部でローカルに実行されます。\nHTTPS 証明書の検証は無効化できず、プライベート認証局（CA）は PEM 形式の CA バンドル追加により対応可能です。\n本番システムでは必ず HTTPS の Psono URL を使用してください。</p>\n<h2>はじめに</h2>\n<p>Terraform 1.11 以上が必要です。Terraform 構成ファイルにプロバイダーを追加します：</p>\n<pre><code class=\"language-hcl\">terraform {\n  required_version = \">= 1.11.0\"\n\n  required_providers {\n    psono = {\n      source  = \"psono/psono\"\n      version = \"~> 1.0\"\n    }\n  }\n}\n\nprovider \"psono\" {}\n</code></pre>\n<p>Terraform ファイルに認証情報を記載せず、環境変数で設定してください：</p>\n<pre><code class=\"language-bash\">export PSONO_SERVER_URL='https://psono.example.com/server'\nexport PSONO_API_KEY_ID='REPLACE_WITH_API_KEY_ID'\nexport PSONO_API_SECRET_KEY='REPLACE_WITH_API_SECRET_KEY'\n</code></pre>\n<p>作業ディレクトリを初期化します：</p>\n<pre><code class=\"language-bash\">terraform init\n</code></pre>\n<p>Terraform は署名済みのプロバイダーリリースをダウンロードし、そのチェックサム署名を検証します。</p>\n<h2>値の生成とローテーション</h2>\n<p>以下のリソースは、既存の Psono 環境変数エントリ内にある<code>DB_PASSWORD</code>を管理します：</p>\n<pre><code class=\"language-hcl\">resource \"psono_environment_variable\" \"database_password\" {\n  secret_id = var.psono_environment_variables_secret_id\n  name      = \"DB_PASSWORD\"\n\n  length      = 32\n  min_lower   = 4\n  min_upper   = 4\n  min_numeric = 4\n  min_special = 4\n\n  rotation_version = 1\n}\n</code></pre>\n<p>キーがすでに存在する場合、プロバイダーは値を変更せずにそのまま引き継ぎます（アドプト）。\n存在しない場合は、Psono で新しい値を生成して格納します。\n生成された値は管理リソースから返却されず、Terraform の状態にも保存されません。</p>\n<p><code>rotation_version</code>をインクリメントすると、Terraform が値の置き換えを行います。\nこの操作は、もともとアドプトまたは import した値でも置き換えるため、ローテーションの変更は適用前に慎重に確認してください。</p>\n<h2>外部から供給した値を書き込む</h2>\n<p>他のプロバイダーで生成した一時的な値を<code>value_wo</code>で Psono に書き込む例です：</p>\n<pre><code class=\"language-hcl\">ephemeral \"random_password\" \"database\" {\n  length = 32\n}\n\nresource \"psono_environment_variable\" \"database_password\" {\n  secret_id        = var.psono_environment_variables_secret_id\n  name             = \"DB_PASSWORD\"\n  value_wo         = ephemeral.random_password.database.result\n  value_wo_version = 1\n}\n</code></pre>\n<p>この値は Terraform の操作中のみ利用され、plan や state には保存されません。\n値の置き換えが必要な場合は<code>value_wo_version</code>をインクリメントしてください。</p>\n<h2>デフォルトで安全な削除</h2>\n<p>管理リソースを削除しても、デフォルトでは Psono のキーは保持されます。\nこれは Terraform がアドプトしたが作成していない値の保護のためです。\n削除やリソース置き換え時に明示的に Psono からキーを消したい場合のみ\n<code>deletion_policy = \"Delete\"</code>を設定してください。</p>\n<h2>今すぐ利用可能</h2>\n<p>このプロバイダーはオープンソースで、すぐにご利用いただけます：</p>\n<ul>\n<li><a href=\"https://registry.terraform.io/providers/psono/psono/latest\">Terraform Registry からプロバイダーをインストール</a></li>\n<li><a href=\"https://doc.psono.com/user/developer/terraform-provider.html\">Psono Terraform プロバイダーガイドを読む</a></li>\n<li><a href=\"https://gitlab.com/esaqa/psono/psono-terraform-provider\">GitLab でソースコードを見る</a></li>\n</ul>\n<p>ベータリリースはあえて環境変数エントリと制限付き API キーに絞っています。\nこれにより、権限が最小限になり、無制限なボールトアクセスを避けながら、Terraform から運用シークレットを安全に管理できる、\n実用的な基盤を提供します。</p>","frontmatter":{"date":"August 22, 2026","slug":"introducing-the-psono-terraform-provider","title":"Psono Terraformプロバイダーのご紹介","description":"Terraformの状態にシークレットを保存せずに、Psonoで生成・書き込み専用・一時的な値を直接Terraformから管理できます。","author":"Sascha Pfeiffer","featuredImage":null}}},"pageContext":{"slug":"introducing-the-psono-terraform-provider","lang":"ja","langPathPrefix":"/ja"}},"staticQueryHashes":["2149092236","3128451518","3192060438"]}