Dockerによるデプロイ

Dockerを使用したコマンダーのサービスモードデプロイ

Dockerによるコマンダーサービスモードのデプロイ

Dockerコンテナを利用すると、コマンダーをサービスモードでデプロイする際に必要な処理が自動化され、デバイス登録や永続ログインの設定を含めて、サービスの起動までの手順を簡略化できます。

要件

Dockerがインストールされていること

Dockerイメージの取得

最新のDockerイメージをDocker Hubから取得します。

docker pull keeper/commander:latest

イメージが取得されたことを確認します。

docker images | grep keeper/commander

認証方法

Dockerコンテナでは、次の4つの認証方法を利用できます。

1. KSM構成ファイルを使用する

Keeperシークレットマネージャー (KSM) の構成ファイルを利用して、Keeperレコードから config.json を取得する方法です。コンテナ側では次の処理が行われます。

  • マウントしたKSM構成ファイルを使用して、指定したレコードに添付されている config.json を取得する

  • 取得した構成ファイルを使用してコマンダーの認証を行う

アプローチは2種類あります。

  • KSM構成をBase64形式で渡す

  • ksm-config.json ファイルをコンテナへマウントする

2. KSMトークンを使用する

Keeperシークレットマネージャーのワンタイムアクセストークンを利用して、Keeperレコードから config.json 構成ファイルを取得する方法です。コンテナでは以下の処理が行われます。

  • 指定したKSMトークンを使用してレコードから config.json を取得する

  • 取得した構成ファイルを使用してコマンダーの認証を行う

3. 認証情報を使用する

コマンドライン引数として資格情報を直接渡す方法です。コンテナは次の処理を自動で実行します。

  • Keeperへのデバイス登録

  • 永続ログインの有効化

  • サービスの起動

4. 構成ファイルを使用する

既存のKeeper構成ファイルをコンテナにマウントして使用します。

一般的な構成ファイルの準備手順

KSM構成ファイル方式、KSMトークン方式、構成ファイル方式を利用する場合は、事前に config.json をボルトにアップロードする必要があります。ホスト環境で以下の手順を実行してください。

  1. Keeperへのログイン

    keeper shell
    # 認証情報を使用してログイン
    login [email protected]
  2. デバイス登録

    this-device register
  3. 永続ログインの有効化

    this-device persistent-login on
  4. タイムアウトの設定

    this-device timeout 43200
  5. 構成ファイルのアップロード ホストの .keeper ディレクトリにある config.json を見つけ、共有フォルダ内のレコードに添付ファイルとしてアップロードします。

  6. 元の構成ファイルの削除 同じデバイストークンやクローンコードを持つ構成が重複しないよう、ホスト環境の .keeper ディレクトリから config.json を削除します。

Dockerコンテナの実行

KSM構成ファイル認証を使用する場合

A. Base64形式のKSM構成を使用する

ファイルのマウントが難しい環境 (例: コンテナオーケストレーション環境) では、KSM構成をBase64エンコードした文字列として渡す方法が利用できます。

要件

KSM構成ファイル認証を使用する前に、以下を完了しておく必要があります。

  1. KSMアプリケーションをKeeperボルト内で作成する

  2. KSM構成のBase64値を生成する

  3. サービス用 config.json 構成ファイルを添付したKeeperレコードを作成する

  4. そのレコードをKSMアプリケーションと共有する

セットアップ手順

  1. KSM構成ファイルの作成

    • ボルト → [シークレットマネージャー][アプリケーション] へ移動する

    • 新しいアプリケーションを作成し、共有フォルダへのアクセス権を付与する

    • アプリケーションを選択し、[デバイス] から [デバイスを追加] をクリックする

    • 構成ファイル方式を選択し、構成タイプとして Base64 を指定する

    • 表示されたKSM構成のBase64文字列を安全な場所にコピーして保管する

コンテナの実行

docker run -d -p <port>:<port> \
  keeper/commander:latest \
  service-create -p <port> -c '<commands>' -f <json-or-yaml> \
  --ksm-config <BASE64_ENCODED_CONFIG> \
  --record <RECORD_UID_OR_TITLE>

docker run -d -p 9007:9007 \
  keeper/commander:latest \
  service-create -p 9007 -c 'ls,tree' -f json \
  --ksm-config eyJhcHBsaWNhdGlvbiI6ZXN0LWNsaWVudC1pZCJ9 \
  --record ABC123-DEF456-GHI789

