# 알러트 대상

## 개요

대상은 룰 및 정책으로부터 알러트를 받는 통합입니다.

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

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

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

{% hint style="info" %}
버전 1.42 이상부터 Panther는 알려진 고정 IP 주소에서 알러트를 전송합니다. 이를 통해 고객은 이 IP 주소로부터의 알러트를 수락하도록 대상을 구성할 수 있습니다.\
\
주소는 Panther 콘솔에서 `게이트웨이 공용 IP`로 표시되어 있으며, **설정 > 일반** 으로 이동한 다음 페이지 하단으로 스크롤하면 확인할 수 있습니다.
{% endhint %}

## 대상 구성 방법

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

### 지원되는 대상

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

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

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

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

#### Panther의 Custom Webhook

Panther의 [Custom Webhook](https://docs.panther.com/ko/alerts/destinations/custom_webhook) 대상을 사용하여 Tines, TheHive 또는 SOCless와 같은 타사(API 제공)를 연결할 수 있습니다.

#### Panther API

도달하려는 대상에 공개 API가 없는 경우(예: 내부 애플리케이션) 예약에 따라 [Panther API](https://docs.panther.com/ko/panther/api) 에서 알러트를 폴링하여 알러트를 수신할 수 있습니다. 알러트를 보고 조작하기 위한 사용 가능한 API 작업은 [Alerts](https://docs.panther.com/ko/panther/api/rest/alerts) (REST) 및 [Alerts & Errors](https://docs.panther.com/ko/panther/api/graphql/alerts-and-errors) (GraphQL)에서 확인하세요.

그러나 이 방법은 알러트를 Panther에서 `n` 분 또는 시간 단위로 가져오기 때문에, Custom Webhook 및 지원되는 통합과 같이 알러트가 생성되는 즉시 대상으로 전송되는 방식이 아니라 지연이 발생할 수 있습니다.

### 대상 수정 또는 삭제

1. Panther 콘솔에 로그인하세요.
2. 왼쪽 사이드바 메뉴에서 **구성 > 알러트 대상**.
3. 대상의 오른쪽에 있는 줄임표(… ) 아이콘을 클릭하세요.

   * 표시되는 드롭다운 메뉴에서 **삭제** 를 클릭하여 대상을 삭제하세요.
   * 를 클릭하세요 **편집** 을 클릭하여 표시 이름, 심각도 수준 및 기타 구성을 수정하세요.

   <figure><img src="https://2400888838-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LgdiSWdyJcXPahGi9Rs-2910905616%2Fuploads%2FOlCNy06Z6yqa615JnB4w%2Fimage.png?alt=media&#x26;token=d8ee1eeb-5f6f-4a68-b0de-827e3597529a" 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), 또는 [대상 재정의 필드](#scenario-2-statically-defined-destination-s-on-the-detection)). 자세한 내용은 Panther의 지식 기반 문서를 참조하세요: [단일 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()` 함수](https://docs.panther.com/ko/detections/rules/python#destinations) 를 정의하여 어떤 대상이 알러트를 받아야 하는지를 결정할 수 있습니다. 이 방식으로 정의된 대상은 다른 모든 구성보다 우선합니다.

감지기의 Python 본문에 `destinations()` 함수가 정의되어 있지 않거나, *함수가* 정의되어 있지만 `destinations()` None `을 반환하는 경우, Panther는`아래의 시나리오 2 [로 넘어가 대상(들을) 찾습니다.](#scenario-2-statically-defined-destination-s-on-the-detection)함수에서 반환된 목록이 비어 있으면 (

) 알러트는 어떤 대상으로도 라우팅되지 않습니다. `destinations()` 시나리오 2: 감지기에서 정적으로 정의된 대상`[]`시나리오 1이 충족되지 않는 경우 Panther는 이 시나리오로 넘어갑니다.

<figure><img src="https://2400888838-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LgdiSWdyJcXPahGi9Rs-2910905616%2Fuploads%2Fgit-blob-9818ad318f835154d9984f3744d4197f7e2bdd75%2FScreenshot%202025-09-08%20at%205.21.34%E2%80%AFPM.png?alt=media" alt="Under a &#x22;Detect&#x22; header, rule() and destinations() functions are shown." width="563"><figcaption></figcaption></figure>

### 정적 대상 재정의는 감지기의 YAML 파일 내에서 또는 콘솔에서 정의할 수 있습니다:

CLI 워크플로에서는 감지기의 YAML 파일에서 [필드를 설정하여 대상을 정적으로 정의할 수 있습니다.](#scenario-1-dynamically-defined-destination-s-on-the-detection) 에 대해 더 알아보려면

규칙 명세 참조에서

* Python 감지기에 대한 항목은 여기 `OutputIds` 에서, 그리고
  * YAML 감지기에 대한 항목은 여기 `OutputIds` 에서 확인하세요. [콘솔에서는 대상이 감지기의](https://docs.panther.com/ko/detections/rules/python#python-rule-specification-reference)룰 설정 [내에서](https://docs.panther.com/ko/detections/rules/writing-simple-detections#yaml-rule-specification-reference).
* 대상 재정의 **를 사용하여 정의됩니다.**"재정의(Overrides)"는 이 방법으로 정의된 대상이 **아래의 시나리오 3** 에서, 그리고

<figure><img src="https://2400888838-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LgdiSWdyJcXPahGi9Rs-2910905616%2Fuploads%2Fgit-blob-58e075d8c2558b3e3ad20bc73318f9eefdc91411%2FScreenshot%202023-02-27%20at%205.20.07%20PM.png?alt=media" alt="" width="563"><figcaption></figcaption></figure>

보다 우선한다는 의미입니다. [시나리오 3: 대상 구성](#scenario-3-destination-configuration)감지기에 대상이 정의되어 있지 않은 경우(

### 시나리오 1

및 [시나리오 2](#scenario-1-dynamically-defined-destination-s-on-the-detection) 에서 설명된 바와 같이), 대상 자체의 구성이 호출됩니다. 특정 대상으로 알러트가 라우팅되려면 다음 조건들이 충족되어야 합니다: [2](#scenario-2-statically-defined-destination-s-on-the-detection)대상에 구성된

* 심각도 수준 **에는 알러트의 심각도 수준이 포함되어야 합니다.** 알러트의 심각도는 감지기의
  * Severity `키 내에 정적으로 정의되어 있거나, 감지기의` severity() [`(Python 감지기의 경우) 또는` 함수](https://docs.panther.com/writing-detections#severity) DynamicSeverities [`값( YAML 감지기의 경우)으로 동적으로 정의될 수 있습니다.`](https://docs.panther.com/ko/detections/rules/writing-simple-detections#dynamicseverities) 대상에 구성된
* 심각도 수준 **알러트 유형** 에는 알러트의 유형이 포함되어야 합니다.
* 대상이 특정 **로그 유형**에서만 알러트를 수락하도록 구성된 경우, 그 목록에는 알러트와 연관된 로그 유형이 포함되어야 합니다.

{% hint style="warning" %}
심각도 수준 **로그 유형** 알러트 대상에 대한 필터는 룰(또는 "실시간 룰") 및 상관 룰에만 적용됩니&#xB2E4;**.** 로그 유형으로 필터링하는 기능은 예약된 룰, 정책 또는 시스템 오류에는 적용되지 않습니다.
{% endhint %}

<figure><img src="https://2400888838-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LgdiSWdyJcXPahGi9Rs-2910905616%2Fuploads%2Fgit-blob-124b383c79c13e782f41806d46ac81494be8a0e2%2FScreenshot%202023-02-28%20at%203.23.25%20PM.png?alt=media" alt=""><figcaption></figcaption></figure>

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

수동으로 알러트를 대상에 전송해야 하는 여러 이유가 있을 수 있습니다. 때로는 의도한 모든 대상으로 자동으로 전달되지 않은 알러트를 받게 될 수 있습니다. 이는 잘못된 구성, 일회성 특수 사례이거나 대상을 테스트하려는 경우일 수 있습니다.&#x20;

알러트를 수동으로 대상에 전송하도록 허용하려면:

1. 로 이동하세요 **구성** > **알러트 대상**.
2. 수동 전송을 활성화하려는 대상을 클릭하세요.
3. 다음을 활성화하세요: **수동 전송 허용** 토글(스위치).&#x20;

<figure><img src="https://2400888838-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LgdiSWdyJcXPahGi9Rs-2910905616%2Fuploads%2FkhB9k1Ueqys0CMq9reAc%2Fimage.png?alt=media&#x26;token=61a37c18-96ed-4ce7-8316-719ee60d125c" alt=""><figcaption></figcaption></figure>

4. 팝업에서 **활성화**.

<figure><img src="https://2400888838-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LgdiSWdyJcXPahGi9Rs-2910905616%2Fuploads%2FF330X1jEZtAuAeOUm1mN%2Fimage.png?alt=media&#x26;token=37defd7c-0e4e-484f-bfa5-2e639460cd72" alt=""><figcaption></figcaption></figure>

5. 를 클릭하세요 **하단에서**.

대상 업데이트 [를 클릭하세요.](https://docs.panther.com/ko/alerts/..#manual-alert-dispatch) 이제 이 대상으로 알러트를 수동으로 전송할 수 있습니다. Dispatch Alert 사용 방법에 대한 정보는

## 수동 전송 알러트

를 참조하세요.

대상 예시

* 다음 예시는 사용자가 Okta에 여러 번 로그인 실패를 시도하여 잠긴 경우 사용자를 기반으로 알러트를 대상에 수신하는 방법을 설명합니다.
  * [다음과 같이 구성했습니다:](https://docs.panther.com/ko/alerts/destinations/slack)대상:
  * 규칙 매치에 대해 알러트를 받도록 구성된 Slack [Custom Webhook](https://docs.panther.com/ko/alerts/destinations/custom_webhook)Tines(으로 설정됨
* )은 규칙 매치에 대해 알러트를 받도록 구성되어 있습니다.
  * 로그 소스: [귀하의 Panther 인스턴스는](https://docs.panther.com/ko/data-onboarding/supported-logs/okta) Okta
* 로그를 수집하고 있습니다.
  * 감지기:

    ```python
    사용자가 로그인 실패를 여러 번 시도하여 Okta에서 계정이 잠긴 경우 알러트를 보내도록 “Okta User Locked Out”라는 룰을 생성했습니다:
    from panther_base_helpers import deep_get
        def rule(event):

    return deep_get(event, 'outcome', 'reason') == 'LOCKED OUT'
        def title(event):

    return f"{deep_get(event, 'actor', 'alternateId')} is locked out."
        def destinations(event):
            if deep_get(event, 'actor', 'alternateId') == "username@example.com":
        return ['dev-alert-destinations', 'tines-okta-user-lock-out'] 

    return ['dev-general']
        def alert_context(event):
            return {
            "actor": deep_get(event, "actor", "displayName"),
        }
    ```
  * 심각도 수준 `"id": deep_get(event, "actor", "id")` alert\_context()

#### 에는 사용자 이름과 사용자의 Okta ID 값이 포함되어 있습니다.

1\. 이벤트 발생

#### 사용자 중 한 명이 Okta에 여러 번 로그인 시도를 실패합니다. 결국 해당 계정이 잠깁니다.

2\. Panther가 로그를 수집하고 구성한 룰과 일치하는 이벤트를 감지합니다\
![An alert in the Panther Console shows that a user is locked out. The triggered rule is called "Okta User Locked Out."](https://2400888838-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LgdiSWdyJcXPahGi9Rs-2910905616%2Fuploads%2Fgit-blob-de35c7892fdd01b6e44dc9539095e12b72a7ddbe%2FScreen%20Shot%202022-08-02%20at%206.11.00%20PM.png?alt=media)

#### Okta 감사 로그가 Panther 인스턴스로 스트리밍되는 동안 “Okta User Locked Out” 룰이 사용자가 잠긴 것을 감지합니다.

3\. 룰 매치가 알러트를 트리거합니다

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

<div align="left"><figure><img src="https://2400888838-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LgdiSWdyJcXPahGi9Rs-2910905616%2Fuploads%2Fgit-blob-745da59864e39486b0cc5d5a9bcabd48824f2931%2Fdestination-example.png?alt=media" 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>

이벤트가 발생한 지 몇 분 내에 알러트가 대상으로 구성한 Slack 채널에 나타납니다: [Custom Webhook](https://docs.panther.com/ko/alerts/destinations/custom_webhook) 알러트는 또한 당신이 대상으로 구성한 `"id": deep_get(event, "actor", "id")` 를 통해 Tines로 전송됩니다. Tines는

<div align="left"><figure><img src="https://2400888838-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LgdiSWdyJcXPahGi9Rs-2910905616%2Fuploads%2Fgit-blob-52c0679845f08c34a5b8364897570839edd01270%2Ftines-example.png?alt=media" 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>

## 함수에서 값을 수신하며, 자동으로 사용자의 Okta 계정을 잠금 해제한 다음 Slack에 확인 메시지를 보내도록 설정되어 있습니다.

### 대상 스키마

워크플로 자동화

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

```typescript
{
   Jira 또는 Slack과 같은 네이티브 통합의 경우 이는 대상이 이해할 수 있는 형태로 자동으로 처리됩니다.
   "id": 문자열,
   "createdAt": AWSDateTime,
   "severity": 문자열,
   "type": 문자열,
   "link": 문자열,    ",
   "name": 문자열,
   "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": "RULE",
  "link": "https://runpanther.io/alerts/b90c19e66e160e194a5b3b94ec27fb7c",
  "title": "새 알러트: [123.123.123.123]에서 의심스러운 트래픽 감지",
  "name": "의심스러운 IP 모니터링",
  "alertId": "b90c19e66e160e194a5b3b94ec27fb7c",
  "description": "이 룰은 IP 주소 화이트리스트 밖의 모든 활동에 대해 알림을 보냅니다",
  "runbook": "",
  "tags": [
    "네트워크 모니터링",
    "위협 인텔",
  ],
  "version": "CJm9PiaXV0q8U0JhoFmE6L21ou7e5Ek0"
}
```

## 알러트 전송 대상 문제 해결

Panther 지식 베이스를 방문하여 [알러트 전송 대상에 관한 문서를 확인하세요](https://help.panther.com/collections/6996653098-destinations) 자주 묻는 질문에 대한 답변과 일반적인 오류 및 문제 해결에 도움이 되는 자료입니다.
