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

<figure><img src="https://762006384-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MJXOXEifAmpyvNVL1to%2Fuploads%2FIedBdYTtl4MJVD5Mc5lf%2Fimage.png?alt=media&#x26;token=9c83a4f1-18a1-4ac1-aee8-029ec6190a38" alt=""><figcaption></figcaption></figure>

**対象読者:** システム管理者向けです。

特定のアプリケーション (例: PowerShell 7の `pwsh.exe`) の昇格がユーザーに許可されたときに、製品が**代替**の実行ファイル (例: Windows PowerShell 5.1) を起動するよう**リダイレクト**を構成する手順を説明します。**特権昇格**ポリシー、リダイレクトルールをプッシュする**SettingsUpdate**ポリシー、任意でサービス再起動なしで設定を再読み込みする**UpdateSettings**ポリシーを設定します。設定の再読み込みは**UpdateSettings**ポリシー、**KEPMサービスの再起動**、**マシンの再起動**でのみ可能です。ターミナルやスクリプトからは行えません。KEPMの管理エンドポイントは、KEPMと同様に署名された呼び出し元プロセスからのみ利用できます。

***

## リダイレクトとは <a href="#what-is-a-redirect" id="what-is-a-redirect"></a>

**特権昇格**の要求がポリシーで**許可**された場合、通常は要求された実行ファイルが昇格付きで起動されます。**リダイレクト**では**別の実行ファイルに差し替え**て起動でき、ユーザーには意図した体験 (例: 運用で想定するPowerShellのバージョン) を提供しつつポリシーで制御できます。

* **フロー:** ユーザーがアプリケーションAの昇格を要求 → ポリシーが許可 → 製品が**check-redirect**ロジックを実行 → ルールに一致すると製品はAを起動せず、代わりに**ターゲットB**を昇格起動する (例: PowerShell7の代わりにWindows PowerShell)。
* リダイレクトは**特権昇格**イベントにのみ適用されます (ファイルアクセスなど他のイベント種別ではありません)。
* リダイレクトルールは**RedirectEvaluator**プラグイン構成 (`metadata.redirect`) に保存されます。

***

## リダイレクトの要件 <a href="#what-is-required" id="what-is-required"></a>

| 要件                                    | 説明                                                                                                                                                                                                                   |
| ------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **LaunchPrivilegeElevationジョブ**       | デプロイされ登録されている必要があります。**check-redirect**タスクがあり、RedirectEvaluatorを呼び出します。                                                                                                                                              |
| **RedirectEvaluatorプラグイン**            | プラグイン構成に `metadata.redirect.enabled: true` と、`metadata.redirect.rules` に少なくとも1件のルールが必要です                                                                                                                             |
| **特権昇格ポリシー**                          | **ソース**アプリケーション (例: `pwsh.exe`) を**許可**するポリシー (またはコントロール付きで許可)。これがないと要求が拒否され、LaunchPrivilegeElevationジョブは実行されません。                                                                                                    |
| **SettingsUpdateポリシー**                | 完全なRedirectEvaluator JSON (リダイレクトルールを含む) をエンドポイントへプッシュし、`Plugins/RedirectEvaluator.json` を更新します。                                                                                                                     |
| **Process Configuration Policiesジョブ** | ConfigurationPolicyProcessorを実行し、SettingsUpdateポリシーの内容をプラグインファイルへ書き込みます。                                                                                                                                             |
| **プラグイン設定の再読み込み**                     | JSONファイル更新後、サービスが新しい構成を使う必要があります。再読み込みの**唯一の**方法は、**UpdateSettings**ポリシー (ポリシー前処理時に revert-all をトリガー)、**KEPMサービスの再起動**、または**マシンの再起動**です。KEPMの管理エンドポイントはターミナル、PowerShell、同様のツールからは呼べません。呼び出し元プロセスはKEPMと同じ署名である必要があります |
| **UpdateSettings ポリシー (任意)**          | 存在し前処理されると**revert-all**をトリガーし、サービス再起動**なし**で設定を再読み込みします。                                                                                                                                                            |

## ルールの形式 <a href="#redirect-rule-format" id="redirect-rule-format"></a>

ルールはRedirectEvaluatorプラグインJSONの**metadata.redirect.rules**に置きます。

