# サービスモードREST API

<figure><img src="/files/nAV6KznIxUHtyM66gqhQ" alt=""><figcaption></figcaption></figure>

## Keeperコマンダーサービスモード <a href="#keeper-commander-service-mode" id="keeper-commander-service-mode"></a>

Keeperコマンダーのサービスモードモジュールを使うと、最小限の設定で安全なREST APIサーバーを立ち上げ、コマンダーのCLIコマンドをREST API経由で実行できます。セキュリティと構成の柔軟性を保ったまま運用でき、ローカルでの稼働に加え、必要に応じてNgrokまたはCloudflareトンネルを組み合わせ、ルーティング可能なアドレスを公開することもできます。

### 特徴 <a href="#features" id="features"></a>

#### コア機能

* **APIサーバー**: コマンダーCLIコマンドを実行するためのFlaskベースのREST APIサーバー
* **サービス管理**: APIサービスのライフサイクル全体の管理
* **構成管理**: インタラクティブなセットアップと簡略化されたセットアップの両方に対応した柔軟な構成システム
* **セキュリティ制御**: APIキー管理、アクセス制御、レート制限、IP許可/拒否などの包括的なセキュリティ機能
* **APIバージョン管理**: 同期処理 (v1) と非同期処理 (v2) の両方に対応する2種類のAPIバージョン
* **リクエストキューシステム**: 追跡とステータス監視を備えた高度な非同期リクエスト処理
* **柔軟なホスティングオプション**: オンプレミス、Dockerコンテナ、クラウドでの実行。統合された**NgrokまたはCloudflareトンネル**エージェントに対応

#### サービスコマンド

| コマンド                   | 説明                                   |
| ---------------------- | ------------------------------------ |
| `service-create`       | カスタマイズ可能な設定でサービスを初期化および構成する          |
| `service-start`        | 既存の構成でサービスを開始する                      |
| `service-stop`         | 実行中のサービスを正常に停止する                     |
| `service-status`       | 現在のサービスステータスを表示する                    |
| `service-config-add`   | 新しいAPI構成とコマンドアクセス設定を追加する             |
| `service-docker-setup` | KSM構成を使用したDockerサービスモードの自動セットアップ     |
| `slack-app-setup`      | コマンダーサービスモードを使用したSlackアプリ連携の自動セットアップ |

#### セキュリティ機能

* APIキー認証
* 設定可能なトークンの有効期限 (分/時間/日)
* API応答のオプションのAES-256 GCM暗号化
* 提供された証明書 (.pem) を使用したTLS対応
* 構成可能なルールによるレート制限
* IP許可リスト (ホワイトリスト) とIP拒否リスト (ブラックリスト) の管理
* リクエストの検証とポリシーの適用
* 秘密鍵を使用したローカルサービス構成JSONまたはYAMLファイルの暗号化

### セキュリティ <a href="#security" id="security"></a>

Keeperコマンダーサービスモード機能は、既存のコマンダーセッションをREST APIでラップするセルフホステッドミドルウェアです。この機能は、高速なリクエストとシンプルなHTTPSベースのAPIが求められる環境に適しています。

この機能を最も安全に使用するためには、以下のことをお勧めします。

* コマンダーサービス専用のサービスアカウントを使用し、必要な権限と機能のみに範囲を限定してください。
* また、コマンドのアクセス制御についても、ユースケースに応じて必要なコマンドのみに制限することを推奨します。
* REST APIエンドポイントへのアクセスにIPホワイトリストを適用する。
* コマンダーサービスを実行しているマシンへのアクセスを保護する。
* 異なるコマンドや使用ケースごとに異なるAPIトークンを使用する。

### 使用法 <a href="#usage" id="usage"></a>

#### 基本設定

[Keeperコマンダーをインストール](/keeperpam/jp/commander-cli/commander-installation-setup.md)してからシェルへログインします。

```
keeper shell
```

プロンプトが表示されたら、Keeperの認証情報を使用してログインします。コマンダーサービスモードは通常サービスとして実行されるため、生体認証ログイン、または永続的なログインセッションの利用を推奨します。

生体認証ログイン

