# PAM Launch JIT

## PAM Launch — ジャストインタイム (JIT) アクセス

`pam launch` のジャストインタイム (JIT) アクセスは、セッションの存続期間中のみ認証情報または昇格された特権を付与し、セッション終了時にそれらの変更を元に戻します。KeeperのPAMゲートウェイと組み合わせることで、常時特権の縮小と、ターゲットシステム上で認証情報が有効な期間の短縮に役立ちます。

***

### 概要

コマンダーにおけるJITアクセスは、 `pam launch` へのオプトイン拡張です。 `-j`/`--jit` を指定すると、**pamMachine**レコードの `pamSettings.options.jit_settings` が読み取られ、ゲートウェイへセッション向けに以下のいずれか、または両方の動作が指示されます。

* **一時アカウント** — ゲートウェイがセッション用の短期アカウントをターゲット上に作成し、切断時に削除します (`jit_settings` の `create_ephemeral: true`)。
* **特権昇格** — ゲートウェイがリンク済み認証情報をセッション中のみ昇格グループまたはロールに追加し、切断時に元に戻します (`elevate: true`)。

**両方**を併用できます。一時アカウントをプロビジョニングし、セッション中に直ちに昇格させます。

このモデルは、常時特権ゼロのパターンに対応します。対話型セッションがアクティブな間だけ、認証情報または昇格メンバーシップが存在します。

**JIT有効時にコマンダーが行うこと**

`-j`/`--jit` 指定時、コマンダーはpamMachineレコードから `jit_settings` を読み取り、一時プロビジョニングが有効な場合はゲートウェイへ `credentialType='ephemeral'` を送信します。モードに応じて任意の `jitSettings` および `jitElevation` ペイロードが付加されます。アカウントの作成、昇格の適用、切断時のクリーンアップはゲートウェイ側で行われます。

***

### 要件

JITの動作は、**pamMachine**レコード上の以下のパスにある構成によって完全に制御されます。

`pamSettings.options.jit_settings`

`--jit` を使用する前に、そのオブジェクトに目的のモード (一時、昇格、または両方) に合ったフラグとフィールドが定義されていることを確認してください。コマンダーはJIT設定を自動生成しません。 `-j` 指定時はレコード上の設定をそのまま転送します。

**チェックリスト (下記「レコード構成」セクションと同一フィールド)**

* 一時アカウントが必要な場合は `create_ephemeral`/`ephemeral_account_type` (およびドメイン専用フィールド) を設定
* 一時的な特権昇格が必要な場合は `elevate` 、 `elevation_method` 、 `elevation_string` を設定
* **ドメイン**の一時アカウントでは `pam_directory_uid_ref` を設定し、該当する場合は `base_distinguished_name` も設定

ドメインモードの一時プロビジョニングでは、 `ephemeral_account_type` が `domain` のときレコード上に `pam_directory_uid_ref` が追加で必要です (「制限と要件」をご参照ください)。

**ボルトルールとの整合**

`ephemeral_account_type == 'domain'` は、レコード上の宣言型バリデーターが要求する `pam_directory_uid_ref` と同じ条件を満たす必要があります。

***

### JITモード

| モード         | 適用条件                                           | 効果                                  |
| ----------- | ---------------------------------------------- | ----------------------------------- |
| **一時アカウント** | `jit_settings` で `create_ephemeral: true`      | セッション用の短期アカウントを作成し、切断時に削除           |
| **特権昇格**    | `jit_settings` で `elevate: true`               | リンク済み認証情報を昇格グループまたはロールに追加し、切断時に元に戻す |
| **両方の併用**   | `create_ephemeral: true` と `elevate: true` の両方 | 一時アカウントの作成とセッション中の昇格を同時に実施          |

**モード間の相互作用**

* **一時のみ** — 短期アカウントのライフサイクルはセッションに紐づく。 `elevate` も `true` でない限り昇格ペイロードは不要。
* **昇格のみ** — リンク済み認証情報がセッション中に昇格する。 `credentialType` は昇格のワイヤ行に従い (`linked` と `userRecordUid`)。
* **両方** — プロビジョニングは一時経路 (`credentialType` は `ephemeral`)、昇格メタデータは `jitElevation` で併送。

***

### レコード構成 (`jit_settings`)