| フィールド                  | 必須  | 説明                                                                                                                                                                   |
| ---------------------- | --- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **sourceExePattern**   | はい  | **実行ファイル名のみ**にマッチする正規表現 (例: `pwsh\.exe`、`rundll32\.exe`)。大文字小文字を区別しません。リテラルのドットには `\\.` を使います。                                                                       |
| **commandLinePattern** | はい  | 完全な**コマンドライン**にマッチする正規表現。大文字小文字を区別しません。**空にできません** — 任意のコマンドラインには `.*` を使います。                                                                                        |
| **elevationOnly**      | はい  | リダイレクトでは `true` (ルールは特権昇格にのみ適用)。                                                                                                                                     |
| **nonAdminOnly**       | いいえ | `true` の場合、要求ユーザーが**管理者でない**ときだけルールが適用されます。                                                                                                                          |
| **targetExe**          | はい  | 代替実行ファイル。完全パス (例: `C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe`) または製品が解決する名前 (例: `Keeper.NetworkConnections`)。Jobs/bin または Plugins/bin から解決されます。 |
| **targetArguments**    | いいえ | 代替側の引数 (多くの場合 `""`)。                                                                                                                                                 |

**重要:** **sourceExePattern**と**commandLinePattern**の**両方とも空でない**必要があります。コマンドラインに関係なくリダイレクトするには**commandLinePattern**に `".*"` を使います。

**ルール例: pwsh.exe を Windows PowerShell 5.1 へリダイレクト**

```
{
  "sourceExePattern": "pwsh\\.exe",
  "commandLinePattern": ".*",
  "elevationOnly": true,
  "nonAdminOnly": false,
  "targetExe": "C:\\\\Windows\\\\System32\\\\WindowsPowerShell\\\\v1.0\\\\powershell.exe",
  "targetArguments": ""
}
```

**順序の重要性:** **最初に**マッチしたルールが使われます。具体的なルールを一般的なルールより前に置きます。

***

{% stepper %}
{% step %}
**特権昇格ポリシー**

リダイレクトしたいアプリケーション (例: `pwsh.exe`) を**許可**するポリシーが必要です。要求が拒否されるとLaunchPrivilegeElevationジョブは起動せず、リダイレクトは実行されません。

1. 管理コンソールまたはポリシーストアで**特権昇格**ポリシーを作成する。
2. **PolicyType**を `"PrivilegeElevation"` に設定する。
3. **Status**を `"enabled"` に設定する。
4. **ApplicationCheck** (または相当) で**ソース**実行ファイルのパスまたはパターンに一致させる (例: `PowerShell\7\pwsh.exe` を含むパスや、製品のスキーマで定義できるパターン)。
5. **Controls**を昇格許可に設定する (例: `["ALLOW"]`、またはMFA/正当な理由/承認を含める)。
6. 適切な**ユーザー**および**マシン** (コレクション) にポリシーを割り当てる。
7. エンドポイントへ展開/同期する。

**例 (概念上):**

```
{
  "PolicyId": "allow-pwsh-elevation",
  "PolicyName": "Allow PowerShell 7 elevation (redirect to 5.1)",
  "PolicyType": "PrivilegeElevation",
  "Status": "enabled",
  "Controls": ["ALLOW"],
  "Filters": {
    "ApplicationCheck": { "Applications": ["*pwsh*"] }
  }
}
```

FiltersおよびApplicationCheckは製品のスキーマに合わせて調整します (完全パス、パターン、コレクションベースのアプリリストなど)。
{% endstep %}

{% step %}
**SettingsUpdateポリシー (リダイレクトルール)**

このポリシーで**完全な**RedirectEvaluatorプラグインJSON (`metadata.redirect` を含む) を各エンドポイントの `Plugins/RedirectEvaluator.json` へプッシュします。

1. 希望する**RedirectEvaluator JSON全文**を用意する。
   * 必須プラグインフィールドをすべて含める: `id`、`name`、`description`、`version`、`pluginType`、`executablePath`、`Subscription`、`metadata` など (必要なら既存の `Plugins/RedirectEvaluator.json` をコピー)。
   * **metadata.redirect.enabled**を `true` にする。
   * **metadata.redirect.rules**にルールの配列を設定する (例: 上記の pwsh → Windows PowerShell ルール)。