```
biometric register
```

または、以下のコマンドを使用して永続的なログインセッションを作成します。

```
this-device persistent-login on
this-device register
this-device timeout 30d
this-device 2fa_expiration forever
```

#### サービスモードの作成: 対話的設定の使用

対話形式のプロンプトを使ってサービスを作成・構成します。

```
service-create
```

以下の項目の設定を求められます。

* ポート番号
* Ngrok認証トークン (任意)
* Cloudflareトンネルトークン (任意)
* TLS証明書のパス (任意)
* リクエストキューシステム (y/n)
* セキュリティ設定 (任意)
* 設定フォーマット (yaml/json) (未作成の場合)
* 実行モード (フォアグラウンド/バックグラウンド)
* コマンドアクセス制御

例: TLS証明書 (https) を使用してサービスモードを作成する

```
My Vault> service-create
Enter Port No:9090
Enable Ngrok Tunneling? (y/n):n
Enable TLS Certificate (y/n):y
Enter Certificate Path:/Users/cert/cert.pem
Enter Certificate Password:/Users/cert/key.pem
Enable Request Queue? (y/n):y
Enable Advanced Security? (y/n):n
Select Run Mode (foreground/background):foreground
List of supported commands, Enter comma separated:whoami,record-add,tree,ls
Select configuration format (json/yaml):yaml
Generated API key: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Uploading service_config.yaml ...
Commander Service starting on https://localhost:9090/api/v2/
Commander Service started with PID: 35215
```

#### ストリームライン構成

1つのコマンドでサービスをすばやく構成できます (デフォルトはフォアグラウンドモードでHTTP)。

```
service-create -p 9090 -c 'record-add,whoami' -f json
```

**Ngrok**を使用してすばやく構成する場合 (Ngrok認証トークンとNgrokサブドメインを指定)

{% code overflow="wrap" %}

```
service-create -p 9090 -c 'record-add,whoami' -ng xxxxxxxxxxx -cd mydomain
```

{% endcode %}

**Cloudflare**を使用してすばやく構成する場合 (Cloudflare認証トークンとドメイン名を指定)

{% code overflow="wrap" %}

```
service-create -p 9090 -c 'record-add,whoami' -cf xxxxxxxxxxx -cfd myname
```

{% endcode %}

詳細オプションを使用して構成する場合

{% code overflow="wrap" %}

```
service-create -p <port> -f <json-or-yaml> -c <command-list> -rm <foreground-or-background> -q <y-or-n> -crtf <certificate-file-path> -crtp <certificate-password-key-path> -aip <allowed-ip-list> -dip <denied-ip-list>
```

{% endcode %}

**ストリームラインパラメータ**

* `-p, --port`: サービスのポート番号 (簡易構成を開始するために必須)
* `-c, --commands`: 許可コマンドまたはエイリアスのカンマ区切りリスト (必須)
* `-ng, --ngrok`: クラウド管理のURLアクセス用のNgrok認証トークン (任意)
* `-cd`: Ngrokカスタムドメイン。サブドメイン部分のみ (任意)
* `-cf,--cloudflare`: クラウド管理のURLアクセス用のCloudflareトンネルトークン (任意)
* `-cfd`: Cloudflareカスタムドメイン (任意)
* `-crtf, --certfile`: SSL証明書ファイルのパス。`.crt`、`.pem`、`.key` を指定可能 (任意)
* `-crtp, --certpassword`: SSL証明書のパスワード (任意)
* `-q, --queue_enabled`: リクエストキューシステムを有効化 (y/n) - **デフォルト: y**
* `-rm, --run_mode`: サービスの実行モード (foreground/background) - **デフォルト: foreground**
* `-f, --fileformat`: 構成ファイル形式 (json/yaml) - サービスはセットアップを促す前に、ローカルの構成ファイルとボルトで既存の構成形式を確認します。
* `-rl, --ratelimit`: IPごと・エンドポイントごとのレート制限 (例: `10/minute`、`100/hour`、`1000/day`) (任意)
* `-aip, --allowedip`: IP許可リスト (任意) - **デフォルト: 0.0.0.0/0,::/0**
* `-dip`: 拒否IPリスト (任意)
* `-ek, --encryption_key`: AES-256応答暗号化用のBase64エンコード32バイト鍵 (任意)
* `-te, --token_expiration`: APIキーの有効期限 (例: `30m`、`24h`、`7d`) (任意)
* `-ur, --update-record <RECORD_UID>`: 生成されたAPIキーとサービスURLを指定したボルトレコードに保存する - ログからAPIキーを隠すのに便利 (任意)