すべてのJITオプションはpamMachineレコードの `pamSettings.options.jit_settings` にあります。

| フィールド                     | 型/値                             | 説明                                                                       |
| ------------------------- | ------------------------------- | ------------------------------------------------------------------------ |
| `create_ephemeral`        | boolean                         | `true` のとき、ゲートウェイがセッション用の一時アカウントを作成し、セッション終了時に削除する。                      |
| `ephemeral_account_type`  | `"local"`\| `"domain"`          | 一時アカウントがローカルかドメイン連携か。                                                    |
| `base_distinguished_name` | string (DN)                     | ベースの識別名。**ドメイン**モードでのみ使用。                                                |
| `pam_directory_uid_ref`   | UID string                      | ディレクトリ構成への参照。 `ephemeral_account_type` が `domain` のとき**必須** (宣言型バリデーター)。 |
| `elevate`                 | boolean                         | `true` のとき、ゲートウェイがリンク済み認証情報をセッション中に昇格し、切断時に元に戻す。                         |
| `elevation_method`        | `"sudo"`\| `"group"`\| `"role"` | 昇格の適用方法 (sudo、グループメンバーシップ、ロールなど)。                                        |
| `elevation_string`        | string                          | 選択した方式の対象値 (sudoグループ名やロール名など)。                                           |

***

### `--jit`(`-j`) の使用

**フラグ**

| 短縮   | 長い形式    | 説明                                                                                                       |
| ---- | ------- | -------------------------------------------------------------------------------------------------------- |
| `-j` | `--jit` | この起動でJITプロビジョニングをオプトイン。コマンダーは適切な `credentialType` および任意の `jitSettings`/`jitElevation` ペイロードをゲートウェイへ送信する。 |

**構文 (概念)**

```
pam launch -r <record-uid> -j [--additional launch options]
```

`jit_settings` を定義したレコードでも**JITは自動では有効になりません**。 `-j`/`--jit` を明示的に指定する必要があります。

**例**

基本的なJIT起動の例。

```bash
My Vault> pam launch -r <record-uid> -j
```

特定のゲートウェイでJITを使う例。

```bash
My Vault> pam launch -r <record-uid> -j -g <gateway-uid>
```

相互排他オプション (以下のセクションで述べる組み合わせは拒否されます)。

```bash
My Vault> pam launch -r <record-uid> -j -cr admin
```

レコード上の `allowSupplyHost` も `-j` と両立しません (明確なエラー)。

`allowSupplyHost` ありでJITを試す例 (拒否される)。

```bash
My Vault> pam launch -r <record-uid> -j
# レコードに allowSupplyHost が設定されている場合は拒否 (コマンダーが明確なエラーを返す)。
```

***

### 優先順位と相互排他

**認証情報の優先順位** (ウェブボルトと整合):

1. `allowSupplyHost`
2. JIT
3. `allowSupplyUser`
4. linked

**検証ルール**

* レコードに `allowSupplyHost` がある場合、 `-j`/`--jit` は**拒否**されます (コマンダーが明確なエラーを返す)。
* `-j` は `-cr` 、 `-H` 、 `-hr` と**相互排他**です。JITが認証情報 (または一時アカウント) を自らプロビジョニングするため。
* `ephemeral_account_type == 'domain'` では、宣言型バリデーターと同様にレコード上の `pam_directory_uid_ref` が必要。

**相互排他フラグ**

| フラグ/オプション | `-j` との関係                         |
| --------- | --------------------------------- |
| `-cr`     | `-j` と相互排他 (JITが認証情報を自らプロビジョニング)。 |
| `-H`      | `-j` と相互排他 (JITが認証情報を自らプロビジョニング)。 |
| `-hr`     | `-j` と相互排他 (JITが認証情報を自らプロビジョニング)。 |

***

### 動作の仕組み

#### エンドツーエンドの流れ

1.コマンダーがpamMachineレコードから `pamSettings.options.jit_settings` を読み取る。 2. `-j`/`--jit` 指定時、コマンダーは優先順位とフラグの組み合わせを検証し、ゲートウェイ入力辞書を構築する。

