# EventBridge

## 개요

[Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html) 는 이벤트를 수신, 필터링, 변환, 라우팅 및 전달할 수 있게 해주는 서버리스 이벤트 버스입니다. 환경 내에서 AWS 서비스, 맞춤형 애플리케이션, SaaS 애플리케이션 및 마이크로서비스로부터 데이터를 수신하는 것을 지원하므로 이미 EventBridge를 사용하고 있을 수 있습니다.

{% hint style="warning" %}
만약 귀하가 [Cloud Connected](https://docs.panther.com/ko/system-configuration/panther-deployment-types/cloud-connected) 고객은 Panther 배포가 위치한 AWS 계정과 별도의 AWS 계정에 모든 로그 소스 인프라를 생성하십시오.
{% endhint %}

### 지원되는 대상

EventBridge는 많은 [대상](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-targets.html) 을(를) Panther가 연결할 수 있으며 여기에는 SNS 주제, SQS 대기열, Firehose 전달 스트림, S3 버킷 등이 포함됩니다. 이는 다양한 워크플로우를 가능하게 합니다. 예를 들면:

* Okta -> EventBridge -> AWS SNS 주제 -> Panther SQS
  * 기본적으로 EventBridge는 로그를 `detail` 객체 내에 중첩합니다. Panther의 네이티브 Okta 스키마를 활용하려면 EventBridge 변환을 사용해야 합니다. 자세한 내용은 [AWS의 문서](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-transform-target-input.html) 에서 변환을 생성하는 방법을 참조하세요.
* 맞춤형 애플리케이션 -> EventBridge -> Firehose 전달 스트림 -> S3 -> Panther
* AWS GuardDuty -> EventBridge -> AWS SNS 주제 -> Panther SQS
  * 다음 예제를 참조하여 [EventBridge를 통해 GuardDuty 발견 결과를 Panther로 전송하는 방법](#end-to-end-example-send-guardduty-findings-to-panther-via-eventbridge).

## EventBridge를 Panther와 함께 사용하는 방법

일반적으로 적용 가능한 워크플로우에 대한 단계는 아래를 참조하세요.

GuardDuty 발견 결과를 EventBridge를 사용해 Panther로 전송하는 구체적인 예는 [아래 섹션을 참조하세요](#end-to-end-example-send-guardduty-findings-to-panther-via-eventbridge).

### 1단계: Amazon SNS에서 주제 생성

1. AWS 콘솔에 로그인하고 다음으로 이동하세요: **Amazon SNS > 주제(Topics)**&#x70;anther-secret **주제 생성**.
   * 이미 SNS 주제가 생성되어 있으면 2단계로 건너뛰세요.
2. 세부 정보를 작성하세요:
   * **유형**: `표준`.
   * **이름**: `panther-eventbridge-guard-duty`
3. 를 선택하고 Panther가 설치된 계정 ID를 입력하십시오. **주제 생성**.
4. ARN 값을 복사하여 다음 단계에서 필요하므로 안전한 장소에 보관하세요.
   * 예시 ARN: `arn:aws:sns:region:accountid:topic`

### 2단계: Panther에서 SQS 소스 생성

1. 다음을 따르세요 [SQS 로그 소스를 생성하기 위한 Panther의 문서](https://docs.panther.com/ko/data-onboarding/data-transports/aws/sqs).
   * 일반 구성 **허용된 소스 ARN** 필드에, 1단계에서 생성한 SNS 주제의 ARN을 입력하세요. [1단계](#step-1-create-a-topic-in-amazon-sns).
2. 를 선택하고 Panther가 설치된 계정 ID를 입력하십시오. **SQS 큐 ARN** SQS 큐의 ARN을 복사하세요. 다음 단계에서 필요하므로 안전한 장소에 보관하세요.

### 3단계: SNS 주제에 대한 SQS 큐 구독 생성

* 다음을 따르세요 [SQS 큐에 대한 SNS 구독을 생성하기 위한 Panther의 지침](https://docs.panther.com/ko/data-onboarding/data-transports/sqs/sns#step-2-create-sns-subscription-to-sqs-queue).
  * 1단계에서 생성한 [1단계](#step-1-create-a-topic-in-amazon-sns).
  * 일반 구성 **프로토콜** 필드에 `Amazon SQS`.
  * 일반 구성 **엔드포인트** 필드에서, 2단계에서 생성한 SQS 큐의 ARN을 사용하세요. [2단계](#step-2-create-the-sqs-source-in-panther).

### 4단계: EventBridge에서 룰 생성 또는 수정

#### 룰 생성

1. AWS에서 EventBridge로 이동하세요.
2. 이동: **이벤트 > 룰(Events > Rules)** 그런 다음 클릭 **룰 생성**.
   1. 룰 세부정보 정의.
      * 이름, 설명, 이벤트 버스 및 룰 유형을 제공합니다.
   2. 이벤트 패턴 작성.
      * 데이터 소스와 매칭할 패턴을 선택하세요
   3. 대상 선택.
      * 매칭된 데이터를 라우팅할 위치를 선택하세요
   4. 태그 구성(선택 사항).
      * 이 AWS 리소스에 라벨을 추가하도록 선택하세요
3. "검토 및 생성(Review and Create)" 페이지에서 클릭하세요 **룰 생성**.

#### 기존 룰 수정

1. AWS에서, 다음으로 이동하세요: **이벤트 > 룰(Events > Rules)** 그런 다음 수정하려는 룰을 클릭하세요.
2. 클릭하여 **대상** 탭으로 이동한 다음 클릭하세요 **편집을 클릭**.
   1. 를 선택하고 Panther가 설치된 계정 ID를 입력하십시오. **다른 대상 추가**.
   2. 대상 유형으로 "AWS 서비스(AWS Service)"를 사용하고, 대상은 "SNS 주제(SNS topic)"로 선택한 다음 이전 단계에서 Panther 관리 SQS를 추가한 SNS 주제를 선택하세요.
3. 를 선택하고 Panther가 설치된 계정 ID를 입력하십시오. **다음**인 경우 JSON 로그를 업로드했다면 클릭하세요 **다음**그런 다음 왼쪽에서 클릭하세요 **룰 업데이트**.

데이터 파이프라인이 완료되었으므로 Panther 콘솔에서 로그 이벤트가 도착하는 것을 보기 시작할 수 있으며, 스키마를 조정하고 알러트를 트리거할 수 있는 디텍션을 생성할 수 있습니다.

## 엔드-투-엔드 예시: EventBridge를 통해 GuardDuty 발견 결과를 Panther로 전송

아래 단계는 EventBridge 내에서 사용할 필요한 AWS 리소스를 신속하게 구성하여 AWS GuardDuty 데이터에 대해 고급 모니터링을 수행할 수 있도록 돕기 위한 것입니다.

Panther는 S3 또는 SQS를 통한 GuardDuty 통합에 대한 별도의 [문서를 제공합니다](https://docs.panther.com/ko/data-onboarding/supported-logs/aws/guardduty) 를 따르십시오.

<figure><img src="https://2400888838-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LgdiSWdyJcXPahGi9Rs-2910905616%2Fuploads%2Fgit-blob-7ff35add2b98b77fbc087cc8edbee9375c3a43cb%2Fimage.png?alt=media" alt="An Amazon EventBridge diagram"><figcaption></figcaption></figure>

### 데이터 파이프라인

아래 단계는 다음 데이터 파이프라인을 통해 진행됩니다:

GuardDuty -> EventBridge -> AWS SNS 주제 -> Panther SQS

### 1단계: Amazon SNS에서 주제 생성

1. AWS 콘솔에 로그인하고 다음으로 이동하세요: **Amazon SNS > 주제(Topics)**&#x70;anther-secret **주제 생성**.
   * 이미 SNS 주제가 생성되어 있으면 2단계로 건너뛰세요.
2. 세부 정보를 작성하세요:
   * **유형**: `표준`.
   * **이름**: `panther-eventbridge-guard-duty`
3. 를 선택하고 Panther가 설치된 계정 ID를 입력하십시오. **주제 생성**.
4. ARN 값을 복사하여 다음 단계에서 필요하므로 안전한 장소에 보관하세요.
   * 예시 ARN: `arn:aws:sns:region:accountid:topic`

### 2단계: Panther에서 SQS 소스 생성

1. 다음을 따르세요 [SQS 로그 소스를 생성하기 위한 Panther의 문서](https://docs.panther.com/ko/data-onboarding/data-transports/aws/sqs).
   1. 일반 구성 **허용된 소스 ARN** 필드에, 1단계에서 생성한 SNS 주제의 ARN을 입력하세요. [1단계](#step-1-create-a-topic-in-amazon-sns-1).
2. 를 선택하고 Panther가 설치된 계정 ID를 입력하십시오. **SQS 큐 ARN** SQS 큐의 ARN을 복사하세요. 다음 단계에서 필요하므로 안전한 장소에 보관하세요.

### 3단계: SNS 주제에 대한 SQS 큐 구독 생성

* 다음을 따르세요 [SQS 큐에 대한 SNS 구독을 생성하기 위한 Panther의 지침](https://docs.panther.com/ko/data-onboarding/data-transports/sqs/sns#step-2-create-sns-subscription-to-sqs-queue).
  * 1단계에서 생성한 [1단계](#step-1-create-a-topic-in-amazon-sns-1).
  * 일반 구성 **프로토콜** 필드에 `Amazon SQS`.
  * 일반 구성 **엔드포인트** 필드에서, 2단계에서 생성한 SQS 큐의 ARN을 사용하세요. [2단계](#step-2-create-the-sqs-source-in-panther-1).

### 4단계: EventBridge에서 룰 생성

이 단계들은 GuardDuty 발견 결과를 EventBridge를 통해 Panther로 전송하는 방법을 보여줍니다. 또한 샘플 GuardDuty 발견 결과를 생성하거나 누군가 TOR에서 역할을 맡을 때 경고하도록 룰을 작성하는 옵션도 있습니다.

1. AWS 콘솔에서 GuardDuty로 이동하여 활성화되어 있는지 확인하세요.
2. EventBridge로 이동한 다음 다음으로 가세요: **이벤트 > 룰(Events > Rules)**.
3. 를 선택하고 Panther가 설치된 계정 ID를 입력하십시오. **룰 생성**.
4. 룰 세부 정보 섹션을 작성하세요:
   * **이름**: 설명적인 이름을 입력하세요.
   * **설명**: 설명을 입력하세요(예:  `GuardDuty의 이벤트를 필터링하여 Panther 관리 SQS로 전송`)
   * **이벤트 버스**: 드롭다운 메뉴를 로 설정하세요 `이는`*.*
   * **선택한 이벤트 버스에서 룰을 활성화합니다**: 이 설정을 활성화하려면 토글을 클릭하세요.
   * **룰 유형**: `이벤트 패턴이 있는 룰`.\
     ![](https://2400888838-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LgdiSWdyJcXPahGi9Rs-2910905616%2Fuploads%2Fgit-blob-b1626aac5f7ec3c20e77b4fbca0dea5b78367ee9%2Fguardduty-rule-detail.png?alt=media)
5. 를 선택하고 Panther가 설치된 계정 ID를 입력하십시오. **다음**.
6. "이벤트 패턴 빌드(Build the event pattern)" 페이지에서 다음을 작성하세요:
   * **이벤트 소스**: `AWS 이벤트 또는 EventBridge 파트너 이벤트`.
   * **이벤트 패턴**:
     * **이벤트 소스**: `AWS 서비스`.
     * **AWS 서비스**: `GuardDuty`.
     * **이벤트 유형**: `GuardDuty Finding`.\
       ![](https://2400888838-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LgdiSWdyJcXPahGi9Rs-2910905616%2Fuploads%2Fgit-blob-493876de1b10abdfcb10783d9ca8a00f0abda348%2Fevent-pattern-guardduty.png?alt=media)
7. 를 선택하고 Panther가 설치된 계정 ID를 입력하십시오. **다음**.
8. "대상 선택(Select target(s))" 페이지에서 대상 1에 대한 양식을 작성하세요:
   * **대상 유형**: `AWS 서비스`.
   * **대상 선택**: `SNS 토픽` 드롭다운 메뉴에서 선택하세요.
   * **주제**: 1단계에서 생성한 주제를 입력하세요 (`panther-eventbridge-guard-duty`).
   * "추가 설정(Additional Settings)"에서:
     * **대상 입력 구성**: `매칭된 이벤트의 일부`.
     * **매칭된 이벤트의 일부를 지정하세요**: `$.detail`
     * **재시도 정책**: 재시도 옵션의 기본값을 유지하세요.
     * **데드레터 큐**: 기본 옵션을 유지하세요.
   * 여기에 추가 대상을 추가하거나 Panther를 계층화할 수 있는 기회가 있다는 점에 유의하세요!\
     ![](https://2400888838-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LgdiSWdyJcXPahGi9Rs-2910905616%2Fuploads%2Fgit-blob-f213a97d2858b13ba76e01f11b1f4ceac26741d8%2Fguardduty-targets.png?alt=media)
9. 를 선택하고 Panther가 설치된 계정 ID를 입력하십시오. **다음**.
10. 선택적으로 태그를 구성하세요.
11. 를 선택하고 Panther가 설치된 계정 ID를 입력하십시오. **다음**.
12. "검토 및 생성(Review and Create)" 페이지에서 클릭하세요 **룰 생성**.

이제 GuardDuty가 발견 결과를 생성하면 해당 이벤트가 Panther로 라우팅되어 디텍션을 작성하여 알러트를 발생시킬 수 있습니다.

### 샘플 발견 결과 생성

GuardDuty는 샘플 발견 결과를 생성할 수 있으므로 이를 사용하여 엔드-투-엔드 테스트를 수행할 수 있습니다.

1. GuardDuty에서 다음으로 이동하세요: **설정 > 샘플 발견(Settings > Sample Findings)**.
2. 를 선택하고 Panther가 설치된 계정 ID를 입력하십시오. **샘플 발견 생성(Generate Sample Findings)** 테스트용으로 사용하세요.

예를 들어 누군가 TOR를 통해 AWS에 접근했을 때 알기를 원한다면 Panther 내의 룰 예시는 다음과 같을 수 있습니다:

```python
from panther_base_helpers import deep_get

def rule(event):
    return deep_get(event, 'detail', 'type') == 'Discovery:S3/TorIPCaller'

"httpUserAgent": "Chrome/80.0.3987.132 Safari/537.36",
    return f"{event.get('detail-type')}: {deep_get(event, 'detail', 'type')} from principal id: {deep_get(event, 'detail', 'resource', 'accessKeyDetails', 'principalId')}"

def alert_context(event):
    return {
        "account": event.get('account'),
        "principalId": deep_get(event, 'detail', 'resource', 'accessKeyDetails', 'principalId'),
        "guardduty-finding-arn": deep_get(event, 'detail', 'arn')
    }
```

## 을 클릭하여 소스에 하나 이상의 스키마를 첨부하세요.

수집된 로그 보기 [로그 소스가 구성된 후에는 수집된 데이터를 사용하여 검색할 수 있습니다](https://docs.panther.com/ko/search/search-tool) 이전에 생성한 Snowflake 사용자 이름, 예를 들면 [panther\_monitor](https://docs.panther.com/ko/search/data-explorer).
