PAM Project KCMインポート
pam project kcm-import は、Keeperコネクションマネージャー (Apache Guacamoleとも呼ばれる) のデータベースから接続、ユーザー、グループを直接読み取り、 kcm_mappings.json により150以上のKCM接続パラメータをKeeperPAM相当へマッピングしたうえで、内部で pam project import (新規プロジェクト) または pam project extend (既存プロジェクト) に委譲します。インポート用JSONを手書きする必要はありません。
概要
pam project kcm-import
( --db-host=HOST [--db-port=PORT] [--db-name=DB] [--db-user=USER]
[--db-password-record=UID] [--db-ssl]
| --docker-detect [--docker-container=NAME] )
[--db-type=mysql|postgresql]
[--name=PROJECT | --config=UID_OR_TITLE]
[--gateway=UID_OR_NAME]
[--folder-mode=ksm|exact|flat]
[--output=FILE | --dry-run]
[--skip-users]
[--include-disabled]--db-host または --docker-detect のいずれかが必須です。その他はデフォルト値があります。
要件
認証済みのコマンダーセッション — 先に
keeper loginを実行してください。コマンダーを実行するホストからKCMデータベースへのネットワークアクセス。
コマンダーを実行するPythonと同じ環境にDBドライバーをインストール。
MySQL →
pymysql(推奨) またはmysql-connector-python。インストール:pip3 install pymysqlPostgreSQL →
psycopg2-binary。インストール:pip3 install psycopg2-binary--docker-detect使用時はPATH上にdockerCLI。PAMプロジェクト、ゲートウェイ、共有フォルダを作成できるKeeperロール。
keepercommander/commands/pam_import/kcm_mappings.jsonが存在すること。
コマンドラインオプション
--db-host または --docker-detect のいずれかが必須です。その他はデフォルト値があります。
ソース: KCMの読み取り元
--db-host→ KCMデータベースのホスト名またはIP。--docker-detectを使わない場合は必須。--docker-detect→docker inspectでDockerコンテナのMYSQL_*/POSTGRES_*環境変数を読み、ホスト/ポート/DB/ユーザー/パスワードを自動検出。--db-hostを使わない場合は必須。--docker-container→--docker-detect時にinspectするコンテナ名。デフォルト:guacamole。--db-type→ DBエンジン。選択肢:mysql、postgresql。デフォルト:mysql。--db-port→ DBのTCPポート。デフォルト: mysqlは3306、postgresqlは5432。--db-name→ データベース名。デフォルト:guacamole_db。--db-user→ DBユーザー名。デフォルト:guacamole_user。読み取り専用のSELECTで十分。--db-password-record→ DBパスワードを格納したKeeperレコードのUID。これも--docker-detectもない場合、非表示のgetpassでパスワードをプロンプトします。CLI引数でパスワードは受け付けません。--db-ssl→ DB接続にTLSを要求。ローカル/RFC1918以外のホストへ--db-sslなしで接続すると警告を出します。
宛先: Keeper上の配置先
--name、-n→ 新規インポートのプロジェクト名。デフォルト:KCM-Import-<YYYYMMDD-HHMMSS>。--configと相互排他。--config、-c→ 既存のPAM構成UIDまたはタイトル。拡張モードに切り替え。--nameと相互排他。--gateway、-g→ 既存ゲートウェイのUIDまたは名前。省略時はオンラインゲートウェイの対話型ピッカー。--configモードでは無視。--folder-mode→ KCM接続グループをKeeper共有フォルダへマッピングする方法。選択肢:ksm、exact、flat。デフォルト:ksm。
出力モード
以下の3つは相互排他です。フラグなし (デフォルト) はボルトへインポートします。
--dry-run、-d→ 組み立てたpam_dataJSONを標準出力に表示 (機密フィールドは[REDACTED]に置換)。ボルトへの書き込みなし。--output、-o→ 完全なJSON (平文パスワード) を0600ファイルへ書き込み。ボルトへの書き込みなし。(フラグなし) → デフォルト。新規は
pam project import、既存構成はpam project extendに委譲。
フィルタリング
--skip-users→pamUserレコードの生成をスキップ。--include-disabled→ 無効化されたKCM接続 (max_connections == 0) を含める。
クイックスタート
最初は必ず --dry-run で実行し、問題なければフラグを外してプロジェクトを実際に作成してください。
データベース認証情報の3通り
Docker自動検出 (
--docker-detect [--docker-container=NAME]) → コマンダーと同じホスト上のDockerでKCMを実行している場合。ボルトレコード (
--db-host=H --db-password-record=<UID>) → 繰り返し実行やスクリプト化された移行向け。対話型プロンプト (
--db-host=Hでレコードなし) → 一度きりの実行。非表示getpassプロンプト。CLI引数でパスワードは渡せません。
必要なデータベース権限
DBユーザーには、以下のGuacamoleテーブルへの SELECT が必要です (読み取り専用。コマンドはソースDBへ書き込みません)。
guacamole_connectionguacamole_connection_parameterguacamole_connection_attributeguacamole_connection_groupguacamole_connection_permissionguacamole_entityinformation_schema.tables
PostgreSQL — 最小の読み取り専用ロール:
MySQL — 最小の読み取り専用ロール:
フォルダレイアウト — --folder-mode
--folder-modeKCMは接続を「接続グループ」のツリーで整理します。このフラグはそのツリーをKeeper共有フォルダへどうマッピングするかを制御します。モードにかかわらず、リソースは KCM Resources - <root> 、ユーザーは KCM Users - <root> 配下に配置されます。
ksm(デフォルト) → KSM構成が付いたグループをルートとし、子孫はその下にネストしたまま残す。exact→ KCMグループ階層を1:1で再現。flat→ 各グループをトップレベルの共有フォルダにする (ネストなし)。
グループ名はサニタイズされます — / 、 \ 、 .. はパストラバーサル防止のため _ に置換されます。
プロトコル → レコードタイプのマッピング
ssh
pamMachine
SFTPサブリソースを自動抽出
rdp
pamMachine
RDPオプションは kcm_mappings.json でマッピング
vnc
pamMachine
telnet
pamMachine
ログイン正規表現パラメータを引き継ぎ
kubernetes
pamMachine
名前空間/ポッド/コンテナ/証明書フィールドを引き継ぎ
mysql
pamDatabase
database_type = "mysql"
postgres
pamDatabase
KCMでは postgres 、KeeperPAMでは postgresql
sql-server
pamDatabase
http
pamRemoteBrowser
RBIのみ
その他
pamMachine
未知のプロトコルはフォールバック
無効化されていない各KCM接続は、リソースレコード1件、 launch_credentials に接続された pamUser レコード1件、および (SFTP付きSSHの場合) 追加のSFTPリソース+ユーザーペアを生成します。
ボルトに作成されるもの
--dry-run/--output なしで実行すると、以下の順で作成されます。
**
--name**にちなんだトップレベルのプロジェクトフォルダ。グループルートごとに2つの共有フォルダ —
KCM Resources - <root>とKCM Users - <root>。PAM構成レコード (拡張モードではスキップ)。
ゲートウェイ —
--gateway指定時は再利用、なければ対話型ピッカー ([N] Create new)。リソースレコード (
pamMachine/pamDatabase/pamRemoteBrowser)。ユーザーレコード (
pamUser)、各リソースのlaunch_credentialsに接続。SFTP構成があるSSH接続向けのSFTPサブリソースとサブユーザー。
ゲートウェイの選択
--gateway=<UID|name>→ その既存ゲートウェイを再利用 (オンラインであること)。--gatewayなし → 対話プロンプト。番号で再利用、またはNで新規プロビジョニング。オンラインゲートウェイがない → プロンプトなしで「新規作成」へ。
--configモード → ゲートウェイフラグは無視。
出力モードの詳細
再実行とクリーンアップ
同じ --name で再実行 — pam project import はタイトルでレコードを照合し、既存はスキップします。新しい接続は追加されます。既存接続への変更は自動では取り込まれません。
既存プロジェクトに新しいKCM接続を追加 — --name の代わりに --config=<UID_OR_TITLE> を使用してください。
インポートのロールバック:
1.ボルトでプロジェクトフォルダを右クリック → フォルダを削除。 2.必要に応じて、管理コンソール → 特権アクセス → ゲートウェイからゲートウェイを別途削除。
ベストプラクティス: まず --dry-run 、続けて --output=/tmp/kcm-preview.json で平文値を確認し、その後本番インポートを実行してください。
例
よくある落とし穴
Either --db-host or --docker-detect is required→ 両方省略。いずれか一方が必須。No PAM configuration found for gateway "X"→ ゲートウェイにまだPAM構成がない。先にpam config createを実行。Database connection failed: <ErrorType>→ コマンダーは認証情報漏洩を避けるため詳細メッセージを隠す。デバッグログ (-dをシェル起動時に) で完全な例外を確認。リモートDBへ
--db-sslなしで接続 →WARNINGが出る。認証情報は平文で送信される。非ローカルホストでは常に--db-sslを指定。Docker自動検出でコンテナ名が誤り → デフォルトは
guacamole。Composeでは<project>-guacamole-1になりがち。docker ps --format '{{.Names}}'で確認。pam project importがkcm_mappings.json欠如を報告 → ファイルはコマンダーに同梱。git ls-files keepercommander/commands/pam_import/kcm_mappings.jsonで確認。欠けていれば上流releaseから取得。
最終更新

