# ポリシーのコントロール (ファイルリダイレクトの起動)

<figure><img src="https://762006384-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MJXOXEifAmpyvNVL1to%2Fuploads%2FCwBd6zHAG8EFZpHVNU8R%2Fimage.png?alt=media&#x26;token=9e2702e6-7820-4d4a-875d-0cce5bd85fb5" alt=""><figcaption></figcaption></figure>

**コンテキスト:** LaunchPrivilegeElevation ジョブ (別途のサンプルプロジェクトはありません)

***

### 概要 <a href="#overview" id="overview"></a>

特権昇格の要求がポリシーで**許可**されたとき、**LaunchPrivilegeElevation**ジョブは、要求された実行ファイルの代わりに**別の実行ファイルへリダイレクト**できます。ポリシー上は許可されているものの、OSや環境の都合で元の実行ファイルが適さない場合 (例: **rundll32**と**ncpa.cpl**を一時アカウント経由で起動すると正しく動作しない) に用います。リダイレクトは既存のLaunchPrivilegeElevationジョブ内で実装され、ポリシー評価およびコントロール (MFA、正当な理由、承認) は変わりません。

**主な動作:**

* リダイレクトはRedirectEvaluatorプラグイン設定の `metadata.redirect.enabled` で**有効または無効**になります。
* ルールに一致した場合: ジョブは呼び出し元へ**DENY**を送り、**代替**実行ファイルを昇格付きで起動します (例: **Keeper.NetworkConnections**)。
* リダイレクトが無効、またはルールに一致しない場合: 通常フロー (要求された exe を昇格起動し、成功時に DidElevate を送信)。

***

### 例: rundll32 + ncpa.cpl → Keeper.NetworkConnections <a href="#example-rundll32-ncpacpl-keepernetworkconnections" id="example-rundll32-ncpacpl-keepernetworkconnections"></a>

**シナリオ:** 管理者以外のユーザーが `rundll32.exe` を、コマンドラインに `ncpa.cpl` (ネットワーク接続のコントロールパネル) を含む形で昇格要求します。ポリシーは許可しますが、その組み合わせを一時アカウント経由で起動すると正しく動きません。リダイレクトで**Keeper.NetworkConnections**に差し替え、ユーザーには意図した機能を提供します。

#### ルールの構成

ルールは**RedirectEvaluator**プラグイン構成の `metadata.redirect.rules` で定義します。ルールの例:

```
{
  "metadata": {
    "redirect": {
      "enabled": true,
      "rules": [
        {
          "sourceExePattern": "rundll32\\.exe",
          "commandLinePattern": "ncpa\\.cpl",
          "elevationOnly": true,
          "nonAdminOnly": true,
          "targetExe": "Keeper.NetworkConnections",
          "targetArguments": ""
        }
      ]
    }
  }
}
```

* **sourceExePattern:** 正規表現。要求された実行ファイルに大文字小文字を区別せずにマッチ (例: `rundll32.exe`)。
* **commandLinePattern:** 正規表現。アンカーなしのため「含む」として動作 (例: `ncpa\.cpl` は `ncpa.cpl` を含むコマンドラインにマッチ)。
* **elevationOnly:** `true` — 特権昇格の要求にのみ適用 (LaunchPrivilegeElevation では既に前提)。
* **nonAdminOnly:** `true` — 要求ユーザーが**管理者でない**ときだけリダイレクト。
* **targetExe:** **Jobs/bin**から完全パスへ解決 (例: `Keeper.NetworkConnections` → `Jobs/bin/Keeper.NetworkConnections/...`)。[パス解決](#path-resolution)をご参照ください。
* **targetArguments:** 代替側のコマンドライン (ここでは空文字列)。

#### 例のルールに一致したときのフロー

{% stepper %}
{% step %}
**ユーザーが昇格を要求 (非管理者)**

ユーザーが `rundll32.exe` を、コマンドラインに `ncpa.cpl` を含む形で昇格させようとします。ユーザーは非管理者です。
{% endstep %}

{% step %}
**ポリシー評価とアクセスコントロール**

ポリシーは要求を許可します。コントロール (MFA、正当な理由、承認) は通常どおり実行されます。
{% endstep %}

{% step %}
**昇格ジョブ開始 — リダイレクト確認**

**LaunchPrivilegeElevation**ジョブが実行されます。最初のタスク: **check-redirect** (`metadata.redirect.enabled` がtrueのときのみ実行)。
{% endstep %}

{% step %}
**RedirectEvaluator の呼び出しと出力のマージ**

RedirectEvaluator は、FilePath、CommandLine、IsAdmin、**OriginalEventType** (ジョブが渡すイベント種別の文字列。例: `"PrivilegeElevation"`。承認フローと正当な理由のフローのいずれでもルールが適用される) を含むコンテキストで呼び出されます。標準出力に JSON (camelCase) を出力し、タスク実行側がマージして PascalCase のエイリアスを付与します。条件および launch-substitute からは、たとえば `DenyOriginalRequest: true`、`RedirectTargetExe: "Keeper.NetworkConnections"`、`RedirectTargetArgs: ""` を参照できます。
{% endstep %}

{% step %}
**ジョブがリダイレクト結果で分岐**

ジョブはリダイレクト結果で分岐します。

* **send-deny-redirect** — 呼び出し元へ**DENY**を発行し、元のexeを起動しない。
* **launch-substitute** — 解決済みの代替パスと引数で launch-elevated へ HTTP POST。
* 成功時は**send-did-elevate-response** (DidElevate) でクライアントに成功を表示。ユーザーにはネットワーク接続が意図どおり表示されます。
  {% endstep %}
  {% endstepper %}

#### リダイレクトの有効化と無効化

* **プラグイン構成:** `KeeperPrivilegeManager/Plugins/RedirectEvaluator.json`
  * `metadata.redirect.enabled`: **true**でリダイレクトオン、**false**でリダイレクトオフ (通常のlaunch-elevatedフロー)。
* **無効**のとき、check-redirect タスクは RedirectEvaluator 実行ファイルを実行せず、コンテキストで `DenyOriginalRequest: false` を設定してジョブは通常の launch-elevated パスへ進みます。

### パス解決 <a href="#path-resolution" id="path-resolution"></a>

**RedirectTargetExe** (例: `Keeper.NetworkConnections`) は、launch-substitute の HTTP 呼び出しの前に、タスク実行処理によって**完全パス**へ解決されます。

* タスク実行側は**Jobs/bin** (および該当する場合はPlugins/bin) に対して名前を解決します。例: `Jobs/bin/Keeper.NetworkConnections/`。
* **Keeper.NetworkConnections**は `Jobs/bin/Keeper.NetworkConnections/` 配下に配置されます (例: Setup-TestEnvironment.ps1またはデプロイ手順による)。
* エンドポイント特権マネージャーが管理する範囲で解決されたパス (Jobs/bin または承認済みプラグインパス) のみが代替起動に使われます。

***

### 関連ドキュメント <a href="#related-documentation" id="related-documentation"></a>

* [プラグインとタスクの設定](/keeperpam/jp/endpoint-privilege-manager/reference/plugin-and-task-settings.md) — リダイレクト (RedirectEvaluator) の設定。


---

# 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/endpoint-privilege-manager/policies/policy-examples/advanced-examples/policy-launch-file-redirect.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.