2. **SettingsUpdateポリシー**を作成する。
   * **PolicyType:** `"SettingsUpdate"`
   * **Status:** `"enabled"` (またはコンソールに応じて `"enforce"`)
   * **Extension.PluginName:** `"RedirectEvaluator"`
   * **Extension.Action:** `"Update"` (任意。既定)
   * **Extension.SettingsJson:** RedirectEvaluatorプラグインJSONの**全体**。**文字列**(内側の引用符とバックスラッシュをエスケープ) または**オブジェクト** (入れ子JSON) のいずれでも指定可能。**オブジェクト**は読みやすく、構成プロセッサは両方を受け付けます。
3. 同じ (または適切な)**マシン/ユーザーコレクション**にポリシーを割り当て、展開/同期する。

**ポリシー例 (管理コンソール形式、SettingsJson をオブジェクトとして):**

以下は管理コンソールで作成された実際のSettingsUpdateポリシーです。**Extension.SettingsJson**は完全なRedirectEvaluatorプラグインJSONを含む**オブジェクト**です (文字列へのシリアル化は不要)。ポリシーにはコンソールに応じて**Actions**、**Rules**、**UserCheck**、**MachineCheck**、**ApplicationCheck**などのフィールドが含まれることがあります。

```
{
  "PolicyName": "Update RedirectEvaluator settings",
  "PolicyType": "SettingsUpdate",
  "PolicyId": "9ZqDaJ4G-murRdtJTHUVvw",
  "Status": "enforce",
  "Actions": {
    "OnSuccess": { "Controls": [] },
    "OnFailure": { "Command": "" }
  },
  "Rules": [
    { "RuleName": "UserCheck", "RuleExpressionType": "BuiltInAction", "Expression": "CheckUser()" },
    { "RuleName": "MachineCheck", "RuleExpressionType": "BuiltInAction", "Expression": "CheckMachine()" },
    { "RuleName": "ApplicationCheck", "RuleExpressionType": "BuiltInAction", "Expression": "CheckFile(false)" },
    { "RuleName": "DateCheck", "RuleExpressionType": "BuiltInAction", "Expression": "CheckDate()" },
    { "RuleName": "TimeCheck", "RuleExpressionType": "BuiltInAction", "Expression": "CheckTime()" },
    { "RuleName": "DayCheck", "RuleExpressionType": "BuiltInAction", "Expression": "CheckDay()" },
    { "RuleName": "CertificateCheck", "RuleExpressionType": "BuiltInAction", "Expression": "CheckCertificate()" }
  ],
  "UserCheck": ["*"],
  "MachineCheck": ["NSBYFNaHnhkIgVIazYhFXA"],
  "ApplicationCheck": ["*"],
  "DayCheck": [],
  "DateCheck": [],
  "TimeCheck": [],
  "CertificationCheck": [],
  "Extension": {
    "PluginName": "RedirectEvaluator",
    "Action": "Update",
    "SettingsJson": {
      "id": "RedirectEvaluator",
      "name": "Redirect Evaluator",
      "description": "...",
      "version": "1.0.0",
      "pluginType": "Executable",
      "executablePath": "../Jobs/bin/RedirectEvaluator/RedirectEvaluator.exe",
      "arguments": "--baseurl {KeeperApiBaseUrl}",
      "Subscription": { "Topic": "RedirectEvaluator" },
      "metadata": {
        "redirect": {
          "enabled": true,
          "rules": [
            {
              "sourceExePattern": "rundll32\\.exe", 
              "commandLinePattern": "ncpa\\.cpl", 
              "elevationOnly": true, 
              "nonAdminOnly": false, 
              "targetExe": "Keeper.NetworkConnections", 
              "targetArguments": ""
            },
            {
              "sourceExePattern": "Notepad\\.exe", 
              "commandLinePattern": "WindowsApps", 
              "elevationOnly": true, 
              "nonAdminOnly": false, 
              "targetExe": "C:\\\\Windows\\\\notepad.exe", 
              "targetArguments": ""
            },
            {
              "sourceExePattern": "WindowsTerminal\\.exe", 
              "commandLinePattern": ".*", 
              "elevationOnly": true, 
              "nonAdminOnly": false, 
              "targetExe": "C:\\\\Windows\\\\System32\\\\cmd.exe", 
              "targetArguments": ""
            },
            {
              "sourceExePattern": "pwsh\\.exe", 
              "commandLinePattern": ".*", 
              "elevationOnly": true, 
              "nonAdminOnly": false, 
              "targetExe": "C:\\\\Windows\\\\System32\\\\WindowsPowerShell\\\\v1.0\\\\powershell.exe", 
              "targetArguments": ""
            }
          ]
        }
      }
    }
  }
}
```

