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

機能
Keeper Terraformプラグインは、Keeperシークレットマネージャーを利用してKeeperボルトに保存されたシークレット認証情報にアクセスします。このプラグインを使うことで、Keeperのゼロ知識インフラを活用し、Terraformのビルド環境にシークレットを安全に直接挿入できます。
Terraformのビルドで使用するシークレットをKeeperボルトから取得します
Terraformのビルドスクリプトにクレデンシャルを直接注入します
新しいシークレットを作成してボルトに保存します
Keeperボルトからファイルを取得します
Keeperシークレットマネージャー機能の一覧については、概要をご参照ください。
要件
この連携を利用するための要件は以下のとおりです。
Keeperシークレットマネージャーへのアクセス (詳細は、クイックスタートガイドをご参照ください)
Keeperアカウントのシークレットマネージャーアドオンの有効化
シークレットマネージャー強制ポリシーが有効化されたロールを割り当てられたメンバーシップ
シークレットを共有するKeeperシークレットマネージャーアプリケーション
アプリケーションの作成手順については、クイックスタートガイドをご参照ください
初期化済みのKeeperシークレットマネージャー構成
Terraform連携では、JSON形式とBase64形式の設定を使用できます
Terraform 1.0.0以上 (
ephemeralリソースには1.10.0以上が必要)
インストール
レジストリのインストール
Keeperシークレットマネージャープロバイダのページはこちらです。
このプロバイダをインストールするには、Terraformの設定に以下のコードを追加して、terraform init を実行します。
こちらのGitHubリポジトリでソースコードを確認できます。
手動インストール
GitHubリリースページからご利用のプラットフォーム用の最新バージョンのTerraformプロバイダをダウンロードし、そのアーカイブを対応するTerraformプラグインフォルダにコピーします (パスに不足しているフォルダがあれば作成します)。完全なプロバイダURLでソースを初期化します ("github.com/keeper-security/secretsmanager")。
お使いのOSおよびCPUアーキテクチャ (amd64 または arm64) に対応するアーカイブを使用してください。以下のMac OSおよびLinuxのコマンドは、アーキテクチャを自動的に検出します。Windowsのコマンドは amd64 向けです。
Alpine Linuxおよびmuslベースのシステム
Linux向けバイナリ (amd64、arm64、arm) はすべて静的リンクされており、Cライブラリへの依存はありません。Alpine、muslベースのDockerイメージ、その他glibc以外の環境でも、そのまま利用できます。
Terraformプロバイダを手動でインストールする方法については、Terraformの公式ドキュメントをご参照ください。
使用方法
プロバイダを設定
Keeperシークレットマネージャープロバイダを使用して、Keeperシークレットマネージャーで利用できるリソースと連携します。プロバイダを使用できるようにするには、Keeperのクレデンシャルを使用してプロバイダを設定する必要があります。
CI/CD環境では、credential 属性を省略し、代わりに環境変数 KEEPER_CREDENTIAL を設定できます。
構成ファイルの内容
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"
各データソースで使用可能なフィールドについては、レコードタイプのデータソースリファレンスをご参照ください。
レコードタイプの詳細は、レコードタイプおよびコマンダーの使用法をご参照ください。
レコードフィールドにアクセス
レコードのフィールドに保存されたシークレットのクレデンシャルにアクセスするには、データソースの一部としてフィールドにアクセスします。
タイプ指定されたレコードのデータソースのフィールドにアクセス
以下の形式を使用して、タイプ指定されたデータリソースのフィールドにアクセスします。
以下は、ログインタイプのデータソースのパスワードへのアクセスとなります。
フィールドデータソースを使用し、Keeper表記法でレコード内の任意のフィールドを照会
"secretsmanager_field"データソースタイプを使用してデータソースを作成し、pathプロパティでフィールドクエリを指定します。
フィールドクエリでは、"<UID>/field/<field type>" という形式が使用されます。
レコードUIDが不明な場合は、UIDの代わりにワイルドカード * を使用し、任意の title 属性を指定してタイトルで検索できます。
タイトルに一致するアクセス可能なレコードが複数ある場合は、エラーが返されます。
カスタムフィールド
標準およびPAMのリソースタイプではカスタムフィールドが利用でき、43種類以上のフィールドタイプに対応しています。対応するレコードタイプの一覧については、カスタムフィールドのリファレンスをご参照ください。
単純なタイプ (文字列値)
テキスト、メール、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 鍵にアクセス
利用可能なレコードタイプの一覧は、レジストリの ephemeral "secretsmanager_*" リソースをご参照ください。
エフェメラルリソースのカスタムフィールド
レコードタイプごとのエフェメラルリソースでは、データソースと同様に読み取り専用の 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フィールドを使用して、指定した長さのパスワードを生成するように設定できます。
また、パスワードフィールドには、enforce_generation という設定があります。これがtrueの場合、パスワードの生成のみを可能にし、ユーザーによるパスワード設定はできないようにKeeperボルトに強制適用します。
Terraformにパスワードを再生成させるには、generateフィールドの相違を認識させる必要があります。 相違を認識できるように、generateフィールドは「true」と「yes」の両方の値を受け入れます。 一方から他方への変更が再生成のトリガーになります。
SSHキーの生成
secretsmanager_ssh_keys リソースでは、SSHキーペアを自動的に生成できます。生成を実行するには、キーペアの値を省略し、key_pair フィールドで generate = "true" を設定します。
PAMマシンおよびPAMユーザーリソースでも、private_pem_key フィールドを使用して、同様の generate / key_type / key_bits のパターンで秘密PEMキーを生成できます。
パスワードと同様に、SSHキーの生成では true または yes を有効な値として使用できます。これらの値を切り替えると、Terraformが差分を検出し、次回のapply時にキーペアが再生成されます。
例
認証情報の読み取り
この例では、Keeperシークレットマネージャーをプロビジョニングして、ログインタイプのデータソースを読み取り、データソースの各フィールドにアクセスします。
Keeperのレコードを作成
PAMレコードの作成
これらのコード例は、terraform ブロックおよび provider "secretsmanager" ブロックが、上記のとおり設定済みであることを前提としています。
PAMデータソースの出力を読み取る
これらのコード例は、terraform ブロックおよび provider "secretsmanager" ブロックが、上記のとおり設定済みであることを前提としています。
その他の例については、ソースコード内のexamplesフォルダをご参照ください。
TOTP属性の形はレコードタイプによって異なります
ログイン / 銀行口座のデータソース:
totp[0].token(現在の6桁コード)、totp[0].ttl(残り秒)、totp[0].url(OTP URI)PAMマシン / PAMユーザーのデータソース:
totp[0].value(生のotpauth://URI — コード生成には外部のTOTPツールを使用)
最適化
secretsmanager_records データソースを使用すると、複数のKeeperシークレットマネージャーレコードを1回のAPI呼び出しで取得でき、多数のシークレットを扱う場合のAPIリクエストを大幅に削減し、パフォーマンスを向上させます。
UIDで取得 (最も効率的)
タイトル完全一致で取得
正規表現パターンで取得
titles および title_patterns は、アクセス可能なすべてのボルト内レコードを取得し、クライアント側でフィルタリングを行います。パフォーマンス向上のため、可能な限り uids の使用を推奨します。パターンはGoの正規表現構文を使用し、ReDoSを防ぐため500文字に制限されています。
利用可能なすべての出力属性を含む詳細なドキュメントについては、secretsmanager_records リファレンスをご参照ください。
UIDによる結果へのアクセス
レコードは records をリストとして参照するか、records_by_uid でUIDをキーとしたマップとして参照できます。records_by_uid の各値はJSONエンコードされた文字列です。個々のフィールドにアクセスするには jsondecode() を使用します。
最終更新