--record パラメータには、レコードのUIDとタイトルの両方を指定できます。同じタイトルのレコードが複数存在する場合は、UIDを指定する必要があります。

B. KSM構成ファイルをコンテナ内にマウントする方法

要件

KSM構成ファイルによる認証を利用するには、次の準備が必要です。

  1. KeeperボルトでKSMアプリケーションを作成する

  2. KSM構成ファイル (ksm-config.json) を生成する

  3. サービスの config.json を添付したKeeperレコードを作成する

  4. そのレコードを作成したKSMアプリケーションと共有する

手順

1. 一般的な構成ファイル準備手順を完了する

2. KSM構成ファイルを作成する

  • ボルト → [シークレットマネージャー][アプリケーション] へ移動する

  • 新しいアプリケーションを作成し、共有フォルダへのアクセス権を付与する

  • 作成したアプリケーションを選択し、[デバイス] へ移動してから [デバイスを追加] をクリックする

  • 構成ファイル方式を選択してJSONファイルをダウンロードする

  • ダウンロードしたファイルの名前を ksm-config.json に変更する (.keeper/config.json との衝突を避けるため)

コンテナの実行

docker run -d -p <port>:<port> \
  -v /path/to/local/ksm-config.json:/home/commander/ksm-config.json \
  keeper/commander:latest \
  service-create -p <port> -c '<commands>' -f <json-or-yaml> \
  --ksm-config /home/commander/ksm-config.json \
  --record <RECORD_UID_OR_TITLE>

docker run -d -p 9007:9007 \
  -v /path/to/local/ksm-config.json:/home/commander/ksm-config.json \
  keeper/commander:latest \
  service-create -p 9007 -c 'ls,tree' -f json \
  --ksm-config /home/commander/ksm-config.json \
  --record ABC123-DEF456-GHI789

--record パラメータには、レコードのUIDとタイトルの両方を指定できます。同じタイトルのレコードが複数存在する場合は、UIDを指定する必要があります。

KSMトークン認証を利用する方法

要件

KSMトークン認証を利用する前に、次の準備が必要です。

  1. KeeperボルトでKSMアプリケーションを作成する

  2. 生成されたアクセス トークンを安全に保管する

  3. config.json を添付したKeeperレコードを作成する

  4. そのレコードを作成したKSMアプリケーションと共有する

手順

1. 一般的な構成ファイルの準備手順を完了する

2. KSMアクセス トークンを作成する

  1. ボルト → [シークレットマネージャー][アプリケーション] へ移動する

  2. 新しいアプリケーションを作成し、共有フォルダへのアクセス権を付与する

  3. 編集権限を付与し、アクセストークンを生成する

  4. 生成されたアクセス トークンを安全に保管する

コンテナの実行

docker run -d -p <port>:<port> \
  keeper/commander:latest \
  service-create -p <port> -c '<commands>' -f <json-or-yaml> \
  --ksm-token <KSM_TOKEN> \
  --record <RECORD_UID_OR_TITLE>

docker run -d -p 9007:9007 \
  keeper/commander:latest \
  service-create -p 9007 -c 'ls,tree' -f json \
  --ksm-token US:odncsdcindsijiojijj32i3ij2iknm23 \
  --record ABC123-DEF456-GHI789

--record パラメータには、レコードのUIDとタイトルの両方を指定できます。同じタイトルのレコードが複数存在する場合は、UIDを指定する必要があります。

ユーザー名/パスワード認証方式

docker run -d -p <port>:<port> keeper/commander:latest \
  service-create \
  -p <port> \
  -c '<comma-separated-commands>' \
  -f <json-or-yaml> \
  --user <keeper-username> \
  --password <keeper-password> \
  --server <keeper-server>

パラメータ

  • -p, --port: サービスのポート番号

  • -c, --commands: 許可コマンドのカンマ区切りリスト

  • -f, --fileformat: 構成ファイル形式 (jsonまたはyaml)

  • --user: Keeperユーザー名

  • --password: Keeperパスワード

  • --server: Keeperサーバー (省略時は keepersecurity.com)

docker run -d -p 9009:9009 keeper/commander:latest \
  service-create \
  -p 9009 \
  -c 'tree,ls' \
  -f json \
  --user [email protected] \
  --password mypassword

