KSM用Terraform Provider
Terraformのビルドでボルトのシークレットを操作するためのKeeperシークレットマネージャーTerraform Provider

機能
Keeper Terraformプラグインは、Keeperシークレットマネージャーを利用してKeeperボルトに保存されたシークレット認証情報にアクセスします。このプラグインを使うことで、Keeperのゼロ知識インフラを活用し、Terraformのビルド環境にシークレットを安全に直接挿入できます。
Terraformのビルドで使用するシークレットをKeeperボルトから取得します
Terraformのビルドスクリプトにクレデンシャルを直接注入します
新しいシークレットを作成してボルトに保存します
Keeperボルトからファイルを取得します
要件
この連携を利用するための要件は以下のとおりです。
Keeperシークレットマネージャーへのアクセス (詳細は、クイックスタートガイドをご参照ください)
Keeperアカウントのシークレットマネージャーアドオンの有効化
シークレットマネージャー強制ポリシーが有効化されたロールを割り当てられたメンバーシップ
シークレットを共有するKeeperシークレットマネージャーアプリケーション
アプリケーションの作成手順については、クイックスタートガイドをご参照ください
初期化済みのKeeperシークレットマネージャー構成
Terraform連携では、JSON形式とBase64形式の設定を使用できます
Terraform 1.0.0以上 (
ephemeralリソースには1.10.0以上が必要)
インストール
レジストリのインストール
このプロバイダをインストールするには、Terraformの設定に以下のコードを追加して、terraform init を実行します。
こちらのGitHubリポジトリでソースコードを確認できます。
手動インストール
GitHubリリースページからご利用のプラットフォーム用の最新バージョンのTerraformプロバイダをダウンロードし、そのアーカイブを対応するTerraformプラグインフォルダにコピーします (パスに不足しているフォルダがあれば作成します)。完全なプロバイダURLでソースを初期化します ("github.com/keeper-security/secretsmanager")。
Terraformプロバイダを手動でインストールする方法については、Terraformの公式ドキュメントをご参照ください。
使用方法
プロバイダを設定
Keeperシークレットマネージャープロバイダを使用して、Keeperシークレットマネージャーで利用できるリソースと連携します。プロバイダを使用できるようにするには、Keeperのクレデンシャルを使用してプロバイダを設定する必要があります。
構成ファイルの内容
appKey- (必須) アプリケーションキー。clientId- (必須) クライアントID。privateKey- (必須) 秘密鍵。hostname- (オプション) デフォルトでは、プラグインはkeepersecurity.comに接続します
データソースを使用してシークレットを取得
Keeperの標準レコードタイプごとにデータソースが用意されているため、シークレットのクレデンシャルを簡単に取得できます。
データソースには、以下の形式を使用してアクセスします。
たとえば、ログインタイプのレコードを使用する場合は、以下のようになります。
ユーザーが定義したレコードタイプの追加のカスタムフィールドまたは標準フィールドにアクセスするには、secretsmanager_field データソースを使用します。
サポートされているレコードタイプの一覧
"secretsmanager_address"
"secretsmanager_bank_account"
"secretsmanager_bank_card"
"secretsmanager_birth_certificate"
"secretsmanager_contact"
"secretsmanager_database_credentials"
"secretsmanager_driver_license"
"secretsmanager_encrypted_notes"
"secretsmanager_field"
"secretsmanager_file"
"secretsmanager_folder"
"secretsmanager_folders"
"secretsmanager_health_insurance"
"secretsmanager_login"
"secretsmanager_membership"
"secretsmanager_passport"
"secretsmanager_pam_database"
"secretsmanager_pam_directory"
"secretsmanager_pam_machine"
"secretsmanager_pam_user"
"secretsmanager_pam_remote_browser"
"secretsmanager_photo"
"secretsmanager_record"
"secretsmanager_records"
"secretsmanager_server_credentials"
"secretsmanager_software_license"
"secretsmanager_ssh_keys"
"secretsmanager_ssn_card"
各データソースで使用可能なフィールドについては、レコードタイプのデータソースリファレンスをご参照ください。
メタデータのデータソース
secretsmanager_metadata を使用すると、フィールドの値を公開せずに、レコードの機密性のないメタデータである uid、type、title、notes、revision、folder_uid、is_editable を読み取れます。
レコードフィールドにアクセス
レコードのフィールドに保存されたシークレットのクレデンシャルにアクセスするには、データソースの一部としてフィールドにアクセスします。
タイプ指定されたレコードのデータソースのフィールドにアクセス
以下の形式を使用して、タイプ指定されたデータリソースのフィールドにアクセスします。
以下は、ログインタイプのデータソースのパスワードへのアクセスとなります。
フィールドデータソースを使用し、Keeper表記法でレコード内の任意のフィールドを照会
"secretsmanager_field"データソースタイプを使用してデータソースを作成し、pathプロパティでフィールドクエリを指定します。
フィールドクエリでは、"<UID>/field/<field type>" という形式が使用されます。
カスタムフィールド
標準およびPAMのリソースタイプではカスタムフィールドが利用でき、専用の値エンコーディング (単純な文字列、日付、チェックボックス、name や address などの複雑なタイプ向けのJSONエンコードされたオブジェクト) を使用する27種類のフィールドタイプに対応しています。この一覧にないタイプ文字列も受け付けますが、タイプ固有の検証は行われず、プレーンテキストとして保存されます。対応するレコードタイプの一覧については、カスタムフィールドのリファレンスをご参照ください。
単純なタイプ (文字列値)
テキスト、メール、URLなどの単純なタイプでは、プレーンな文字列を指定します。
複合タイプ (JSON値)
name、address、paymentCard などの複合タイプでは、jsonencode() を使用します。
フィールドの設定
各カスタムフィールドでは、required および privacy_screen 属性を指定できます。
カスタムフィールドの読み取り
カスタムフィールドは、すべてのデータソースおよびエフェメラルリソースで読み取り専用属性として参照できます。custom ブロックはリストです。位置でインデックスするか、for で反復処理します。
各要素には type、label、value (文字列) が含まれます。複合タイプ (name、address、paymentCard) では、value はJSONエンコードされたオブジェクトです。個々のサブフィールドを扱うには jsondecode() を使用します。
リソースを使用したレコードの作成
Keeperでは、上記の主要なKeeperレコードタイプ用のTerraformリソースがご利用になれます。 これらのリソースを利用し、KeeperシークレットマネージャーのTerraformプラグインを使用してKeeperのレコードを作成できます。
レコードを作成するには、使用したいレコードタイプに対応するリソースを使用します。
各レコードのリソースには、少なくとも folder_uid と title、および各レコードフィールドの値が必要となります。
ログインリソースの例
エフェメラルリソースの使用 (Terraform 1.10以上)
Terraform 1.10以降では、25種類すべてのレコードタイプでエフェメラルリソースが利用できます。データソースや通常のリソースと異なり、エフェメラルデータは terraform.tfstate に書き込まれないため、機密性の高いクレデンシャルがディスク上に残りません。
主な利点
ローカルおよびリモートのstateファイルにシークレットを保存しない
Terraform 実行中のみ一時的に利用可能
すべてのレコードタイプ (login、bank_account、ssh_keys、pam_machine など) に対応
既存のデータソースやリソースと併用可能
構文: data の代わりに ephemeral を使用します。
例: エフェメラルで SSH 鍵にアクセス
エフェメラルリソースのカスタムフィールド
レコードタイプごとのエフェメラルリソースでは、データソースと同様に読み取り専用の custom ブロックが利用できます。カスタムフィールドの値は state に保存されません。
フォルダUID
レコードを作成するには、Keeperシークレットマネージャーが新しいレコードを作成する場所を認識できるように、フォルダのUIDが必要となります。
フォルダUIDは、KeeperボルトまたはKeeperコマンダーを使用して確認できます。
対象のフォルダ (またはその親の共有フォルダ) は、Keeperシークレットマネージャーアプリケーションから編集権限でアクセスできる必要があります。
タイトル
レコードタイトル。
レコードフィールド
レコードの各フィールドの値と設定は、リソースで設定できます。 レコードタイプごとの利用可能なフィールドについては、リソース定義をご参照ください。
各フィールドは、リソース内ではオブジェクトとして表記されます。
ログインフィールドの例
フィールド値を設定
各フィールドの値を設定するには、value フィールドを使用してください。フィールドの形式については、login フィールドタイプは文字列を受け取りますが、name フィールドは「first」「middle」「last」フィールドを持つオブジェクトを受け取るなど、異なる場合があります。
各フィールドの値の形式については、リソースのドキュメントをご参照ください。
フィールドの設定を指定
各フィールドは、様々な設定で構成できます。
label
string
フィールドラベル
required
boolean
Trueの場合、このフィールドはKeeperボルトで必須と見なされます
privacy_screen
boolean
Trueの場合、このフィールドはKeeperボルトで非表示になります
パスワードフィールド
パスワードフィールドにはいくつかの特別な機能があります。
パスワード生成
Terraformプラグインを使用して作成されたレコードには、パスワードが自動的に生成されます。 プラグインでパスワードを生成するには、パスワードに value フィールドを指定せず、代わりにgenerate = "true" を使用します
パスワード生成は、complexityフィールドを使用して、指定した長さのパスワードを生成するように設定できます。
complexity ブロックでは、caps、lowercase、digits、special (文字クラスごとの最小文字数)、および生成する特殊文字を制限する special_set も指定できます。
また、パスワードフィールドには、enforce_generation という設定があります。これがtrueの場合、パスワードの生成のみを可能にし、ユーザーによるパスワード設定はできないようにKeeperボルトに強制適用します。
SSHキーの生成
secretsmanager_ssh_keys リソースでは、SSHキーペアを自動的に生成できます。生成を実行するには、キーペアの値を省略し、key_pair フィールドで generate = "true" を設定します。
PAMマシンおよびPAMユーザーリソースでも、private_pem_key フィールドを使用して、同様の generate / key_type / key_bits のパターンで秘密PEMキーを生成できます。
例
認証情報の読み取り
この例では、Keeperシークレットマネージャーをプロビジョニングして、ログインタイプのデータソースを読み取り、データソースの各フィールドにアクセスします。
Keeperのレコードを作成
PAMレコードの作成
PAMデータソースの出力を読み取る
その他の例については、ソースコード内のexamplesフォルダをご参照ください。
最適化
secretsmanager_records データソースを使用すると、複数のKeeperシークレットマネージャーレコードを1回のAPI呼び出しで取得でき、多数のシークレットを扱う場合のAPIリクエストを大幅に削減し、パフォーマンスを向上させます。
UIDで取得 (最も効率的)
タイトル完全一致で取得
正規表現パターンで取得
titles および title_patterns は、アクセス可能なすべてのボルト内レコードを取得し、クライアント側でフィルタリングを行います。パフォーマンス向上のため、可能な限り uids の使用を推奨します。パターンはGoの正規表現構文を使用し、ReDoSを防ぐため500文字に制限されています。
UIDによる結果へのアクセス
レコードは records をリストとして参照するか、records_by_uid でUIDをキーとしたマップとして参照できます。records_by_uid の各値はJSONエンコードされた文字列です。個々のフィールドにアクセスするには jsondecode() を使用します。
最終更新

