# 알러트 대상

## 개요

대상은 룰 및 정책에서 알러트를 수신하는 통합입니다.

기본적으로 알러트는 심각도에 따라 라우팅되며 여러 대상에 동시에 전송될 수 있습니다. 예를 들어, 하나의 알러트가 Jira 티켓을 만들고, PagerDuty 인시던트를 만들고, [Amazon Simple Notification Service (SNS)를 통해 이메일을 보낼 수 있습니다.](/ko/alerts/destinations/sns.md#optional-creating-email-notifications).

디택션의 Python 함수 또는 메타데이터에서 대상을 설정하여 룰별 또는 정책별로 대상을 재정의할 수 있습니다. 라우팅이 어떻게 결정되는지에 대한 자세한 설명은 다음을 참조하세요. [알러트 라우팅 시나리오](#alert-routing-scenarios) 에 대해 아래에서 자세히 알아보세요.

알러트에서 해당 알러트를 대상에 수동으로 라우팅하도록 선택할 수 있습니다. 알러트를 수동으로 라우팅하려는 각 대상에는 수동 알러트 라우팅이 활성화되어 있어야 합니다. 자세한 내용은 다음을 참조하세요. [수동 전송](#scenario-4-manual-alert-dispatch) 아래 시나리오.

{% hint style="info" %}
버전 1.42 이상부터 Panther는 알려진 고정 IP 주소에서 알러트를 보냅니다. 이를 통해 고객은 이 IP 주소에서 오는 알러트를 허용하도록 대상을 구성할 수 있습니다.\
\
주소는 다음과 같이 표시되며 `Gateway Public IP`Panther 콘솔에서 다음으로 이동하여 찾을 수 있습니다. **Settings > General** 그런 다음 페이지 맨 아래로 스크롤합니다.
{% endhint %}

## 대상을 구성하는 방법

아래 페이지를 따라 특정 알러트 대상을 설정하는 방법을 알아보세요.

### 지원되는 대상

Panther는 다음 대상에 대한 통합을 지원합니다:

* [Amazon SNS](/ko/alerts/destinations/sns.md)
* [Amazon SQS](/ko/alerts/destinations/sqs.md)
* [Asana](/ko/alerts/destinations/asana.md)
* [Blink Ops](/ko/alerts/destinations/blink-ops.md)
* [Discord](/ko/alerts/destinations/discord.md)
* [Expel](/ko/alerts/destinations/expel.md)
* [GitHub](https://docs.panther.com/destinations/github)
* [Google Pub/Sub](/ko/alerts/destinations/pubsub.md)
* [Incident.io](/ko/alerts/destinations/incident.io.md)
* [Jira Cloud](/ko/alerts/destinations/jira.md)
* [Jira Data Center](/ko/alerts/destinations/jira-data-center.md)
* [Microsoft Teams](https://docs.panther.com/destinations/microsoft-teams)
* [Mindflow](/ko/alerts/destinations/mindflow.md)
* [OpsGenie](https://docs.panther.com/destinations/opsgenie)
* [PagerDuty](https://docs.panther.com/destinations/pagerduty)
* [Rapid7](/ko/alerts/destinations/rapid7.md)
* [ServiceNow (via Custom Webhook)](/ko/alerts/destinations/servicenow.md#overview)
* [Slack (Webhook)](/ko/alerts/destinations/slack.md)
* [Slack Bot](/ko/alerts/destinations/slack-bot.md)
* [Splunk](/ko/alerts/destinations/splunk.md)
* [Tines](/ko/alerts/destinations/tines.md)
* [Torq](/ko/alerts/destinations/torq.md)

### 기본적으로 지원되지 않는 대상을 설정하기

Panther에서 기본적으로 지원하지 않는 대상에서 알러트를 받고 싶다면 Custom Webhook 또는 API 워크플로를 사용하는 것을 고려하세요.

#### Panther의 Custom Webhook

Panther의 [Custom Webhook](/ko/alerts/destinations/custom_webhook.md) 대상을 사용하여 Tines, TheHive 또는 SOCless와 같은 추가 서드파티(API 포함)에 연결하세요.

#### Panther API

연결하려는 대상에 공개 API가 없는 경우(예: 내부 애플리케이션), [Panther API](/ko/panther/api.md) 을(를) 일정에 따라 폴링하여 알러트를 받을 수 있습니다. 알러트를 보고 조작하기 위한 사용 가능한 API 작업은 다음에서 확인하세요. [알러트](/ko/panther/api/rest/alerts.md) (REST) 및 [알러트 및 오류](/ko/panther/api/graphql/alerts-and-errors.md) (GraphQL).

하지만 알러트는 Panther에서 매번 `n` 분 또는 시간마다 가져오기 때문에—Custom Webhook 및 지원되는 통합처럼 생성되자마자 대상에 전송되는 것이 아니라—이 방법은 지연을 유발할 수 있습니다.

### 대상 수정 또는 삭제

1. Panther Console에 로그인합니다.
2. 왼쪽 사이드바 메뉴에서 **Configure > 알러트 대상**.
3. 대상의 오른쪽에 있는 점 세 개 아이콘을 클릭합니다.

   * 나타나는 드롭다운 메뉴에서 **삭제** 대상을 삭제하려면
   * 다음을 클릭합니다. **편집** 표시 이름, 심각도 수준 및 기타 구성을 수정하려면

   <figure><img src="/files/f5341028109b99d3a2e21885b20b9b43ba2a54ef" alt=""><figcaption></figcaption></figure>

## 알러트 라우팅 시나리오

알러트가 라우팅되는 대상(들)은, 있으면 디택션의 대상 구성 또는 대상 자체의 구성에 따라 달라집니다.

{% hint style="info" %}
특정 대상이 하나의 특정 디택션에서만 알러트를 받도록 하려면, 심각도 수준이나 로그 유형이 없는 대상을 만든 다음 디택션을 해당 대상으로 지정하도록 구성할 수 있습니다( [`destinations()`](#scenario-1-dynamically-defined-destination-s-on-the-detection), [`OutputIds`](#scenario-2-statically-defined-destination-s-on-the-detection), 또는 [Destination Overrides field](#scenario-2-statically-defined-destination-s-on-the-detection)). 자세한 내용은 Panther의 KB 문서를 참조하세요: [단일 Panther 알러트를 특정 알러트 대상으로 라우팅하려면 어떻게 하나요?](https://help.panther.com/Alerts_and_Destinations/Routing/How_do_I_route_a_single_Panther_alert_to_a_specific_alert_destination%3F)
{% endhint %}

라우팅 시나리오는 아래에 우선순위가 높은 순에서 낮은 순으로 설명되어 있습니다. 하나의 시나리오가 충족되면 알러트 라우팅이 중지됩니다(즉, 이후 시나리오는 호출되지 않습니다).

### 시나리오 1: 디택션에서 동적으로 정의된 대상(들)

Python 디택션은 [`destinations()` 함수](/ko/detections/rules/python.md#destinations) 어떤 대상(들)이 알러트를 받아야 하는지 결정하는 함수를 정의할 수 있습니다. 이렇게 정의된 대상은 다른 모든 구성보다 우선합니다.

만약 `destinations()` 디택션의 Python 본문에 정의된 함수가 없거나 *있거나* 하나의 `destinations()` 함수가 정의되어 있지만 반환값이 `없음`없으면, Panther는 다음으로 [시나리오 2](#scenario-2-statically-defined-destination-s-on-the-detection)아래에서 알러트 대상을 찾습니다.

에서 반환된 목록이 `destinations()` 비어 있으면 (`[]`), 알러트는 어떤 대상으로도 라우팅되지 않습니다.

<figure><img src="/files/8789a7cb6c664392d57360b3c024e884aa52008a" alt="Under a &#x22;Detect&#x22; header, rule() and destinations() functions are shown." width="563"><figcaption></figcaption></figure>

### 시나리오 2: 디택션에서 정적으로 정의된 대상(들)

Panther는 다음 경우 이 시나리오로 넘어갑니다. [시나리오 1](#scenario-1-dynamically-defined-destination-s-on-the-detection) 이 충족되지 않으면.

정적 대상 재정의는 디택션의 YAML 파일 또는 Console에서 정의할 수 있습니다:

* CLI 워크플로에서는 디택션의 YAML 파일에서 다음을 설정하여 대상을 정적으로 정의할 수 있습니다: `OutputIds` 필드.
  * 에 대해 자세히 알아보세요 `OutputIds` 룰 사양 참조에서 [Python 디택션은 여기에서](/ko/detections/rules/python.md#python-rule-specification-reference)와 [YAML 디택션은 여기에서](/ko/detections/rules/writing-simple-detections.md#yaml-rule-specification-reference).
* Console에서는 대상이 디택션의 **룰 설정**, 다음을 사용하여 **대상 재정의** 필드.

<figure><img src="/files/6b74922c98d83e2e84b68248448b0faac346f494" alt="" width="563"><figcaption></figcaption></figure>

"Overrides"는 대상 정의의 이 방법이 다음보다 우선한다는 뜻입니다 [시나리오 3](#scenario-3-destination-configuration), 아래의 것보다.

### 시나리오 3: 대상 구성

대상이 디텍션에 정의되어 있지 않은 경우(에서 설명한 대로 [시나리오 1](#scenario-1-dynamically-defined-destination-s-on-the-detection) 및 [2](#scenario-2-statically-defined-destination-s-on-the-detection)), 대상 자체의 구성이 호출됩니다. 알러트를 특정 대상으로 라우팅하려면 다음 조건이 충족되어야 합니다:

* 해당 **심각도 수준** 대상에 구성된 값에는 알러트의 심각도 수준이 포함되어야 합니다.
  * 알러트의 심각도는 디텍션의 `심각도` 키 내에 정적으로 정의되거나, 디텍션의 [`severity()` 함수](https://docs.panther.com/writing-detections#severity) (Python 디텍션의 경우) 또는 [`DynamicSeverities`](/ko/detections/rules/writing-simple-detections.md#dynamicseverities) 값(YAML 디텍션의 경우)으로 동적으로 정의된다는 점에 유의하세요.
* 해당 **알러트 유형** 대상에 구성된 값에는 알러트의 유형이 포함되어야 합니다.
* 대상이 특정 **로그 유형**의 알러트만 수락하도록 구성된 경우, 해당 목록에는 알러트와 연결된 로그 유형이 포함되어야 합니다.

{% hint style="warning" %}
해당 **로그 유형** 알러트 대상의 필터는 룰(또는 "실시간 룰")과 상관관계 룰에만 적용됩니다.**.** 로그 유형별 필터링은 예약된 룰, 정책 또는 시스템 오류에서는 사용할 수 없습니다.
{% endhint %}

<figure><img src="/files/70ad53dad08e1e8e2db191d52246532012adee54" alt=""><figcaption></figcaption></figure>

### 시나리오 4: 수동 알러트 전송

알러트를 대상으로 수동 전송하려는 데에는 여러 가지 이유가 있을 수 있습니다. 때때로 의도한 모든 대상으로 자동 전달되지 않은 알러트를 받는 경우가 있습니다. 이는 구성 오류일 수도 있고, 알러트가 일회성 특수 사례일 수도 있으며, 대상을 테스트하기 위한 것일 수도 있습니다.

알러트를 대상으로 수동 전송할 수 있도록 하려면:

1. 다음으로 이동 **구성** > **알러트 대상**.
2. 수동 전송을 활성화하려는 대상을 클릭합니다.
3. 다음을 활성화 **수동 전송 허용** 토글.

<figure><img src="/files/1c4afad99bc5c1eb4c385b992ea577a6d1d66bac" alt=""><figcaption></figcaption></figure>

4. 팝업에서 다음을 클릭합니다 **활성화**.

<figure><img src="/files/dfec381afb78b07932a1d11f2f03111561a81db9" alt=""><figcaption></figcaption></figure>

5. 하단에서 다음을 클릭합니다 **대상 업데이트**.

이제 이 대상으로 알러트를 수동 전송할 수 있습니다. 사용 방법은 다음을 참조하세요 [수동 전송 알러트](/ko/alerts.md#manual-alert-dispatch) 알러트 전송 사용 방법에 대한 정보는.

## 대상 예시

다음 예시는 사용자가 Okta에 여러 번 로그인에 실패한 경우를 기반으로 알러트를 대상으로 받는 방법을 보여줍니다.

다음을 구성했습니다:

* 대상:
  * [Slack](/ko/alerts/destinations/slack.md), 룰 일치에 대한 알러트를 받도록 구성됨.
  * Tines( [Custom Webhook](/ko/alerts/destinations/custom_webhook.md)를 통해 설정), 룰 일치에 대한 알러트를 받도록 구성됨.
* 로그 소스:
  * 귀하의 Panther 인스턴스는 [Okta](/ko/data-onboarding/supported-logs/okta.md) 로그를 수집하고 있습니다.
* 디택션:
  * 사용자가 너무 많은 로그인 실패 시도로 인해 Okta에서 잠길 때 알러트하도록 “Okta User Locked Out”이라는 룰을 만들었습니다:

    ```python
    from panther_base_helpers import deep_get
    def 룰(event):
        return deep_get(event, 'outcome', 'reason') == 'LOCKED OUT'

    def title(event):
        return f"{deep_get(event, 'actor', 'alternateId')} is 잠겼습니다."

    def destinations(event):
        if deep_get(event, 'actor', 'alternateId') == "username@example.com":
            return ['dev-알러트-destinations', 'tines-okta-user-lock-out']
        return ['dev-general'] 

    def 알러트_context(event):
        return {
            "actor": deep_get(event, "actor", "displayName"),
            "id": deep_get(event, "actor", "id")
        }
    ```
  * 해당 `알러트_context()` 사용자 이름과 사용자의 Okta ID 값을 포함합니다.

#### 1. 이벤트가 발생합니다

사용자 중 한 명이 Okta에 여러 번 로그인하려고 했지만 실패합니다. 결국 해당 계정이 잠깁니다.

#### 2. Panther가 로그를 수집하고 구성한 룰과 일치하는 이벤트를 감지합니다

Okta 감사 로그가 Panther 인스턴스를 통해 스트리밍되는 동안, “Okta User Locked Out” 룰이 사용자가 잠겼음을 감지합니다.\
![An alert in the Panther Console shows that a user is locked out. The triggered rule is called "Okta User Locked Out."](/files/d79c22c0b7f8132639a32762fa3a855093ac7579)

#### 3. 룰 일치가 알러트를 트리거합니다

감지된 룰 일치는 Slack 대상과 Tines 대상에 알러트를 트리거합니다.

이벤트가 발생한 지 몇 분 이내에, 구성한 대상인 Slack 채널에 알러트가 표시됩니다:

<div align="left"><figure><img src="/files/2ebe42c1d7cc08e3245950a87e654c9e1ce1ddd6" alt="A Slack app posts a Panther alert that says a user is locked out. The alert includes a link to the Panther UI, a Runbook that recommends verifying IPs, a Severity of Low, and Alert Context that includes the &#x22;actor&#x22; and &#x22;id&#x22; parameters." width="380"><figcaption></figcaption></figure></div>

알러트는 또한 다음을 통해 Tines으로 전송됩니다: [Custom Webhook](/ko/alerts/destinations/custom_webhook.md) 대상으로 구성한 것입니다. Tines는 다음의 값들을 수신합니다: `알러트_context()` 함수이며, 사용자의 Okta 계정을 자동으로 잠금 해제한 다음 Slack에 확인 메시지를 보내도록 설정되어 있습니다.

<div align="left"><figure><img src="/files/e94e0b2a65b4fa906430458075068bf1afa41044" alt="The automated process in Tines shows the sequence of events: Receive Alert from Panther, Wait 10 minutes, Unlock Okta user by ID via HTTP Request, Send Unlock message to Slack via HTTP Request." width="411"><figcaption></figcaption></figure></div>

## 대상 스키마

### 워크플로 자동화

알러트 페이로드는 일반적으로 다음 형식을 따릅니다. 사용자 지정 웹훅, SNS, SQS 또는 기타 워크플로 자동화 중심 대상의 경우, 이는 알러트를 어떻게 처리할지 정의하는 데 중요합니다.

Jira 또는 Slack과 같은 기본 통합의 경우, 이는 대상이 이해할 수 있는 형식으로 자동으로 처리됩니다.

```typescript
{
   "id": string,
   "createdAt": AWSDateTime,
   "severity": string,
   "type": string,
   "link": string,
   "title": string,
   "name": string,
   "alertId": 문자열,
   "description": 문자열,
   "runbook": 문자열,
   "tags": [문자열],
   "version": 문자열
}
```

해당 [AWSDateTime](https://docs.aws.amazon.com/appsync/latest/devguide/scalars.html) 스칼라 타입은 유효한 확장 ISO 8601 DateTime 문자열을 나타냅니다. 다음 형식의 datetime 문자열을 허용합니다 `YYYY-MM-DDThh:mm:ss.sssZ`. 초 필드 뒤의 필드는 나노초 필드입니다. 1자리에서 9자리까지 허용합니다. 초 및 나노초 필드는 선택 사항입니다. 이 스칼라에서는 시간대 오프셋이 필수입니다. 시간대 오프셋은 다음 중 하나여야 합니다 `Z` (UTC 시간대를 나타내는) 또는 다음 형식이어야 합니다 `±hh:mm:ss`시간대 오프셋의 초 필드는 ISO 8601 표준의 일부가 아니더라도 유효한 것으로 간주됩니다.

### 예시 JSON 페이로드:

```javascript
{
  "id": "AllLogs.IPMonitoring",
  "createdAt": "2020-10-13T03:35:24Z",
  "severity": "INFO",
  "type": "룰",
  "link": "https://runpanther.io/알러트s/b90c19e66e160e194a5b3b94ec27fb7c",
  "title": "새 알러트: [123.123.123.123]에서 의심스러운 트래픽이 감지되었습니다", 
  "name": "의심스러운 IP 모니터링",
  "알러트Id": "b90c19e66e160e194a5b3b94ec27fb7c",
  "description": "이 룰은 IP 주소 허용 목록 밖의 모든 활동에 대해 알러트합니다",
  "runbook": "",
  "tags": [
    "네트워크 모니터링",
    "위협 인텔"
  ],
  "version": "CJm9PiaXV0q8U0JhoFmE6L21ou7e5Ek0"
}
```

## 알러트 대상 문제 해결

Panther Knowledge Base를 방문하여 [알러트 대상에 대한 문서 보기](https://help.panther.com/collections/6996653098-destinations) 자주 묻는 질문에 대한 답변과 일반적인 오류 및 문제 해결 방법을 찾아보세요.


---

# 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/alerts/destinations.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.
