# コマンダー 18.0.0

## Keeperコマンダー 18.0.0

本リリースでは、Keeper API を通じてフォルダ、レコード、共有、権限を管理できる新しいコマンドスイート**KeeperDrive**が追加されました。あわせてPAM向けのKCM/Guacamoleインポート、ローテーション状態のJSON出力、トンネルの自動化モード、既存アプリケーションへのKSMトークン追加機能も導入されています。

### KeeperDrive

フォルダ、レコード、共有、権限を扱う `kd-*` コマンド群が追加されました。すべてのコマンドは認証と同期済みのボルトが必要です。これらのコマンドは機能フラグによって制御されており、許可されたユーザーのみコマンドが表示されます。

完全なリファレンスは `KEEPER_DRIVE_COMMANDS.md` をご参照ください。

#### 権限ロール

フォルダおよびレコードコマンドでサポートされる共有ロールは、以下の5種類です。

| ロール                     | 説明                      |
| ----------------------- | ----------------------- |
| `viewer`                | 参照のみ                    |
| `shared-manager`        | アクセス付与を管理可能             |
| `content-manager`       | レコードの追加、編集が可能           |
| `content-share-manager` | レコードの追加、削除、編集、アクセス管理が可能 |
| `full-manager`          | フルコントロール                |

#### フォルダコマンド

* **`kd-mkdir`** — フォルダを作成。 `--color {none,red,orange,yellow,green,blue,gray}` に対応しており、`--no-inherit` で権限継承を無効化できます。フォルダ名内の `/` をリテラル文字として扱う場合は `//` を使用します。
* **`kd-rndir`** — フォルダ名の変更、色の変更、権限継承の切り替え (`--inherit` / `--no-inherit`) を実行。 `-q` を指定すると確認メッセージを表示しません。
* **`kd-list`** — ローカルキャッシュからKeeperDriveのフォルダとレコードを一覧表示。 `--folders` / `--records` によるフィルタリング、 `--format {table,csv,json}` および `--output FILE` によるエクスポートに対応。各行には共有状態およびアクセスユーザー数が表示されます。
* **`kd-rmdir`** — フォルダを削除。実行前に必ず影響範囲のプレビューが表示されます。モード: `folder-trash` (デフォルト、復元可能) または `delete-permanent` (完全削除、復元不可)。 `--force`、 `--dry-run`、 `--quiet` に対応。1回の実行で削除できるフォルダ数は最大100件です。
* **`kd-share-folder`** — 1つ以上のフォルダに対し、1人以上の受信者へアクセスを付与または削除 (`-a {grant,remove}`)。 `-e` は繰り返し指定可能。 `@existing` / `@current` はフォルダ内の現在の全ユーザーを対象にします。 `--expire-at <ISO>` または `--expire-in <30d|6mo|1y|24h|30mi|never>` で期限付き共有を指定できます。

#### レコードコマンド

* **`kd-record-add`** — レコードを作成。必須: `-t TITLE`、 `-rt TYPE`。任意: `-n NOTES`、 `--folder`。フィールドは `type=value` または `type.label=value` 形式で指定します。完全な文法を確認するには `--syntax-help` を実行してください。
* **`kd-record-update`** — 1件以上のレコードのタイトル、タイプ、メモ、フィールド値を更新 (`-r` は繰り返し指定可能)。
* **`kd-rm`** — 実行前に影響範囲のプレビュー付きでレコードを削除。操作:
  * `owner-trash` (デフォルト) — オーナーのゴミ箱へ移動 (復元可能)。
  * `folder-trash` — フォルダから外してゴミ箱へ移動。
  * `unlink` — 指定フォルダからのみ削除 (`--folder` が必須)。\
    `--force`、 `--dry-run` に対応。1回の実行で処理できるレコード数は最大500件です。
* **`kd-ln`** — レコードを別フォルダへリンク (`kd-ln <record> <folder>`)。現在の場所からは削除しません。
* **`kd-shortcut list`** / **`kd-shortcut keep`** — 複数フォルダに存在するレコードを管理。 `list` は `--format {table,csv,json}` および `--output` で複数フォルダのレコードを表示。 `keep` は1つのフォルダに残しそれ以外のフォルダからはリンク解除します。 `-f` を指定すると確認プロンプトをスキップします。