構成ファイル認証方式

要件

構成ファイル認証を利用するには、ホスト側で config.json を正しく構成しておく必要があります。

手順

  1. 構成が完了したら、ホストマシンの .keeper フォルダにある config.json を確認し、Dockerでマウントできるように、その内容を任意のパス (例: /path/to/local/config.json) にコピーする

  2. コピーが完了したら、デバイストークンやクローンコードの重複を防ぐため、ホストマシンの .keeper フォルダから元の config.json を削除する

構成ファイルをマウントして実行

docker run -d -p <port>:<port> \
  -v /path/to/local/config.json:/home/commander/.keeper/config.json \
  keeper/commander:latest \
  service-create -p <port> -c '<commands>' -f <json-or-yaml>

デプロイの確認

コンテナの状態を確認する

docker ps

コンテナログの確認

docker logs <container-name-or-id>

APIキーの取得

コンテナログに出力される次の行を探します。

Generated API key: <API-KEY>

リアルタイムでログを確認する

docker logs -f <container-name-or-id>

コンテナのアーキテクチャ

  • ベースイメージ: python:3.11-slim

  • ワーキングディレクトリ: /commander

  • 構成ファイルディレクトリ: /home/commander/.keeper/

  • Entrypoint: docker-entrypoint.sh (自動認証セットアップを実行)

コマンダ実行API エンドポイント

# v2 (非同期キュー有効)
curl --location 'http://localhost:<port>/api/v2/executecommand-async' \
--header 'Content-Type: application/json' \
--header 'api-key: <your-api-key>' \
--data '{
   "command": "<command>"
}'

# v1 (キュー無効・同期実行) 
curl --location 'http://localhost:<port>/api/v1/executecommand' \
--header 'Content-Type: application/json' \
--header 'api-key: <your-api-key>' \
--data '{
   "command": "<command>"
}'

ログイン状態維持モード

Keeperコマンダーには、セッションを一定期間維持するログイン状態維持モードがあり、指定した時間ログイン状態を維持できます。

このモードを有効にするには、次のコマンドを実行する。

this-device persistent-login on
this-device register
this-device timeout 43200

上記のタイムアウト設定を適用すると、次の30日間 (43200分) はコマンダーで認証を求められずに利用できます。ログイン状態の維持は、サービスモードAPIをバックグラウンドで継続して実行するために必要で、ログイン要求なしでシームレスに認証できます。

ログイン状態維持セッションについて、詳しくはこちらのページをご覧ください。

ログ記録

サービスには包括的なログ記録機能があり、以下の項目が記録されます。

  • サービスの起動と停止

  • 構成変更

  • API実行

  • セキュリティ関連イベント

  • エラー状況

ログ構成

Service Mode を開始すると、logging_config.yaml がデフォルトパス( ~.keeper ) に生成されます。デフォルトのログレベルは INFO です。ログを無効にする場合は enabled: false に変更します。ログレベルを変更する場合は levelINFODEBUGERROR のいずれかを指定します。

logging:
  enabled: true
  level: INFO

バックグラウンド プロセスのログ

バックグラウンドモードで実行されている場合、サービスログは以下に保存されます。

  • 場所: keepercommander/service/core/logs/service_subprocess.log

  • 内容: サブプロセスの出力、エラー、サービスイベント

  • 自動作成: サービスがバックグラウンドで開始されると自動的に作成される

Ngrokログ

ngrokトンネリングが有効になっている場合、追加ログが記録されます。

  • 場所: keepercommander/service/core/logs/ngrok_subprocess.log

  • 内容: ngrokの起動、接続イベント、パブリックURL生成、トンネルエラー

  • 含まれる情報: トンネル確立、再接続試行、ngrok固有のエラーメッセージ

  • 自動作成: ngrokトンネリングを構成してサービスを開始すると自動的に作成される

Cloudflareログ

Cloudflareトンネリングが有効になっている場合、追加ログが記録されます。

  • 場所: keepercommander/service/core/logs/cloudflare_tunnel_subprocess.log

  • 内容: Cloudflareトンネルの起動、接続イベント、パブリックURL生成、トンネルエラー

  • 含まれる情報: トンネル確立、再接続試行、Cloudflare固有のエラーメッセージ

  • 自動作成: Cloudflareトンネリングを構成してサービスを開始すると自動的に作成される

最終更新