Psono Terraform プロバイダーのベータリリースが、パブリックの Terraform Registry で利用可能になったことをお知らせします。
インフラチームは、作成済みの Psono 環境変数エントリ内の個別キーを Terraform のワークフローの一部として管理できるようになりました。 プロバイダーは既存の値の維持、新しいパスワードの生成、管理された値のローテーション、外部で供給された値の書き込み、 Terraform の一時リソースを通じたシークレットの読み取りなどを行うことができます。
IaC(Infrastructure as Code)でのシークレット管理には特別な注意が必要です。 センシティブフラグで CLI 出力から値を隠すことはできますが、その値を Terraform の状態からも排除できるとは限りません。 Psono プロバイダーは Terraform の「書き込み専用」と「一時的」なリソース機能を活用し、この課題を回避します(Terraform 1.11 以降が必要)。
プロバイダーは主に以下の 3 つのワークフローをサポートしています:
これらにより、実際のシークレット値を Psono 内に保管しつつ、シークレットのライフサイクル操作を Terraform で安全に含めることが可能となります。
このプロバイダーは制限された Psono API キーを使用します。 Terraform が必要とする環境変数エントリだけを割り当て、すべての操作に対し「読み取り権限」を付与します。 キーの作成・更新・ローテーション・削除にはさらに「書き込み権限」が必要です。 プロバイダーは無制限の API キーを必要とせず、また金庫エントリやフォルダ、データストアの作成はできません。
暗号化および復号はプロバイダー内部でローカルに実行されます。 HTTPS 証明書の検証は無効化できず、プライベート認証局(CA)は PEM 形式の CA バンドル追加により対応可能です。 本番システムでは必ず HTTPS の Psono URL を使用してください。
Terraform 1.11 以上が必要です。Terraform 構成ファイルにプロバイダーを追加します:
terraform {
required_version = ">= 1.11.0"
required_providers {
psono = {
source = "psono/psono"
version = "~> 1.0"
}
}
}
provider "psono" {}
Terraform ファイルに認証情報を記載せず、環境変数で設定してください:
export PSONO_SERVER_URL='https://psono.example.com/server'
export PSONO_API_KEY_ID='REPLACE_WITH_API_KEY_ID'
export PSONO_API_SECRET_KEY='REPLACE_WITH_API_SECRET_KEY'
作業ディレクトリを初期化します:
terraform init
Terraform は署名済みのプロバイダーリリースをダウンロードし、そのチェックサム署名を検証します。
以下のリソースは、既存の Psono 環境変数エントリ内にあるDB_PASSWORDを管理します:
resource "psono_environment_variable" "database_password" {
secret_id = var.psono_environment_variables_secret_id
name = "DB_PASSWORD"
length = 32
min_lower = 4
min_upper = 4
min_numeric = 4
min_special = 4
rotation_version = 1
}
キーがすでに存在する場合、プロバイダーは値を変更せずにそのまま引き継ぎます(アドプト)。 存在しない場合は、Psono で新しい値を生成して格納します。 生成された値は管理リソースから返却されず、Terraform の状態にも保存されません。
rotation_versionをインクリメントすると、Terraform が値の置き換えを行います。
この操作は、もともとアドプトまたは import した値でも置き換えるため、ローテーションの変更は適用前に慎重に確認してください。
他のプロバイダーで生成した一時的な値をvalue_woで Psono に書き込む例です:
ephemeral "random_password" "database" {
length = 32
}
resource "psono_environment_variable" "database_password" {
secret_id = var.psono_environment_variables_secret_id
name = "DB_PASSWORD"
value_wo = ephemeral.random_password.database.result
value_wo_version = 1
}
この値は Terraform の操作中のみ利用され、plan や state には保存されません。
値の置き換えが必要な場合はvalue_wo_versionをインクリメントしてください。
管理リソースを削除しても、デフォルトでは Psono のキーは保持されます。
これは Terraform がアドプトしたが作成していない値の保護のためです。
削除やリソース置き換え時に明示的に Psono からキーを消したい場合のみ
deletion_policy = "Delete"を設定してください。
このプロバイダーはオープンソースで、すぐにご利用いただけます:
ベータリリースはあえて環境変数エントリと制限付き API キーに絞っています。 これにより、権限が最小限になり、無制限なボールトアクセスを避けながら、Terraform から運用シークレットを安全に管理できる、 実用的な基盤を提供します。