**注:** `SettingsJson` は**完全な**プラグインJSON (`id`、`name`、`executablePath`、`Subscription`、`metadata` など必須フィールドすべて) である必要があります。オブジェクトにするとポリシーが読みやすく、エスケープミスを避けられます。
{% endstep %}

{% step %}
**Process Configuration Policiesの実行**

**Process Configuration Policies**ジョブ (ConfigurationPolicyProcessor) がポリシーテンプレートを読み、**SettingsUpdate**ポリシーを検出し、**Extension.SettingsJson**を**PluginName**で示されるファイル (例: `Plugins/RedirectEvaluator.json`) に書き込みます。

* **スケジュール:** ジョブがスケジュールされていれば自動実行されます。同期後、次回の実行でSettingsUpdateポリシーが適用されます。
* **オンデマンド:** **KeeperClient**の「更新」オプションを使います。ポリシー同期と前処理がトリガーされ、該当する場合にProcess Configuration Policiesジョブが実行されます。ターミナルやPowerShellからKEPMエンドポイントでこのジョブを実行することはできません。呼び出し元プロセスはKEPMと同じ署名である必要があります。

この手順の後、エンドポイント上の `Plugins/RedirectEvaluator.json` にリダイレクトルールが含まれます。実行中のサービスは (手順4まで) まだ古いメモリ上の構成を使っている場合があります。
{% endstep %}

{% step %}
**プラグイン設定の再読み込み**

プラグインJSONファイルを更新した後、サービスが新しい設定を読み込む必要があります。再読み込みの**唯一の**方法は次のとおりです。

1. **UpdateSettings**ポリシー — ポリシーが前処理されると (例: KeeperClientの更新または同期後)、**UpdateSettings**ポリシーが revert-all をトリガーし、プラグイン設定が現在のメモリ上の構成からストレージへ再インポートされます。手順5をご参照ください。
2. **KEPMサービスの再起動** — サービスを停止して起動し、起動時にディスクからプラグイン構成を読み込みます。新しいファイルを確実に取り込みます (ホットリロードを妨げる構成保護/改ざん検出の問題を避けられます)。
3. **マシンの再起動** — プラグイン構成の読み込みについてはKEPMの再起動と同様の効果があります。

ターミナル、PowerShell、curl、その他未署名のツールからリロードをトリガーすることはできません。KEPMの管理エンドポイントは、KEPMと同様に署名された呼び出し元プロセスが必要です。
{% endstep %}

{% step %}
**任意: 再起動なしでリロードする UpdateSettings ポリシー**

サービスを**再起動せず**に**すべてのプラグイン設定を再読み込み**する(**POST /api/PluginSettings/revert-all**と同様の効果) には、**UpdateSettings**ポリシーを使います。

1. **PolicyType**を `"UpdateSettings"`、**Status**を `"enabled"` とするポリシーを作成する。
2. 同じ (または適切な) マシン/ユーザーコレクションに割り当て、展開/同期する。
3. KeeperPolicyがポリシーを**前処理**するとき (同期後やGetPolicyDataなど)、**UpdateSettings**を検出しrevert-allエンドポイントを1回呼び出します。プラグイン設定は現在のメモリ上の構成からストレージへ再インポートされます。

**注:** UpdateSettingsはプラグインJSONをディスクから**再読み込みしません**。構成プロバイダに既にある内容から再インポートします。したがって**SettingsUpdate**で新しいRedirectEvaluator.jsonを**初めて**プッシュしたときは、読み込みには**再起動**が最も確実です。UpdateSettingsは、構成が既に読み込まれた後の再読み込み (以前の再起動後やファイルウォッチャがファイルのリロードに成功した後など) に使います。
{% endstep %}
{% endstepper %}

### ターミナルやスクリプトからKEPMエンドポイントを呼び出すことについて <a href="#calling-kepm-endpoints-from-terminal-or-scripts" id="calling-kepm-endpoints-from-terminal-or-scripts"></a>

