# ディスカバリー・ルールエンジン

<figure><img src="https://859776093-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPL6k1aGsLiFiiJ3Y7zCl%2Fuploads%2Fgit-blob-c68a6b5f07e047b7a1b34deb2f6f39a62cacafdd%2FKeeperPAM%20discovery.jpg?alt=media" alt=""><figcaption></figcaption></figure>

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

ディスカバリー・ルールエンジンでは、**検出の適用権限**を持つユーザーが、ゲートウェイ上の特定のPAM構成に対して、順序付きのルールセットを作成および管理できます。検出ジョブがリソースをどう識別するか、検出結果をどう扱い・保存するかを、ルールで制御できます。

この仕組みにより、大規模環境でもバッチ処理を自動化できます。数百から数千件に及ぶ検出リソースを手作業で確認・処理する代わりに、定めた条件に応じて追加、無視、確認のいずれかへ振り分けられます。

ルールは上から順に評価され、検出されたリソースに最初に一致したルールが、その後の処理を決定します (最初に一致したルールが適用されます)。

### 動作の仕組み <a href="#how-it-works" id="how-it-works"></a>

検出ジョブが実行されると、検出された各アイテムは、定義したルールに従って**上から順に**評価されます。

* 最初に一致したルールのみ適用
* 該当ゲートウェイでのルール評価の終了
* 選択されたアクションの実行 (追加 / 無視 / 確認)

### ルールのアクション <a href="#rule-actions" id="rule-actions"></a>

各ルールでは、次のいずれかのアクションを指定できます。

* **追加**\
  対象リソースにルール条件を自動適用し、ボルトへ追加
* **無視**\
  一致したリソースを除外し、ノイズや誤検知を抑制
* **確認**\
  追加の判断が必要なリソースを、ユーザーが確認する対象としてフラグ付け

### ルールの作成または管理 <a href="#creating-or-managing-rules" id="creating-or-managing-rules"></a>

ルールは、ボルトの**検出**セクション内の**ルール**タブから管理します。次の操作が可能です。

