PAMリソースのインポート

Keeper PAMリソースの一括インポート

概要

Keeperは、KeeperコマンダーCLIを使用したPAMリソースの一括インポートに対応しています。これにより、大量のリソースを、PAM構成、ゲートウェイ、プロジェクトフォルダとともに一括でインポートすることが可能です。

本ドキュメントでは、簡易インポート方式と高度なインポート方式の2種類をご紹介します。ここで紹介する簡易方式では、Windowsホストの基本的なCSVリストをKeeperコマンダーが読み取れるJSONインポートファイルに変換します。多数のPAMマシンをオンボーディングする場合に、この方法を使用してください。

このページでは、ドメインに参加した多数のWindowsサーバーとローカル管理者アカウントを一括でインポートする手順を説明します。


ワークフローの概要

  1. 対象サーバーと認証情報を含むCSVファイルを準備します。

  2. プロジェクト、ポリシー、ディレクトリとの関連付けを定義したJSONテンプレートを作成または編集します。

  3. ヘルパースクリプトを実行して、CSVのデータをテンプレートにマージし、pam_import.jsonファイルを生成します。

  4. pam project importコマンドを使ってファイルをKeeperにインポートします。


要件

要件
備考

Keeperコマンダーv17.1.2以上

keeper version で確認可能

Python 3.8以上

変換スクリプトの実行に必要

KeeperPAMライセンス

Keeper管理コンソールで有効化されている必要があります

「PAMの管理」権限を持つ管理者ロール

Keeper管理コンソールで有効化されている必要があります


1. CSVファイルの準備

Pythonスクリプトを使用して、基本的な3列構成のCSVファイルをJSONインポートファイルに変換します。このスクリプトは、デフォルトで servers_to_import.csv という名前のカンマ区切りファイルを想定しています。各行には以下のように必ず3つのフィールドが含まれている必要があります。

hostname,username,password
srv‑01,Administrator,LocalAdminPassword123
srv‑02,Administrator,LocalAdminPassword123
srv‑03,Administrator,LocalAdminPassword123
srv‑04,Administrator,LocalAdminPassword123
srv‑05,Administrator,LocalAdminPassword123

ヒント: 1行目が上記の列名 (hostname,username,password) と一致する場合、ヘッダとして扱われます。AdministratorLocalAdminPassword123の部分は、各サーバーのローカル管理者のユーザー名とパスワードに置き換えてください。


2. JSONテンプレートの作成

以下のJSONテンプレートファイルをダウンロードし、ファイル名をimport_template.jsonとして保存してください。

クリックして開く
{
    "project": "XXX:Project1",
    "shared_folder_users": {
        "manage_users": true,
        "manage_records": true,
        "can_edit": true,
        "can_share": true
    },
    "shared_folder_resources": {
        "manage_users": true,
        "manage_records": true,
        "can_edit": true,
        "can_share": true
    },
    "pam_configuration": {
        "environment": "local",
        "connections": "on",
        "rotation": "on",
        "graphical_session_recording": "on"
    },
    "pam_data": {
        "resources": [
            {
                "_comment1": "Every key that starts with '_' is a comment and can be ignored or deleted",
                "_comment2": "Every value that starts with uppercase 'XXX:' must be replaced with actual value (removed if not required)",
                "_comment3": "Every value that starts with lowercase 'xxx:' is just a placeholder - can be replaced with anything but must be present",
                "type": "pamDirectory",
                "title": "XXX:Project1 AD",
                "directory_type": "XXX:active_directory|ldap",
                "host": "XXX:demo.local",
                "port": "XXX:636",
                "use_ssl": true,
                "domain_name": "XXX:demo.local",
                "pam_settings": {
                    "options": {
                        "rotation": "on",
                        "connections": "on",
                        "tunneling": "on",
                        "graphical_session_recording": "on"
                    },
                    "connection": {
                        "protocol": "rdp",
                        "port": "XXX:3389",
                        "security": "XXX:any",
                        "ignore_server_cert": true,
                        "_comment_administrative_credentials": "Must match the unique title of one of the users below",
                        "administrative_credentials": "XXX:DomainAdmin"
                    }
                },
                "users": [
                    {
                        "type": "pamUser",
                        "_comment_title": "Must match administrative_credentials above if this is the admin user",
                        "title": "XXX:DomainAdmin",
                        "_comment_login_password": "Must provide valid credentials but delete sensitive data/json after import",
                        "login": "XXX:administrator@demo.local",
                        "password": "XXX:P4ssw0rd_123",
                        "rotation_settings": {
                            "rotation": "general",
                            "enabled": "on",
                            "schedule": {
                                "type": "on-demand"
                            }
                        }
                    }
                ]
            },
            {
                "_comment4": "While pamDirectory section above is static, the pamMachine section below is dynamicly generated",
                "_comment5": "One pamMachine with one pamUser will be generated per each line from the CSV file",
                "_comment6": "Only one pamMachine is needed and it will be used as a template for all CSV rows",
                "_comment7": "Please do NOT edit lines with xxx: in them - these are placeholders",
                "_comment8": "Any other line that don't contain xxx: can be altered/added/deleted in the template",
                "_comment9": "CSV Format: server_name,username,password",
                "type": "pamMachine",
                "_comment_title_and_host": "server value from CSV",
                "title": "xxx:server1",
                "host": "xxx:server1",
                "port": "5986",
                "ssl_verification": true,
                "operating_system": "Windows",
                "pam_settings": {
                    "options": {
                        "rotation": "on",
                        "connections": "on",
                        "tunneling": "on",
                        "graphical_session_recording": "on"
                    },
                    "connection": {
                        "protocol": "rdp",
                        "port": "3389",
                        "security": "any",
                        "ignore_server_cert": true,
                        "_comment_administrative_credentials": "Format: pamDirectory#title.pamDirectory#administrative_credentials - exact match needed",
                        "administrative_credentials": "XXX:Project1 AD.DomainAdmin"
                    }
                },
                "users": [
                    {
                        "type": "pamUser",
                        "_comment_title": "username value from CSV or server-username if --prefix-names option is used",
                        "title": "xxx:admin",
                        "_comment_login": "username value from CSV",
                        "login": "xxx:Administrator",
                        "_comment_password": "password value from CSV",
                        "password": "xxx:P4ssw0rd_123",
                        "rotation_settings": {
                            "rotation": "general",
                            "enabled": "on",
                            "schedule": {
                                "type": "on-demand"
                            }
                        }
                    }
                ]
            }
        ]
    }
}
  • 「XXX:」で始まる値はすべて実際の値に置き換えてください。

  • 「xxx:」で始まるプレースホルダはスクリプトで上書きされるため、そのまま残してください。

