# 간단한 디택션 매치 표현식 참조

## 개요

매치 표현식은 YAML로 정의되는 조건부 논리 표현식으로, 다음을 반환합니다 `true` 또는 `false`. 매치 표현식은 여러 곳에서 사용되며, 예를 들면 다음과 같습니다:

* 에서 [`디택션`](/ko/detections/rules/writing-simple-detections.md#detection) YAML로 작성된 Simple 디택션의 키
* 에서 [`InlineFilters`](/ko/detections/rules/inline-filters.md#yaml-inlinefilter-syntax) Python 또는 Simple 디택션의 키
* 에서 `Expressions` 의 키 [리스트 컴프리헨션 매치 표현식](#list-comprehension-match-expressions) (사실상 매치 표현식 안에 매치 표현식을 만드는 것)
* 에서 `Conditions` 의 키 [`DynamicSeverities`](/ko/detections/rules/writing-simple-detections.md#dynamicseverities) Simple 디택션의 키

총 일곱 가지 [유형의 매치 표현식](#types-of-match-expressions), 이 있으며 각각 구조가 다릅니다. 매치 표현식은 [결합자](#combinators) 을 사용해 그룹화하여 복잡한 조건을 만들 수 있습니다.

Simple 디택션에서 enrichment를 다음과 함께 사용할 수 있습니다 [enrichment 매치 표현식](#enrichment-match-expressions).

### 매치 표현식의 작동 방식

매치 표현식은 대략 다음과 같은 방식으로 작동합니다:

* 들어오는 이벤트의 키 하나를 [키 지정자](#key-specifiers)
* A [조건](#condition) 이 제공되며, 이는 검사 방식의 성격을 설명합니다
* A [값](#value-s) (또는 값 목록)이 비교 대상으로 제공됩니다

(비교를 위해 0개 또는 여러 개의 이벤트 키를 식별하거나 값이 필요하지 않은 예외적인 패턴도 있습니다.)

## 매치 표현식의 유형

매치 표현식에는 일곱 가지 유형이 있으며, 각각 고유한 구문 또는 구조를 가집니다.

다음 섹션의 매치 표현식 예시는 이 JSON 이벤트를 참조합니다:

<details>

<summary>예시 이벤트</summary>

이 섹션의 예시 매치 표현식에서 이 이벤트를 참조할 수 있습니다.

```json
{
  "audit_event": "RECLASSIFICATION",
  "status": "success",
  "date": "2006-08-24",
  "actor": "International Astronomical Union",
  "old_classification": "PLANET",
  "new_classification": "DWARF_PLANET",
  "entity": {
    "name": "Pluto",
    "diameter": {
      "distance": 2370,
      "unit": "km"
    },
    "moons": [
      {
        "name": "Charon",
        "year_discovered": 1978,
        "discovered_by": ["James W. Christy"],
        "diameter": {
          "distance": 1212,
          "unit": "km"
        }
      },
      {
        "name": "Nix",
        "year_discovered": 2005,
        "discovered_by": [
          "H. A. Weaver",
          "S. A. Stern",
          "M. J. Mutchler",
          "A. J. Steffl",
          "M. W. Buie",
          "W. J. Merline",
          "J. R. Spencer",
          "E. F. Young",
          "L. A. Young"
        ],
        "diameter": {
          "distance": 49.8,
          "unit": "km"
        }
      },
      {
        "name": "Hydra",
        "year_discovered": 2005,
        "discovered_by": ["A. J. Steffl", "M. J. Mutchler"],
        "diameter": {
          "distance": 51
          "unit": "km"
        }
      },
      {
        "name": "Kerberos",
        "year_discovered": 2011,
        "discovered_by": ["M. R. Showalter", "D. P. Hamilton"]
        "diameter": {
          "distance": 19,
          "unit": "km",
        }
      },
      {
        "name": "Styx",
        "year_discovered": 2012,
        "discovered_by": ["M. R. Showalter", "D. P. Hamilton"]
        "diameter": {
          "distance": 25
          "unit": "km" 
        }
      }
    ],
    "single_year_in_earth_years": 247.94,
    "year_discovered": 1930,
    "discovered_by": "Clyde Tombaugh",
    "orbit_region": "Kuiper belt",
    "atmosphere": {
      "composition": ["nitrogen", "methane", "carbon monoxide"],
      "surface_pressure": {
        "number": 1,
        "unit": "pascals"
      }
    }
  },
  "p_enrichment": {
    "discoverer_info": {
        "discovered_by": {
            "p_match": "Clyde Tombaugh",
	    "year_born": 1906,
	    "year_died": 1997
	}
    }
  } 
}
```

</details>

{% hint style="info" %}
아래의 각 예시 매치 표현식에서는 단일 [키 지정자](#key-specifiers) 을 사용해 이벤트 키를 식별하지만, 대부분의 경우 어떤 키 지정자든(예: `키`, `DeepKey` 또는 `KeyPath`) 사용할 수 있습니다.
{% endhint %}

### 키/값 매치 표현식

키/값 매치 표현식은 특정 이벤트 키의 값을 주어진 값과 비교합니다.

허용되는 모든 `조건` 값은 [아래의 스칼라 매칭 조건 표](#scalar-matching-conditions)에서 확인할 수 있으며, "Applicable Match Expressions" 열에는 "Key/value"가 포함됩니다.

예시:

```yaml
- Key: audit_event
  Condition: Equals
  Value: reclassification
```

### 키/값들 매치 표현식

키/값들 매치 표현식은 일부 이벤트 값이 주어진 목록의 멤버인지 평가합니다.

허용되는 유일한 `조건` 키/값들 매치 표현식용 값은 `IsIn` 및 `IsNotIn`이며, 이는 [아래의 리스트 매칭 조건 표](#list-matching-conditions).

예시:

```yaml
- KeyPath: entity.name
  Condition: IsIn
  Values:
    - Mercury
    - Venus
    - Earth
    - Mars
    - Jupiter
    - Saturn
    - Uranus
    - Neptune
```

### 멀티 키 매치 표현식

{% hint style="info" %}
멀티 키 매치 표현식은 Panther Console의 Simple 디택션 빌더에서 보거나 편집할 수 없으며, Inline Filters에서도 사용할 수 없습니다. 전체 목록은 다음을 참조하세요 [Simple 디택션 빌더 제한 사항은 여기](/ko/detections/rules/simple-detection-builder.md#limitations-of-the-simple-detection-builder)및 [Inline Filters 제한 사항은 여기](/ko/detections/rules/inline-filters.md#limitations-of-yaml-inline-filters).
{% endhint %}

멀티 키 매치 표현식을 사용하면 두 이벤트 키의 값을 비교할 수 있습니다. 멀티 키 매치 표현식은 `조건` 및 `Values` 에 두 개의 이벤트 키를 포함하는 목록을 넣어 만들 수 있습니다.

허용되는 모든 `조건` 값은 [아래의 스칼라 매칭 조건 표](#scalar-matching-conditions)값은 "Applicable Match Expressions" 열에 "Multi-key"가 포함된 곳에서 확인하세요.

```yaml
- Condition: IsGreaterThan
  Values: # 이 값들은 최대 두 개의 절까지 포함하여 `Key`, 'DeepKey', 또는 'KeyPath'의 어떤 조합이든 될 수 있습니다.
    - KeyPath: entity.diameter.distance # Pluto는 다음보다 더 큽니다...
    - KeyPath: entity.moons[0].diameter.distance # Charon
```

### 리스트 컴프리헨션 매치 표현식

{% hint style="info" %}
리스트 컴프리헨션 매치 표현식은 Panther Console의 Simple 디택션 빌더에서 보거나 편집할 수 없으며, Inline Filters에서도 사용할 수 없습니다. 전체 목록은 다음을 참조하세요 [Simple 디택션 빌더 제한 사항은 여기](/ko/detections/rules/simple-detection-builder.md#limitations-of-the-simple-detection-builder)및 [Inline Filters 제한 사항은 여기](/ko/detections/rules/inline-filters.md#limitations-of-yaml-inline-filters).
{% endhint %}

리스트 컴프리헨션 매치 표현식은 리스트 값을 가진 키를 받아, 리스트의 각 항목에 대해 매치 표현식 목록과 대조하여 평가합니다. 매치 표현식 목록은 `Expressions` 키 아래에 저장됩니다.

리스트 컴프리헨션 매치 표현식에서는 다음 `조건` 값이 유효합니다:

* `AnyElement`
* `AllElements`
* `OnlyOneElement`
* `NoElement`

이러한 `조건` 값에 대해 자세히 알아보려면 [아래의 리스트 컴프리헨션 조건 표](#list-comprehension-conditions)

다음을 사용하는 예시 `AnyElement`:

```yaml
- KeyPath: entity.moons
  Condition: AnyElement
  Expressions:
    - Key: name
      Condition: Equals
      Value: "Death Star"
    - Key: year_discovered
      Condition: IsGreaterThan
      Value: 2000
```

다음 `Expressions` 키 안에는 다음 중 하나를 추가할 수 있습니다:

* 중첩된 리스트 컴프리헨션 매치 표현식. 각 중첩 수준에는 리스트 컴프리헨션 매치 표현식을 하나만 포함할 수 있습니다. 이 구조는 사실상 중첩된 for 루프를 만듭니다. 가장 안쪽 리스트 컴프리헨션에는 원하는 만큼 많은 매치 표현식을 넣을 수 있으며, 단 리스트 컴프리헨션 매치 표현식은 제외됩니다. 예시:

  ```yaml
  - KeyPath: entity.moons
    Condition: AnyElement
    Expressions:
      - Key: discovered_by
        Condition: AllElements
        Expressions:
          - Key: $Element$
            Condition: Equals
            Value: "James W. Christy"
  ```
* 리스트 컴프리헨션 매치 표현식이 아닌 매치 표현식의 어떤 조합이든 가능합니다. 예시:

  ```yaml
  - Key: someKey
    Condition: AnyElement
    Expressions:
      - Key: a
        Condition: Equals
        Value: 123
      - Key: b
        Condition: IsIn
        Values:
        - 345
        - 678
  ```

### 존재 매치 표현식

존재 매치 표현식은 특정 키가 지정된 존재 조건과 일치하는지 판단합니다.

허용되는 모든 `조건` 값은 [아래의 스칼라 매칭 조건 표](#scalar-matching-conditions)이며, "Applicable Match Expressions" 열에는 "Existence"가 포함됩니다.

예시:

```yaml
- Key: entity.atmosphere
  Condition: Exists
```

### 절대 매치 표현식

{% hint style="info" %}
절대 매치 표현식은 Panther Console의 Simple 디택션 빌더에서 보거나 편집할 수 없으며, Inline Filters에서도 사용할 수 없습니다. 전체 목록은 다음을 참조하세요 [Simple 디택션 빌더 제한 사항은 여기](/ko/detections/rules/simple-detection-builder.md#limitations-of-the-simple-detection-builder)및 [Inline Filters 제한 사항은 여기](/ko/detections/rules/inline-filters.md#limitations-of-yaml-inline-filters).
{% endhint %}

특정한 경우에는 매치 표현식이 항상 다음으로 평가되기를 원할 수 있습니다 `True` 또는 `False`. 이는 단순히 `조건` 키를 다음으로 설정한 매치 표현식을 만들어 수행할 수 있습니다 `AlwaysTrue` 또는 `AlwaysFalse`.

```yaml
- Condition: AlwaysTrue
```

### enrichment 매치 표현식

{% hint style="info" %}
enrichment 매치 표현식은 Panther Console의 Simple 디택션 빌더에서 보거나 편집할 수 없으며, Inline Filters에서도 사용할 수 없습니다. 전체 목록은 다음을 참조하세요 [Simple 디택션 빌더 제한 사항은 여기](/ko/detections/rules/simple-detection-builder.md#limitations-of-the-simple-detection-builder)및 [Inline Filters 제한 사항은 여기](/ko/detections/rules/inline-filters.md#limitations-of-yaml-inline-filters).
{% endhint %}

enrichment 매치 표현식은 JSON 이벤트의 `p_enrichment` struct와 상호작용하는 데에만 사용되며, 이는 다음에 매치가 있을 경우 존재합니다 [Lookup Table](/ko/enrichment/custom.md), [Enrichment Provider](/ko/enrichment.md#enrichment-providers)또는 [Identify Provider Profile](https://github.com/panther-labs/panther-docs/blob/main/docs/gitbook/detections/rules/writing-simple-detections/broken-reference/README.md).

enrichment 매치 표현식을 만들려면 `Enrichment` 키를 포함하세요.  `Enrichment` 의 내용은 조건을 구성할 이벤트 키의 경로를 나타냅니다.  `Enrichment`안에는 다음 필드를 포함하세요:

* `Table`: Lookup Table, Enrichment Provider 테이블 또는 Identity Provider Profile 테이블의 이름입니다.
  * 이 이름은 Lookup Table의 경우 사용자가 정의하고, Enrichment Providers 및 Identity Provider Profiles의 경우 Panther가 정의합니다.
* `Selector`: 들어오는 로그의 [selector 필드](/ko/enrichment/custom.md#overview) 이름입니다.
* `FieldPath`:  `Selector` 필드 내 이벤트 필드 중 하나의 이름입니다. 이 키는 JSON path 표기법을 사용하므로, 필요하다면 중첩 필드를 나타낼 수 있습니다.

일단 `Enrichment` 및 그 하위 필드를 정의하고 나면, 매치 표현식의 나머지 부분은 *기타* 매치 표현식 유형의 구조를 따라 모델링할 수 있습니다. 단, [리스트 컴프리헨션 매치 표현식](#list-comprehension-match-expressions) (이 표현식들은 enrichment와 함께 사용할 수 없음) 및 [절대 매치 표현식](#absolute-match-expressions) (이 표현식들은 어떤 이벤트 값도 참조하지 않음)은 제외됩니다.

예를 들어, 아래의 enrichment 매치 표현식은 `조건` 및 `Value` 키를 포함하며,  [키/값](#key-value-match-expressions) 매치 표현식과 유사합니다:

```yaml
- Enrichment:
    Table: discoverer_info
    Selector: discovered_by
    FieldPath: p_match
  Condition: Equals
  Value: "Clyde Tombaugh"
```

## 결합자

{% hint style="info" %}
The `OnlyOne` 및 `None` 결합자는 Panther Console의 Simple 디택션 빌더에서 보거나 편집할 수 없으며, Inline Filters에서도 사용할 수 없습니다. 전체 목록은 다음을 참조하세요 [Simple 디택션 빌더 제한 사항은 여기](/ko/detections/rules/simple-detection-builder.md#limitations-of-the-simple-detection-builder)및 [Inline Filters 제한 사항은 여기](/ko/detections/rules/inline-filters.md#limitations-of-yaml-inline-filters).
{% endhint %}

결합자는 매치 표현식 또는 매치 표현식 그룹 간의 관계를 설명하는 YAML 키입니다. 결합자는 네 가지가 있습니다: `All`, `Any`, `OnlyOne`및 `None`.

매치 표현식을 받는 키 바로 아래에 둘 이상의 매치 표현식이 직접 제공되고(예: `디택션`, `InlineFilters` 또는 `Expressions`), 결합자가 지정되지 않으면 `All` 이 가정됩니다.

CLI 워크플로에서 Simple 디택션을 작성할 때는 결합자를 사용해 만들 수 있는 중첩 수준 수에 제한이 없습니다. (Panther Console의 [Simple 디택션 빌더](/ko/detections/rules/simple-detection-builder.md) 에서는 3단계 제한이 있습니다.) 로컬에서 작업할 때 매치 표현식이 3단계를 초과해 중첩되면 Panther Console은 이를 Simple 디택션 빌더에 렌더링하지 않으며, 원시 YAML에서만 볼 수 있습니다.

<table><thead><tr><th width="154.33333333333331">결합자</th><th width="216">불리언 연산자 이름</th><th>설명</th></tr></thead><tbody><tr><td><code>All</code></td><td>논리 AND</td><td>목록의 모든 매치 표현식이 true로 평가됩니다. 첫 번째 실패 매치에서 목록 평가가 종료됩니다.</td></tr><tr><td><code>Any</code></td><td>논리 OR</td><td>목록의 어떤 단일 매치 표현식이든 true로 평가됩니다. 첫 번째 true 매치에서 목록 평가가 종료됩니다.</td></tr><tr><td><code>OnlyOne</code></td><td>논리 XOR</td><td>목록에서 오직 하나의 단일 매치 표현식만 true로 평가됩니다.<br><br>다음에서는 사용할 수 없습니다 <a href="/pages/826d24763bf187089b1b759da66af0b58b95c92a#limitations-of-yaml-inline-filters">인라인 필터</a> 또는 다음에서 보거나 편집할 수 없습니다 <a href="/pages/41dd034ed11bdfe1e47bfbcfc10c080b92f72d95#limitations-of-the-simple-detection-builder">Simple 디택션 빌더</a> 에서.</td></tr><tr><td><code>None</code></td><td>논리 NOT AND</td><td>목록의 어떤 매치 표현식도 true로 평가되지 않습니다.<br><br>Console의 Simple 디택션 빌더에서 보거나 편집할 수 없고 Inline Filters에서도 사용할 수 없습니다.</td></tr></tbody></table>

다음을 사용한 한 단계 중첩 예시 `OnlyOne`:

```yaml
# 나열된 표현식 중 정확히 하나만 평가되어야 합니다 
# `OnlyOne` 블록이 true로 평가되려면
- OnlyOne:
  - Key: someKey
    Condition: DoesNotEqual
    Value: 1234
  - Key: someOtherKey
    Condition: Contains
    Value: "invalid login"
  - Key: someOtherOtherKey
    Condition: IsIn
    Values:
      - 314
      - 567
```

다음을 사용한 여러 단계 중첩 예시 `Any` 및 `All`:

```yaml
- Any:
      - All:
          - Key: eventSource
            Condition: StartsWith
            Value: 'dynamodb'
          - Any:
              - Key: eventName
                Condition: StartsWith
                Value: List
              - Key: eventName
                Condition: StartsWith
                Value: Describe
              - Key: eventName
                Condition: StartsWith
                Value: Get
      - All:
          - Key: eventSource
            Condition: StartsWith
            Value: 'ec2'
          - Any:
              - Key: eventName
                Condition: StartsWith
                Value: Describe
              - Key: eventName
                Condition: StartsWith
                Value: Get
```

## 키 지정자

키 지정자는 로그 이벤트 JSON에서 특정 키를 지정할 수 있게 해주는 YAML 키들의 그룹입니다. 키 지정자는 세 가지가 있습니다: `키`, `DeepKey`및 `KeyPath`.

키 지정자의 값으로 제공된 이벤트 속성이 존재하지 않으면 매치 표현식 평가는 중지되고 false를 반환합니다.

### `키`

`키` 을 사용하면 최상위 이벤트 속성에 접근할 수 있습니다. 예시:

```yaml
Key: username
```

### `DeepKey`

`DeepKey` 을 사용하면 중첩된 이벤트 속성에 접근할 수 있습니다. `DeepKey` 은 목록을 받습니다. 또한 `DeepKey` 을 사용하면 절대 인덱스를 알고 있을 때 배열의 요소에 접근할 수 있습니다.

다음을 사용하는 예시 `DeepKey`, 이는 깊은 필드 `foo.bar.baz`에 접근한 다음 배열 인덱스 2를 참조합니다:

```yaml
- DeepKey:
  - foo
  - bar
  - baz
  - 2
```

### `KeyPath`

`KeyPath` 을 사용하면 다음에 접근할 수 있습니다:

* 최상위 필드
* 다음을 사용하는 중첩 필드:

  * 하위 필드 인덱싱 (`.`)
  * 배열 인덱싱: 배열 전체에 대한 와일드카드에는 `[*]` 을, 특정 인덱스에는 `[x]` 를 사용합니다. [객체 배열 인덱싱에 대해 자세히 알아보려면 여기](/ko/detections/rules/inline-filters.md#indexing-an-array-of-objects).

  추가 JSON path 기능은 지원되지 않습니다.

예시:

```yaml
KeyPath: foo[*].bar
# 또는
KeyPath: foo.bar[2]
# 또는
KeyPath: foo.bar[2].baz
# 또는
KeyPath: foo.bar.baz
# 또는 
KeyPath: foo
```

## `조건`

선택할 수 있는 다양한 유형의 `조건` 값이 있으며, 여기에는 [스칼라](#scalar-matching-conditions), [리스트](#list-matching-conditions)및 [리스트 내포](#list-comprehension-conditions) 그룹화가 포함됩니다.

{% hint style="info" %}
특정 `조건` 값은 Panther Console의 Simple 디택션 빌더에서 보거나 편집할 수 없으며, Inline Filters에서도 사용할 수 없습니다. 전체 목록은 다음을 참조하세요 [Simple 디택션 빌더 제한 사항은 여기](/ko/detections/rules/simple-detection-builder.md#limitations-of-the-simple-detection-builder)및 [Inline Filters 제한 사항은 여기](/ko/detections/rules/inline-filters.md#limitations-of-yaml-inline-filters).
{% endhint %}

### 스칼라 매칭 조건

스칼라 매칭 조건은 `Value` 키와 함께 사용하세요( `Values`아님). 매치 표현식의 [키 지정자](#key-specifiers) 는 리스트 또는 단일 값을 참조할 수 있지만, `Value` 는 단일 값이어야 합니다.

다음에서는 사용할 수 없습니다 [인라인 필터](/ko/detections/rules/inline-filters.md#limitations-of-yaml-inline-filters) 또는 다음에서 보거나 편집할 수 없습니다 [Simple 디택션 빌더](/ko/detections/rules/simple-detection-builder.md#limitations-of-the-simple-detection-builder) 에서.

<table data-full-width="false"><thead><tr><th width="161.18359375">조건</th><th width="101.7265625">키의 값 유형</th><th width="320.6015625">설명</th><th width="197.12109375">적용 가능한 매치 표현식</th></tr></thead><tbody><tr><td><code>존재함</code></td><td>Any</td><td>지정된 키가 존재하는지 확인합니다<br><br>다음에서는 사용할 수 없습니다 <a href="/pages/826d24763bf187089b1b759da66af0b58b95c92a#limitations-of-yaml-inline-filters">인라인 필터</a> 또는 다음에서 보거나 편집할 수 없습니다 <a href="/pages/41dd034ed11bdfe1e47bfbcfc10c080b92f72d95#limitations-of-the-simple-detection-builder">Simple 디택션 빌더</a> 에서.</td><td>Existence, Enrichment</td></tr><tr><td><code>존재하지 않음</code></td><td>Any</td><td>지정된 키가 존재하지 않는지 확인합니다<br><br>다음에서는 사용할 수 없습니다 <a href="/pages/826d24763bf187089b1b759da66af0b58b95c92a#limitations-of-yaml-inline-filters">인라인 필터</a> 또는 다음에서 보거나 편집할 수 없습니다 <a href="/pages/41dd034ed11bdfe1e47bfbcfc10c080b92f72d95#limitations-of-the-simple-detection-builder">Simple 디택션 빌더</a> 에서.</td><td>Existence, Enrichment</td></tr><tr><td><code>IsNull</code></td><td>Any</td><td>키가 null인지 확인합니다. 예: <code>{"key": null}</code><br><br>다음에서는 사용할 수 없습니다 <a href="/pages/826d24763bf187089b1b759da66af0b58b95c92a#limitations-of-yaml-inline-filters">인라인 필터</a> 또는 다음에서 보거나 편집할 수 없습니다 <a href="/pages/41dd034ed11bdfe1e47bfbcfc10c080b92f72d95#limitations-of-the-simple-detection-builder">Simple 디택션 빌더</a> 에서.</td><td>Existence, Enrichment</td></tr><tr><td><code>IsNotNull</code></td><td>Any</td><td>키가 null이 아닌지 확인합니다. 예: <code>{"key": 1234}</code><br><br>다음에서는 사용할 수 없습니다 <a href="/pages/826d24763bf187089b1b759da66af0b58b95c92a#limitations-of-yaml-inline-filters">인라인 필터</a> 또는 다음에서 보거나 편집할 수 없습니다 <a href="/pages/41dd034ed11bdfe1e47bfbcfc10c080b92f72d95#limitations-of-the-simple-detection-builder">Simple 디택션 빌더</a> 에서.</td><td>Existence, Enrichment</td></tr><tr><td><code>IsNullOrEmpty</code></td><td>Any</td><td>키가 null이거나 비어 있지 않은 값을 가지는지 확인합니다. 빈 값에는 빈 리스트(<code>[]</code>), 빈 문자열(<code>""</code>), 그리고 숫자 <code>0</code></td><td>Existence, Enrichment</td></tr><tr><td><code>IsNotNullOrEmpty</code></td><td>Any</td><td>키가 null이 아니거나 비어 있지 않은 값을 가지는지 확인합니다. 빈 값에는 빈 리스트(<code>[]</code>), 빈 문자열(<code>""</code>), 그리고 숫자 <code>0</code>.</td><td>Existence, Enrichment</td></tr><tr><td><code>Equals</code></td><td>Any</td><td>키의 값이 지정된 값과 같은지 확인합니다</td><td>키/값, 멀티 키, Enrichment</td></tr><tr><td><code>DoesNotEqual</code></td><td>Any</td><td>키의 값이 지정된 값과 같지 않은지 확인합니다</td><td>키/값, 멀티 키, Enrichment</td></tr><tr><td><code>IEquals</code></td><td>문자열</td><td>키의 문자열 값이 지정된 문자열과 같은지 확인합니다. 대소문자를 구분하지 않습니다</td><td>키/값, 멀티 키, Enrichment</td></tr><tr><td><code>IDoesNotEqual</code></td><td>문자열</td><td>키의 문자열 값이 지정된 문자열과 같지 않은지 확인합니다. 대소문자를 구분하지 않습니다</td><td>키/값, 멀티 키, Enrichment</td></tr><tr><td><code>StartsWith</code></td><td>문자열</td><td>키의 문자열 값이 지정된 값으로 시작하는지 확인합니다. 키가 문자열이 아니면 false를 반환합니다</td><td>키/값, 멀티 키, Enrichment</td></tr><tr><td><code>IStartsWith</code></td><td>문자열</td><td>키의 문자열 값이 지정된 값으로 시작하는지 확인합니다. 대소문자를 구분하지 않습니다. 키가 문자열이 아니면 false를 반환합니다</td><td>키/값, 멀티 키, Enrichment</td></tr><tr><td><code>DoesNotStartWith</code></td><td>문자열</td><td>키의 문자열 값이 지정된 값으로 시작하지 않는지 확인합니다. 키가 문자열이 아니면 false를 반환합니다</td><td>키/값, 멀티 키, Enrichment</td></tr><tr><td><code>IDoesNotStartWith</code></td><td>문자열</td><td>키의 문자열 값이 지정된 값으로 시작하지 않는지 확인합니다. 대소문자를 구분하지 않습니다. 키가 문자열이 아니면 false를 반환합니다</td><td>키/값, 멀티 키, Enrichment</td></tr><tr><td><code>EndsWith</code></td><td>문자열</td><td>키의 문자열 값이 지정된 값으로 끝나는지 확인합니다. 키가 문자열이 아니면 false를 반환합니다</td><td>키/값, 멀티 키, Enrichment</td></tr><tr><td><code>IEndsWith</code></td><td>문자열</td><td>키의 문자열 값이 지정된 값으로 끝나는지 확인합니다. 대소문자를 구분하지 않습니다. 키가 문자열이 아니면 false를 반환합니다</td><td>키/값, 멀티 키, Enrichment</td></tr><tr><td><code>DoesNotEndWith</code></td><td>문자열</td><td>키의 문자열 값이 지정된 값으로 끝나지 않는지 확인합니다. 키가 문자열이 아니면 false를 반환합니다</td><td>키/값, 멀티 키, Enrichment</td></tr><tr><td><code>IDoesNotEndWith</code></td><td>문자열</td><td>키의 문자열 값이 지정된 값으로 끝나지 않는지 확인합니다. 대소문자를 구분하지 않습니다. 키가 문자열이 아니면 false를 반환합니다</td><td>키/값, 멀티 키, Enrichment</td></tr><tr><td><code>Contains</code></td><td>문자열 또는 리스트</td><td>키의 문자열 값에 지정된 값이 포함되어 있는지 확인합니다. 키가 문자열이 아니면 false를 반환합니다<br><br>또는<br><br>문자열 배열(대소문자 구분)/정수/부동소수점/불리언에 값이 포함되어 있는지 확인합니다</td><td>키/값, 멀티 키, Enrichment</td></tr><tr><td><code>IContains</code></td><td>문자열</td><td>키의 문자열 값에 지정된 값이 포함되어 있는지 확인합니다. 대소문자를 구분하지 않습니다. 키가 문자열이 아니면 false를 반환합니다</td><td>키/값, 멀티 키, Enrichment</td></tr><tr><td><code>DoesNotContain</code></td><td>문자열 또는 리스트</td><td>키의 문자열 값에 지정된 값이 포함되어 있지 않은지 확인합니다. 키가 문자열이 아니면 false를 반환합니다<br><br>또는<br><br>문자열 배열(대소문자 구분)/정수/부동소수점/불리언에 값이 포함되어 있지 않은지 확인합니다</td><td>키/값, 멀티 키, Enrichment</td></tr><tr><td><code>IDoesNotContain</code></td><td>문자열</td><td>키의 문자열 값에 지정된 값이 포함되어 있지 않은지 확인합니다. 대소문자를 구분하지 않습니다. 키가 문자열이 아니면 false를 반환합니다</td><td>키/값, 멀티 키, Enrichment</td></tr><tr><td><code>IsIPAddress</code></td><td>문자열 또는 정수</td><td>키의 문자열 또는 정수 값이 IP 주소로 해석될 수 있는지 확인합니다. 기능적으로 ANY(와 동일합니다<code>IsIPv4Address</code>, <code>IsIPv6Address</code>)<br><br>다음에서는 사용할 수 없습니다 <a href="/pages/826d24763bf187089b1b759da66af0b58b95c92a#limitations-of-yaml-inline-filters">인라인 필터</a> 또는 다음에서 보거나 편집할 수 없습니다 <a href="/pages/41dd034ed11bdfe1e47bfbcfc10c080b92f72d95#limitations-of-the-simple-detection-builder">Simple 디택션 빌더</a> 에서.</td><td>키 존재 매치, Enrichment</td></tr><tr><td><code>IsIPv4Address</code></td><td>문자열 또는 정수</td><td>키의 문자열 또는 정수 값이 IPv4 주소로 해석될 수 있는지 확인합니다<br><br>다음에서는 사용할 수 없습니다 <a href="/pages/826d24763bf187089b1b759da66af0b58b95c92a#limitations-of-yaml-inline-filters">인라인 필터</a> 또는 다음에서 보거나 편집할 수 없습니다 <a href="/pages/41dd034ed11bdfe1e47bfbcfc10c080b92f72d95#limitations-of-the-simple-detection-builder">Simple 디택션 빌더</a> 에서.</td><td>키 존재 매치, Enrichment</td></tr><tr><td><code>IsIPv6Address</code></td><td>문자열 또는 정수</td><td>키의 문자열 또는 정수 값이 IPv6 주소로 해석될 수 있는지 확인합니다<br><br>다음에서는 사용할 수 없습니다 <a href="/pages/826d24763bf187089b1b759da66af0b58b95c92a#limitations-of-yaml-inline-filters">인라인 필터</a> 또는 다음에서 보거나 편집할 수 없습니다 <a href="/pages/41dd034ed11bdfe1e47bfbcfc10c080b92f72d95#limitations-of-the-simple-detection-builder">Simple 디택션 빌더</a> 에서.</td><td>키 존재 매치, Enrichment</td></tr><tr><td><code>IsIPAddressPrivate</code></td><td>문자열 또는 정수</td><td>키의 문자열 또는 정수 값이 사설 IP 주소로 해석될 수 있는지 확인합니다</td><td>키 존재 매치, Enrichment</td></tr><tr><td><code>IsIPAddressPublic</code></td><td>문자열 또는 정수</td><td>키의 문자열 또는 정수 값이 공인 IP 주소로 해석될 수 있는지 확인합니다</td><td>키 존재 매치, Enrichment</td></tr><tr><td><code>IsIPAddressInCIDR</code></td><td>문자열 또는 정수</td><td>IP 주소로 렌더링된 키의 문자열 또는 정수 값이 CIDR 범위 내에 있는지 확인합니다</td><td>키/값, 멀티 키, Enrichment</td></tr><tr><td><code>IsIPAddressNotInCIDR</code></td><td>문자열 또는 정수</td><td>IP 주소로 렌더링된 키의 문자열 또는 정수 값이 CIDR 범위 내에 있지 않은지 확인합니다</td><td>키/값, 멀티 키, Enrichment</td></tr><tr><td><code>CIDRContainsIPAddresses</code></td><td>문자열 형태의 IP 목록</td><td>CIDR 범위로 렌더링된 키의 문자열 값이 지정된 IP 주소를 포함하는지 확인합니다</td><td>키/값, 멀티 키, Enrichment</td></tr><tr><td><code>CIDRDoesNotContainIPAddresses</code></td><td>문자열 형태의 IP 목록</td><td>IP 주소 목록으로 해석된 키의 값이 지정된 CIDR 범위 안에 있는지 확인합니다</td><td>키/값, 멀티 키, Enrichment</td></tr><tr><td><code>IsGreaterThan</code></td><td>정수 또는 부동소수점</td><td>키의 값이 지정된 값보다 큰지 확인합니다</td><td>키/값, 멀티 키, Enrichment</td></tr><tr><td><code>IsGreaterThanOrEquals</code></td><td>정수 또는 부동소수점</td><td>키의 값이 지정된 값보다 크거나 같은지 확인합니다</td><td>키/값, 멀티 키, Enrichment</td></tr><tr><td><code>IsLessThan</code></td><td>정수 또는 부동소수점</td><td>키의 값이 지정된 값보다 작은지 확인합니다</td><td>키/값, 멀티 키, Enrichment</td></tr><tr><td><code>IsLessThanOrEquals</code></td><td>정수 또는 부동소수점</td><td>키의 값이 지정된 값보다 작거나 같은지 확인합니다</td><td>키/값, 멀티 키, Enrichment</td></tr></tbody></table>

### 리스트 매칭 조건

리스트 매칭 조건은 `Values` 과 함께 사용하세요( `Value`아님). 매치 표현식의 [키 지정자](#key-specifiers) 는 단일 값 또는 리스트를 참조할 수 있지만, `Values` 는 리스트를 참조해야 합니다.

<table data-full-width="false"><thead><tr><th width="129">조건</th><th width="105">키 유형</th><th width="110">값 유형</th><th width="227">설명</th><th>적용 가능한 매치 표현식</th></tr></thead><tbody><tr><td><code>IsIn</code></td><td>스칼라</td><td>리스트</td><td>지정된 키의 값이 해당 리스트의 멤버인지 평가합니다</td><td>키/값들, Enrichment</td></tr><tr><td><code>IsNotIn</code></td><td>스칼라</td><td>리스트</td><td>지정된 키의 값이 해당 리스트의 멤버가 아닌지 평가합니다</td><td>키/값들, Enrichment</td></tr></tbody></table>

### 리스트 컴프리헨션 조건

리스트 컴프리헨션 조건은 [리스트 컴프리헨션 매치 표현식 내에서만 사용할 수 있습니다](#list-comprehension-match-expressions).

<table data-full-width="false"><thead><tr><th width="164.25000000000003">조건</th><th width="63">키 유형</th><th width="316">설명</th><th>적용 가능한 매치 표현식</th></tr></thead><tbody><tr><td><code>AnyElement</code></td><td>리스트</td><td>지정된 키의 값 목록이 매치 조건 목록의 어떤 표현식과라도 일치하는지 평가합니다<br><br>다음에서는 사용할 수 없습니다 <a href="/pages/826d24763bf187089b1b759da66af0b58b95c92a#limitations-of-yaml-inline-filters">인라인 필터</a> 또는 다음에서 보거나 편집할 수 없습니다 <a href="/pages/41dd034ed11bdfe1e47bfbcfc10c080b92f72d95#limitations-of-the-simple-detection-builder">Simple 디택션 빌더</a> 에서.</td><td>리스트 컴프리헨션</td></tr><tr><td><code>AllElements</code></td><td>리스트</td><td>지정된 키의 값 목록이 매치 조건 목록의 모든 표현식과 일치하는지 평가합니다<br><br>다음에서는 사용할 수 없습니다 <a href="/pages/826d24763bf187089b1b759da66af0b58b95c92a#limitations-of-yaml-inline-filters">인라인 필터</a> 또는 다음에서 보거나 편집할 수 없습니다 <a href="/pages/41dd034ed11bdfe1e47bfbcfc10c080b92f72d95#limitations-of-the-simple-detection-builder">Simple 디택션 빌더</a> 에서.</td><td>리스트 컴프리헨션</td></tr><tr><td><code>OnlyOneElement</code></td><td>리스트</td><td>지정된 키의 값 목록에 매치 조건 목록과 일치하는 단일 요소만 있는지 평가합니다<br><br>다음에서는 사용할 수 없습니다 <a href="/pages/826d24763bf187089b1b759da66af0b58b95c92a#limitations-of-yaml-inline-filters">인라인 필터</a> 또는 다음에서 보거나 편집할 수 없습니다 <a href="/pages/41dd034ed11bdfe1e47bfbcfc10c080b92f72d95#limitations-of-the-simple-detection-builder">Simple 디택션 빌더</a> 에서.</td><td>리스트 컴프리헨션</td></tr><tr><td><code>NoElement</code></td><td>리스트</td><td>지정된 키의 값 목록이 매치 조건 목록의 모든 표현식과 일치하지 않는지 평가합니다<br><br>다음에서는 사용할 수 없습니다 <a href="/pages/826d24763bf187089b1b759da66af0b58b95c92a#limitations-of-yaml-inline-filters">인라인 필터</a> 또는 다음에서 보거나 편집할 수 없습니다 <a href="/pages/41dd034ed11bdfe1e47bfbcfc10c080b92f72d95#limitations-of-the-simple-detection-builder">Simple 디택션 빌더</a> 에서.</td><td>리스트 컴프리헨션</td></tr></tbody></table>

## `값`

다음 `Value` 및 `Values` 키의 값은 다음 네 가지 데이터 유형 중 하나를 가질 수 있습니다:

* 정수
* 실수
* 불리언
* 문자열

정수, 실수, 그리고 불리언은 따옴표로 묶으면 안 됩니다. 문자열은 선택적으로 따옴표로 묶을 수 있습니다.

서로 다르게 형식 지정된 `Value` 값이 아래에서 어떻게 평가되는지 예를 보세요:

```yaml
디텍션:
  - Key: someKey
    Condition: Equals
    값: 2 # 이는 정수 2로 평가됩니다
  - Key: someKey
    Condition: Equals
    값: "2" # 이는 문자열 "2"로 평가됩니다
  - Key: someKey
    Condition: Equals
    값: 2.2 # 이는 실수 2.2로 평가됩니다
  - Key: someKey
    Condition: Equals
    값: "2.2" # 이는 문자열 "2.2"로 평가됩니다
  - Key: someKey
    Condition: Equals
    값: true # 이는 true 불리언 값으로 평가됩니다
  - Key: someKey
    Condition: Equals
    값: "true" # 이는 문자열 "true"로 평가됩니다
  - Key: someKey
    Condition: Equals
    값: some string thing # 이는 문자열 "some string thing"으로 평가됩니다
  - Key: someKey
    Condition: Equals
    값: "some string thing" # 이는 문자열 "some string thing"으로 평가됩니다
```


---

# 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.panther.com/ko/detections/rules/writing-simple-detections/match-expression.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.