* 指定したPAM構成に対する新規ルールの作成
  * [ルールのアクション](#rule-actions)
  * [ルールで使えるフィールド](#fields-supported-by-the-rules-engine)
  * [演算子](#operators)
* 既存のPAM構成のルールセットの編集
* ルールの実行順序の変更
* ルールの有効化または無効化
* ルールの削除

<figure><img src="https://859776093-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPL6k1aGsLiFiiJ3Y7zCl%2Fuploads%2Fgit-blob-86194f4334f0f1e62ddbff5475f0b9ee70537c3d%2FRuleset%20Modal%20(1).jpg?alt=media" alt="" width="563"><figcaption></figcaption></figure>

### 実行順序と優先度 <a href="#ordering-and-priority" id="ordering-and-priority"></a>

ルールは定義された順序で評価されます。

* 既定では、ルールは**作成順**に評価
* ルールの順序は手動で並び替え可能
* **最初に一致したルール**のみ適用 (1回の検出ジョブで有効になるのは1件のみ)

### 検出ジョブ作成時のルールセットの割り当て <a href="#assigning-a-rule-set-when-creating-a-discovery-job" id="assigning-a-rule-set-when-creating-a-discovery-job"></a>

* **\[検出ジョブを作成]** をクリックし、**ゲートウェイ**を選択します。

<figure><img src="https://859776093-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPL6k1aGsLiFiiJ3Y7zCl%2Fuploads%2Fgit-blob-f24532816caeb3c3c353f9c53cdeef8ea09e30f9%2FDiscovery%20Tab_%20Rules.jpg?alt=media" alt=""><figcaption></figcaption></figure>

* そのゲートウェイに**複数のPAM構成**が関連付けられている場合は、使用する**PAM構成**を選択します。

<figure><img src="https://859776093-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPL6k1aGsLiFiiJ3Y7zCl%2Fuploads%2Fgit-blob-6dc9b4c7becc9b5db3808f3adf8b75a95483f5a0%2FDiscovery%20Modal%20-%20Gateway%20Selected%20(2).png?alt=media" alt="" width="411"><figcaption></figcaption></figure>

* 選択したゲートウェイでジョブが実行される際には、**そのPAM構成に関連付けられているルール**が適用されます。
* 選択したPAM構成にルールが設定されて**いない**場合は、**セットアップ中に新規作成**できます。

<figure><img src="https://859776093-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPL6k1aGsLiFiiJ3Y7zCl%2Fuploads%2Fgit-blob-2f043c3e6cda5f6ae9984c5a7b81c656086a8841%2FEdit%20Rule%20(1).png?alt=media" alt="" width="563"><figcaption></figcaption></figure>

### ルールで使えるフィールド <a href="#fields-supported-by-the-rules-engine" id="fields-supported-by-the-rules-engine"></a>

* `recordType` - PAMレコードの種類
* `recordTitle` - 自動生成されたレコードのタイトル
* `recordNotes` - 検出後処理でルール適用前に付与されるメモ (言語設定に応じた文言へ差し替え可能)
* `recordDesc` - オブジェクトの説明 (言語設定に応じた文言へ差し替え可能)
* `parentUid` - 親レコードのUID。主にPAMユーザーレコードで、ユーザーをリソースへ紐づけるときに使用
* `parentRecordType` - 親レコードの種類。リソースレコードとあわせ、同一リソース上のユーザーをまとめるのに利用
* `login` - PAMユーザー / マシン / データベース / ディレクトリ各オブジェクトのログイン名。プロバイダーやリソース種別によっては検出処理で値が入るが、多くは空
* `password` - PAMユーザー / マシン / データベース / ディレクトリ各オブジェクトのパスワード。検出では通常は未設定
* `privatePEMKey` - PAMユーザー / マシン / データベース / ディレクトリ各オブジェクトの秘密鍵。検出では通常は未設定
* `distinguishedName` - PAMユーザーおよびPAMディレクトリオブジェクトの識別名 (DN)
* `connectDatabase` - PAMユーザーおよびPAMデータベースオブジェクトの接続先データベース
* `managed` - ユーザーが別プロセスで管理されているかを示すフラグ。AWSでは[RDSのIAMユーザー](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.IAM.html)が該当。他プロバイダーでも同種の仕組みがある場合がある
* `hostName` - リソースのホスト名またはIP。照合はホスト名またはIPのいずれかに対して行われ、評価時はIPも同一条件に含まれる。例: `hostName == '127.0.0.1'` は `(hostName == '127.0.0.1' or ip == '127.0.0.1')` に展開され、`hostName != '127.0.0.1'` は `(hostName != '127.0.0.1' and ip != '127.0.0.1')` に展開
* `port` - 接続ポート。文字列ではなく数値として扱い、大小比較 (`>` / `>=` / `<` / `<=`)が可能
* `operatingSystem` - PAMマシンオブジェクトのOS情報。AWSやAzureなどでは取得できるが、ローカルネットワーク経由ではマシン外部からOSを判定できないため、未設定のことが多い
* `instanceId` - PAMマシンオブジェクトの識別子。AWSではEC2インスタンスID、AzureではVM名、その他ではIPまたはホスト名。同一ゲートウェイ上のPAMマシンでは一意になる想定
* `instanceName` - PAMマシンオブジェクトの名称。AWSではEC2インスタンス名またはID、AzureではVM名、その他ではIPまたはホスト名
* `providerGroup` - クラウド上のリソースまとまりの総称。Azureではリソースグループ。AWSでは未使用
* `providerRegion` - クラウドのリージョン総称。AWSでは**リージョン名**。Azureでは**ロケーション**に相当
* `databaseId` - PAMデータベースオブジェクトの識別子。AWSではRDSインスタンスID、Azureではデータベース名、その他では `IP/ホスト名:ポート`。同一ゲートウェイ上のPAMデータベースでは一意になる想定
* `databaseType` - データベース種別の列挙子
* `useSSL` - 検出でSSLが必要かを示す真偽値
* `domainName` - ディレクトリサービスのドメイン名 (識別名ではない)
* `directoryId` - PAMディレクトリオブジェクトの識別子。AWSではディレクトリID、Azureではドメイン名、その他では `IP/ホスト名:ポート`。同一ゲートウェイ上のPAMディレクトリでは一意になる想定
* `directoryType` - ディレクトリ種別の列挙子

{% hint style="info" %}
`port` では `>`、`>=`、`<`、`<=` などの大小比較が使えます。ルール式では数値を引用符で囲まないでください。文字列同士でも辞書順の大小比較が可能です。例: `hostName > "C"` は、ホスト名が「D」で始まるときに真、「B」で始まるときに偽になります。

`managed` および `useSSL` は真偽値です。ルール式では `true` / `false` を引用符で囲まないでください。
{% endhint %}

### 演算子 <a href="#operators" id="operators"></a>

| 演算子   | 説明                                              | 正規表現？ | データ型                     |
| ----- | ----------------------------------------------- | ----- | ------------------------ |
| ==    | 等しい                                             | いいえ   | すべてのデータ型                 |
| !=    | 等しくない                                           | いいえ   | すべてのデータ型                 |
| >     | より大きい                                           | いいえ   | すべてのデータ型                 |
| <     | より小さい                                           | いいえ   | すべてのデータ型                 |
| >=    | 以上                                              | いいえ   | すべてのデータ型                 |
| <=    | 以下                                              | いいえ   | すべてのデータ型                 |
| =^    | 先頭一致                                            | いいえ   | 文字列                      |
| =\*   | 部分一致 (含む)                                       | いいえ   | 文字列                      |
| =$    | 末尾一致                                            | いいえ   | 文字列                      |
| !^    | 先頭に一致しない                                        | いいえ   | 文字列                      |
| !\*   | 部分一致しない (含まない)                                  | いいえ   | 文字列                      |
| !$    | 末尾に一致しない                                        | いいえ   | 文字列                      |
| =\~\~ | 正規表現検索。文字列値の内容を検索し、一致が見つかれば真。                   | はい    | 文字列                      |
| !\~\~ | 正規表現検索。文字列値の内容を検索し、一致が見つかれば偽。                   | はい    | 文字列                      |
| =\~   | 正規表現マッチ。文字列値の先頭から検索し、一致が見つかれば真。                 | はい    | 文字列                      |
| !\~   | 正規表現マッチ。文字列値の先頭から検索し、一致が見つかれば偽。                 | はい    | 文字列                      |
| in    | 集合に含まれる値。値はJSON配列。例: \[ “One”, “Two”, “Three” ] | いいえ   | \[String\|Float\|Int, …] |


---

# 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/jp/keeperpam/privileged-access-manager/discovery/discovery-using-the-vault/discovery-rules-engine.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.