この例では、以下のようにXXXの値を置き換えます。

Top section:
"project": "Import Demo Project"

pam_data.resources:
"title": "My Domain Controller"
"directory_type": "active_directory"
"host": "lureydemo.local"
"port": "636"
"domain_name": "lureydemo.local"

pam_data.resources.pamDirectory.pam_settings.connection:
"port": "3389"
"security": "any"
"administrative_credentials": "My Domain Admin"

pam_data.resources.pamDirectory.users:
"title": "My Domain Admin"
"login": "administrator@lureydemo.local"
"password": "YourExistingDomainPassword"

pam_data.resources.pamMachine.users:
"administrative_credentials": "My Domain Controller.My Domain Admin"
(note: this is named to reference the directory title and directory admin)

3. インポートファイルの生成

CSVファイルは、すべてのサーバーに対応した正しい形式のJSONファイルへと変換されます。まず、スクリプトファイルpam_import_generator.pyをダウンロードし、作業ディレクトリに保存します。

この時点で、作業ディレクトリには以下の3つのファイルが存在しているはずです。

  • pam_import_generator.py

  • import_template.json

  • servers_to_import.csv

以下のコマンドでスクリプトを実行し、インポート用のJSONファイルを生成します。

python3 pam_import_generator.py --prefix-names

これにより、pam_import.jsonというファイルが生成され、Keeperにインポートするすべてのリソースが含まれます。


4. Keeperへのリソースインポート

生成されたpam_import.jsonファイルを、KeeperコマンダーCLIを通じてKeeperにインポートします。 まだコマンダーの初期設定を行っていない場合は、セットアップ手順のページをご参照ください。

まず、コマンダーセッションを開始します。

keeper shell

次に、以下のコマンドでインポートを実行します (pam_import.jsonファイルがコマンダーの作業ディレクトリにあることを想定しています。絶対パスの指定も可能です)。

pam project import -f pam_import.json

インポートが完了すると、コマンダーの出力に以下のようなアクセストークンが含まれます。

"access_token": "XXXXXXXX...."

このaccess_tokenの値 (引用符内) をメモしておいてください。次の手順でゲートウェイの初期化に使用します。

備考: インポート完了後、ボルト内のリソースが更新されます。Keeperボルトを開いた状態であれば、「完全同期」またはページの再読み込みを行うことを推奨します。

5. ゲートウェイの起動

本ページではKeeperゲートウェイのインストール手順は扱っていませんが、すでにGatewayがセットアップされているものとします。未設定の場合は、お使いの環境に応じたセットアップ手順をご参照ください。

ゲートウェイの構成ファイル内で、先ほど取得したaccess_tokenGATEWAY_CONFIGに追加します。

  • Docker環境の場合: docker-compose.yamlファイル内に設定

  • Windows環境の場合: C:\ProgramData\KeeperGateway\config\gateway-config.jsonに設定

その後、ゲートウェイを再起動します。

これでゲートウェイが稼働し、インポートされたすべてのリソースと関連付けられた状態になります。 デフォルトでは、すべてのPAMプロジェクトが「PAM Environments」というフォルダに追加されます。

インポート結果例

この例に基づき、以下のようなリソースがKeeper内に作成されます。

  • シークレットマネージャーアプリケーション

  • Keeperゲートウェイ

  • PAM構成

  • PAMディレクトリ (Active Directoryサービス)

  • ドメイン管理者を表すPAMユーザー

  • PAMマシンリソース (Windowsサーバー)

  • 各PAMマシンに対応するローカル管理者のPAMユーザー

KSMアプリケーション
PAM構成
PAMゲートウェイ
PAMリソース
PAMユーザー
ドメインコントローラー
PAMマシン
PAMユーザー (ローカル管理者)

高度なインポート形式

本ページでは、一連のWindowsサーバーをインポートする基本例を用いて、接続・トンネル・パスワードの自動ローテーションを行う方法を紹介しました。構成はシンプルな形に設定されています。

より高度なインポート方法や、完全なJSONテンプレートの活用については、GitHubのREADMEページにて詳しく記載しています。このページでは、インポート処理中に変更可能なすべての設定項目が確認できます。

インポートを再実行する必要がある場合でも、ボルト内のフォルダ、PAM構成、ゲートウェイを削除して、最初からやり直すことができます。

インポート方法について不明点がある場合は、アカウント担当者までご連絡いただくか、commander@keepersecurity.com までお問い合わせください。


関連トピック

PAMの自動化をさらに進めるためのKeeperコマンダーのオプションについてもご覧ください。

最終更新