* **一時** (「両方」を含む) では `credentialType` を `ephemeral` にし、 `create_ephemeral` 、 `ephemeral_account_type` 、および任意で `base_distinguished_name` と `pam_directory_uid_ref` を含む `jitSettings` を送信。
* **昇格**でリンク済み認証情報経路を使う場合、契約は `linked` の `credentialType` と `userRecordUid` 、および `elevate` 、 `elevation_method` 、 `elevation_string` を含む `jitElevation` 。
* **一時と昇格の両方**では `credentialType` は `ephemeral` とし、**`jitSettings` と `jitElevation` の両方**を送信。 3.一時モードでは、ゲートウェイのサーバー側認証情報注入を優先するため、guacd接続設定ではユーザー名とパスワードを意図的に空にする。 4.ゲートウェイがセッション向けにプロビジョニング (および必要に応じて昇格) し、切断時に一時アカウントの削除および/または昇格の取り消しを行う。

#### コマンダーとゲートウェイの責務

* **コマンダー** — レコードの `jit_settings` と選択した起動フラグに応じて `credentialType` 、任意の `jitSettings` 、任意の `jitElevation` を公開する。guacd / WebRTCに至るセッション経路を開く前に、「優先順位と相互排他」で述べた検証を実行する。
* **ゲートウェイ** — 一時モードでのアカウント作成・削除、昇格モードでの昇格の適用・解除、レコードで両方のフラグが有効な場合の組み合わせ動作を実行する。

#### 一時認証情報の注入 (guacd)

一時モードではguacd接続設定で**username**と**password**を**意図的に空**にします。ゲートウェイがサーバー側で正しい短期認証情報を注入するため、対話型セッションはコマンダーがguacdパラメータにシークレットを埋め込まなくても認証できます。

#### ワイヤ契約 (ゲートウェイ入力)

| モード | `credentialType`          | 追加ペイロード                                                                                                               |
| --- | ------------------------- | --------------------------------------------------------------------------------------------------------------------- |
| 一時  | `ephemeral`               | `jitSettings`— `create_ephemeral` 、 `ephemeral_account_type` 、任意で `base_distinguished_name` 、 `pam_directory_uid_ref` |
| 昇格  | `linked`+ `userRecordUid` | `jitElevation`— `elevate` 、 `elevation_method` 、 `elevation_string`                                                   |
| 両方  | `ephemeral`               | `jitSettings`**および** `jitElevation`                                                                                   |

**リスト形式 (同一契約)**

* **一時** — `credentialType`=`ephemeral` 。 `jitSettings` に `create_ephemeral` 、 `ephemeral_account_type` 、任意で `base_distinguished_name` と `pam_directory_uid_ref` 。
* **昇格** — `credentialType`=`linked` と `userRecordUid` 。 `jitElevation` に `elevate` 、 `elevation_method` 、 `elevation_string` 。
* **両方** — `credentialType`=`ephemeral` 。上記フィールドを含む `jitSettings` と `jitElevation` の両方。

コマンダーの `launch` フロー (PR #1979参照) は `jit_settings` を読み取り、 `jit.py` ヘルパーで `-j` / `--jit` を処理し、 `terminal_connection.py` 経由で `credentialType` とJITペイロードをguacdまたはWebRTCクライアントへ渡します。

***

### 制限と要件

| トピック              | 要件                                                                                        |
| ----------------- | ----------------------------------------------------------------------------------------- |
| ドメインの一時アカウント      | `ephemeral_account_type` を `domain` にする場合、レコード上に `pam_directory_uid_ref` が必要 (宣言型バリデーター)。 |
| `allowSupplyHost` | このようなレコードではJITは使用不可。コマンダーは `-j` を明確なエラーで拒否する。                                             |
| 競合フラグ             | `-j` は `-cr` 、 `-H` 、 `-hr` と併用不可。これらの組み合わせは拒否される。                                        |
| オプトイン動作           | レコード上の `jit_settings` だけではJITは自動起動しない。起動のたびに `-j` / `--jit` を明示する必要がある。                   |

***

### 後方互換性

JITは厳密にオプトインです。 `-j`/`--jit` を渡さない限り、既存の `pam launch` の動作は変わりません。レコードに `jit_settings` があっても、コマンドラインでJITを明示的に有効にするまで起動には影響しません。


---

# 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/command-reference/keeperpam-commands/pam-launch-jit.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.