#### 共有コマンド

* **`kd-share-record`** — `-a {grant,revoke,owner}` で付与 / 取り消し / 所有権移転を単一コマンドで実行。必須: `-e EMAIL` (繰り返し指定可)、 `grant` 時は `-r ROLE`。フォルダツリー一括共有の `-R/--recursive`、 `--contacts-only`、 `--force`、 `--dry-run`、 `--expire-at` / `--expire-in` に対応。既に共有済みのレコードに対して `-a grant` を実行した場合は、既存のロールが更新されます。
* **`kd-record-permission`** — フォルダ内の全レコードの共有を一括更新。 `-R` を指定するとサブフォルダも対象に含まれます。必須: `-a {grant,revoke}`、 `grant` 時は `-r ROLE`。実行前に必ず変更計画を表示。 `--force` および `--dry-run` に対応。
* **`kd-transfer-record`** — 1件以上のレコードの所有権を別ユーザーへ移転。この操作は取り消し不可であり、移譲後は対象レコードへのアクセス権を失います。

#### 確認コマンド

* **`kd-record-details`** — 1件以上のレコードのメタデータ (タイトル、タイプ、バージョン、リビジョン) を一括取得。 `--format {table,json}`。
* **`kd-get`** — レコードまたはフォルダの詳細 (フィールド、メモ、アクセス一覧) を表示。 `--format {detail,json}` に対応、 `-v/--verbose` でアクセスユーザーごとの権限フラグの詳細を表示、マスク値 (パスワードなど) の表示は `--unmask`。

#### クロスタイプ検証 ([#2008](https://github.com/Keeper-Security/Commander/pull/2008))

各コマンドで、対象のタイプが操作内容に適合しているか検証されるようになりました。例えば、レコード専用コマンドにフォルダUIDを指定した場合 (またはその逆の場合)、何も実行されずに終わるのではなく、明確なエラーが返されます。

### PAM

#### `pam project export` (新機能)

指定したPAMプロジェクト構成UIDのボルトグラフを走査し、 `pam project import` がそのまま再インポートできるJSONを出力します。

* 出力スキーマは `PROJECT_IMPORT_JSON_TEMPLATE` と完全一致 (`project`、`shared_folder_users`、`shared_folder_resources`、`pam_configuration`、`pam_data.{resources,users}`)。
* リソースUIDはKeeperレコードUIDから決定的に導出され、テナント間で再インポートしても冪等性が保たれます。
* `sort_keys=True` を指定すると、Gitのdiffに適した決定論的JSONが生成されます。
* `--output FILE` を指定するとファイルへ書き出し、省略した場合は標準出力へ出力されます。
* インポート側で生成元を判別できるよう `tool_version: "commander-export-1.0"` を出力します。
* `pam project` 配下ではショートカット `x` として登録されています。

#### `pam project kcm-import` / `pam project kcm-cleanup` (新機能)

KCM/Guacamoleデータベースから接続を直接Keeper PAMへインポートします。

* Dockerの自動検出。
* グループのフィルタリング。
* 適応型スロットリング。
* SSH、RDP、VNC、Telnet、HTTP、MySQL、PostgreSQL、Oracle、SQL Server、LDAP、Kubernetesプロトコルにわたる150以上のパラメータマッピング。
* ラウンドトリップ対応: KCMインポート済みレコードは `pam_settings.connection.launch_credentials` / `administrative_credentials` 内のユーザー参照にタイトル名が使用されます。 `pam project export` は `record_cache` から一度構築するエクスポート単位のタイトル→UIDインデックスでタイトル形状の値を解決するため、KCMプロジェクトをエクスポート後に再インポートしても、ユーザー一覧が保持されます。22文字のUID形状の値は、手動編集されたレコードとの後方互換性維持のため、引き続き直接UIDとして利用可能です。

#### `pam tunnel` の自動化モード ([#1993](https://github.com/Keeper-Security/Commander/pull/1993))

CI/CD、systemd、スクリプト向けの非対話型のトンネルモードが追加。さらに、プロセス間セッションレジストリにより、別プロセスの `pam tunnel list` / `pam tunnel stop` が動作します。

`PAMTunnelStartCommand`:

* `--foreground` — 現在のプロセスで実行。Ctrl+Cまたは `--timeout` で終了。
* `--background` — デタッチされた子プロセスを起動。親プロセスは即座に終了します。
* `--run "<cmd>"` — トンネル開始後にコマンドを実行。終了時にトンネルを自動的に停止します。
* ライフサイクル制御の `--timeout` / `--pid-file`。
* 相互排他チェックを追加。TTYなし (バッチモード) の安全な既定。

`PAMTunnelListCommand` / `PAMTunnelStopCommand`:

* ファイルレジストリ経由で他プロセスが所有するトンネルも表示可能。
* `stop` はSIGTERM (Unix) / `TerminateProcess` (Windows) を送り、レジストリ行を削除。

新規 `keepercommander/commands/tunnel_registry.py`:

* `<tmp>/keeper-tunnel-sessions/<pid>.json` へのアトミックなJSON書き込み。
* 古いエントリのクリーンアップ、重複バインド検出 (ホスト/ポート認識対応)。
* POSIX環境での `0o700` ディレクトリ権限設定。

#### `pam launch` の改善 ([#2009](https://github.com/Keeper-Security/Commander/pull/2009))

* **強制終了をユーザーへ明示。** KeeperAIによる終了は赤色の `Session terminated by KeeperAI.`。管理者による終了は黄色の `Session terminated by administrator.`。その他の強制理由は1行の `Session ended (<reason>).` 情報メッセージを表示。通常終了やクライアント側からの終了時は、従来どおり何も表示されません。
* **バッチモードでの終了コードの追加。** `keeper pam launch UID` はKeeperAI終了で `SystemExit(40)`、管理者終了で `SystemExit(41)` を送出し、呼び出し元で条件分岐が可能に。対話シェルでは、シェル自体を終了せずにプロンプトが復元されます。
* **`python_handler` の終了理由名テーブルを修正。**&#x5F93;来はコード0〜6のみ (0の名称も誤り) で、以降に追加された理由をすべて取りこぼしていました。今回の修正で、現在使用される終了理由に正しく対応し、今回追加された2種類の終了理由も扱えるようになりました。
* **レコード解決の部分一致検索対応。**&#x55;ID/パス/完全一致タイトルでレコードが見つからない場合、PAMレコードタイトル、ホスト、`pamHostname` フィールドへ大文字・小文字を区別しない部分一致検索が可能に。複数一致は番号付き選択メニューを表示し、非TTY環境では一覧表示して終了します。

#### `pam rotation info --format=json` (KC-1230)

共有の `json_output_parser` 経由で `PAMRouterGetRotationInfo` にJSON出力を追加 (`--format {table,json}`、 `--output FILE`)。

オンライン時のJSONフィールド:

```
status, ready_to_rotate, pam_config_uid, node_id, gateway_name,
gateway_uid, admin_resource_uid, password_complexity,
password_complexity_detail, schedule_type, schedule_data,
disabled, script_name
```

オフライン時の出力: `status`、 `ready_to_rotate=false`。同様の出力形式が `discoveryrotation_v1.py` にも適用され、挙動が統一されました。

### シークレットマネージャー

#### `secrets-manager token add <APP_UID_OR_NAME>` (新機能)

既存の `client add` フローを利用した軽量ラッパーコマンドが追加。運用担当者や自動化スクリプトから、既存の KSM アプリケーションに対してワンタイムアクセストークンを追加できるようになりました。従来はアプリ作成時のみトークン生成が可能だった制限を解消しています。

対応オプション (`client add` と同一):

```
--count, --unlock-ip, --first-access-expires-in-min,
--access-expire-in-min, --name, --config-init, --return-tokens
```

実装は `KSMCommand.add_client()` へ完全に委譲し、新しいAPIは追加されていません。

### 修正

* **`pam project import` で重複UIDを拒否。** `process_data` がUID正規化ループ後にリソースおよびネストされたユーザーへ割り当てられたすべてのUID値を集約し、同一UIDが複数存在する場合は明確なエラーを返して処理を中断するようになりました。重複UIDが存在すると依存関係グラフが曖昧になり、レコード作成時にリンクエラーが発生してもエラーが表示されない不具合がありました。なお、外部から指定された有効かつ一意なUIDは、従来どおりそのまま利用できます。


---

# 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/release-notes/jp/developer-tools/commander/commander-18.0.0.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.