#### 構成ファイル

初期設定後、コマンダーはボルトに「Commander Service Mode」というタイトルのレコードを作成します。このレコードには `service_config` という名前のYAML/JSONファイルが含まれます。

<figure><img src="/files/2h6EWsLiP744BAxi0HWP" alt=""><figcaption><p>コマンダーサービスモードレコード</p></figcaption></figure>

次回以降の起動では、パラメータなしの `service-start` コマンドが必要です。構成は、ローカルの暗号化された service\_config ファイルから読み込まれます。

{% hint style="info" %}
構成はボルトに安全に保存されていますが、サービスは起動時にローカルにキャッシュされた暗号化ファイルを使用します。ボルトからの再読み込みを強制するには、`service-start` を実行する前にローカルの構成ファイル (\~/.keeper/service\_config.json または .yaml) を削除してください。
{% endhint %}

#### 例: ターミナルからフォアグラウンドで起動する

サービスはシステムのターミナルから起動できます。たとえば、以下のコマンドは `/api/v1` をフォアグラウンドモードで実行します (`/api/v2` ではキューモード (-q y) を有効化してください)。

{% code overflow="wrap" %}

```
keeper service-create -p 8090 -f json -c 'sync-down,whoami,record-add,login-status' -rm foreground -q n
```

{% endcode %}

Ctrl-Cでサービスを停止できます。サービスを作成したあとは、ターミナルからは次のように起動するだけでかまいません。

```
keeper service-start
```

[生体認証ログイン](/keeperpam/jp/commander-cli/commander-installation-setup/logging-in.md#logging-in-with-biometric-authentication)または[永続ログイン](/keeperpam/jp/commander-cli/commander-installation-setup/logging-in.md#persistent-login-sessions-stay-logged-in)が有効になっている場合、サービスの起動はシームレスに行われます。

#### サービス管理

サービスステータスを確認します。

```
My Vault> service-status
Current status: Commander Service is Running (PID: 12345, Terminal: /dev/ttys003)
```

追加の構成を追加します。

```
My Vault> service-config-add
List of supported commands, Enter comma separated:tree
Generated API key: XXXXXXXXXXXXXXXXXXX=

Uploading service_config.yaml ...
Config Record with API key created successfully.
```

サービスを開始します。

```
My Vault> service-start
Commander Service starting on https://localhost:8900/api/v2/
Commander Service started with PID: 12345
```

サービスを停止します。

```
My Vault> service-stop
Service stopped successfully
```

***

### ヘルスチェック

コマンダーのサービスモードでは、サービスの稼働状態を確認するためのヘルスチェック用URLが用意されています。以下は、サービスがlocalhostのポート8080で稼働している場合の例です。

リクエスト

```
curl http://localhost:8080/health
```

レスポンス

```
{"status":"ok"}
```

### サポート <a href="#support" id="support"></a>

サポートや機能のリクエストについては、[GitHubでIssueを開く](https://github.com/Keeper-Security/Commander/issues)か、以下までお問い合わせください。

* メール: <commander@keepersecurity.com>

***

### 次の手順

* [APIの使用](/keeperpam/jp/commander-cli/service-mode-rest-api/api-usage.md)
* [サービストンネル](/keeperpam/jp/commander-cli/service-mode-rest-api/service-tunneling.md)
* [Dockerによるデプロイ](/keeperpam/jp/commander-cli/service-mode-rest-api/docker-deployment.md)
* [高度な設定](/keeperpam/jp/commander-cli/service-mode-rest-api/advanced-settings.md)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.keeper.io/keeperpam/jp/commander-cli/service-mode-rest-api.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