KEPMの管理エンドポイント(**POST /api/PluginSettings/revert-all**や**POST /api/PluginSettings/{pluginName}/revert**など)は**プロセス認証**を使います。呼び出し元プロセスはKEPMと同じ署名であり、検証に合格する必要があります (例: KeeperPrivilegeManagerによって起動される、または同等に信頼される)。ターミナル、PowerShell、cmd、curlは**署名されておらず**、これらのエンドポイントを呼ぶと**403**になります。したがってスクリプトやターミナルから設定のリロードをトリガーする方法は**なく**、**UpdateSettings**ポリシー、**KEPMサービスの再起動**、または**マシンの再起動**のみが可能です。

***

### 制限事項 <a href="#limitations" id="limitations"></a>

| 制限                      | 説明                                                                                                                                                                                                                                                                                                          |
| ----------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **特権昇格のみ**              | リダイレクトは**特権昇格**イベントに対してのみ評価されます。ファイルアクセスなど他のイベント種別ではリダイレクトロジックは実行されません。                                                                                                                                                                                                                                     |
| **両方のパターンが必須**          | **sourceExePattern**と**commandLinePattern**は**ともに空でない**必要があります。任意のコマンドラインにマッチさせるには `".*"` を使います。                                                                                                                                                                                                            |
| **先にポリシーが許可している必要**     | 昇格要求は特権昇格ポリシーで**許可**されている必要があります。要求が拒否されると LaunchPrivilegeElevation が起動せず、リダイレクトは評価されません。                                                                                                                                                                                                                   |
| **構成ファイルの改ざん保護**        | 製品が初回読み込み後に `Plugins/RedirectEvaluator.json` が変更されたと検出した場合 (改ざん保護)、ホットリロードでそのファイルの読み込みを**スキップ**することがあります。その場合、新しいルールを適用するには**KEPMサービスを再起動**するだけです (以前のハッシュがない起動時にファイルを読み込む)。管理コンソールから**Unified Storage**へ設定をプッシュする (例: PUT /api/PluginSettings/RedirectEvaluator/metadata) と、オンディスクのファイルに依存せず新しいルールを供給できます。 |
| **ターゲット実行ファイル**         | **targetExe**はパス、またはJobs/binまたはPlugins/bin配下に解決される製品が認識する名前である必要があります。代替はエンドポイント上に存在し、起動可能である必要があります                                                                                                                                                                                                        |
| **最初にマッチしたルールのみ**       | (実行ファイル名、コマンドライン、イベント種別、任意でnonAdminOnlyに) **最初に**マッチしたルールだけが使われます。ルールは具体的なものから一般的なものへ順序付けします。                                                                                                                                                                                                               |
| **Revert とディスク**        | **POST revert-all**および**POST …/revert**は**現在メモリ上**のプラグイン構成からUnified Storageへ再インポートします。ディスクのJSONファイルを**再読み込みしません**。オンディスクのファイルは更新されたが読み込まれていない場合 (例: 改ざん検出)、新しいファイルを使うには再起動が必要です。                                                                                                                            |
| **UpdateSettingsポリシー**  | **UpdateSettings**ポリシー種別は前処理実行時にrevert-allをトリガーします。プラグインJSONをディスクから再読み込みしません。既に読み込まれた構成を再起動なしで再読み込みする用途であり、一度も読み込まれていないファイルの読み込み用途ではありません。                                                                                                                                                                  |
| **ターミナル/スクリプトからのAPIなし** | 管理エンドポイント (revert-all、revert、ジョブ実行など) は、KEPMと同様に署名された呼び出し元プロセスが必要です。ターミナル、PowerShell、curlからは呼べません。                                                                                                                                                                                                          |

***

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

* [参考資料: リダイレクト](/keeperpam/jp/endpoint-privilege-manager/reference/redirect-capability.md) — リダイレクト機能とルールフィールド。
* [例: 設定を適用するポリシーの作成](/keeperpam/jp/endpoint-privilege-manager/policies/policy-examples/advanced-examples/policy-create-a-policy-to-set-settings.md) — SettingsUpdateポリシーとProcess Configuration Policiesジョブ。
* [参考資料: プラグインとタスクの設定](/keeperpam/jp/endpoint-privilege-manager/reference/plugin-and-task-settings.md) — プラグイン設定API、revert-all、revert。


---

# 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-create-a-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.
