# AWS VPC

## 개요

Panther는 AWS S3를 통해 Amazon Web Services(AWS) Virtual Private Cloud(VPC) 로그 수집을 지원합니다.

## AWS VPC 로그를 Panther에 온보딩하는 방법

### 1단계: AWS에서 로깅 구성

AWS 구성은 VPC DNS 로그를 온보딩하는지, 플로우 로그를 온보딩하는지에 따라 다릅니다. DNS와 플로우 로그를 모두 온보딩하는 경우 아래 두 탭의 절차를 모두 따라야 합니다.

{% tabs %}
{% tab title="VPC DNS" %}
AWS의 일부 구성을 통해 이 통합을 사용하여 DNS 쿼리를 모니터링할 수 있습니다. 악의적인 공격자는 데이터 탈취, C2, DNS 터널링, 캐시 중독, DNS 하이재킹 등에 DNS를 사용할 수 있습니다. 네트워크의 장치에서 수행된 쿼리와 수신된 응답을 로깅하는 것은 사전 대응 경고와 조사에 유용할 수 있습니다.

아래 지침은 VPC 내 AWS 서비스에서 발생한 쿼리를 S3 버킷에 로깅하는 방법을 설명합니다. 쿼리 로깅 구성은 Route 53 내에서 이루어지며, 지정한 리전 내의 VPC에 적용됩니다. 구성은 리전별로 필요하지만, 해당 리전의 여러 VPC에 적용할 수 있습니다.

1. AWS 계정에 로그인합니다.
2. 로그를 수집하려는 리전 내의 Route 53 서비스로 이동합니다.
3. 왼쪽에서 Resolver 아래의 **쿼리 로깅**.

   * “쿼리 로깅 구성” 페이지로 이동해야 합니다. 그렇지 않은 경우 “쿼리 로깅” 링크를 다시 클릭해 보세요.

   ![AWS의 쿼리 로깅 구성 페이지 중앙에는 구성한 항목이 없다는 메시지가 표시됩니다.](/files/432f2f2c7b4f5f32d94db1a02629ccbd10d83847)
4. 오른쪽 상단에서 **쿼리 로깅 구성**.
5. 다음 페이지에서 쿼리 로깅 구성 양식을 작성합니다.
   * **이름**: 설명이 잘 드러나는 이름을 입력합니다.
   * **쿼리 로그 대상**: 선택 `S3 버킷`.
   * **Amazon S3 버킷**: 쿼리 로깅을 구성할 S3 버킷을 선택합니다.
   * **VPC 로그**: DNS 쿼리 로깅을 시작할 모든 VPC를 추가합니다. VPC를 검색한 다음 **VPC 추가**.\
     ![](/files/5b389bf0e4f1ef31ba9f6a9b57c78b20e53fac4c)
6. 페이지 하단에서 **쿼리 로깅 구성**.
   * 몇 분 내에 다음 위치의 S3 버킷에서 로그를 받기 시작해야 합니다. `s3://BucketName/BucketPrefix/AWSLogs/ACCOUNTID/vpcdnsquerylogs/VPCName/Year/Month/Day`
     {% endtab %}

{% tab title="VPC 플로우" %}
VPC 플로우 로깅을 구성하려면:

* AWS [Amazon S3에 게시하는 플로우 로그 생성](https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs-s3-create-flow-log.html) 문서를 따르세요.
  * 다음 항목에서 **로그 레코드 형식**, 선택 **사용자 지정 형식**, 그런 다음 **캡처하려는 속성**을 선택합니다. ( **AWS 기본 형식** 에는 다음과 같은 필드가 제외됩니다. `instance-id`.)\ <br>

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

{% endtab %}
{% endtabs %}

### 2단계: Panther에서 새 AWS VPC 소스 생성

Panther에서 AWS VPC 소스를 설정해야 하며, 이는 로그가 스트리밍될 S3 버킷을 나타냅니다.

{% hint style="info" %}
DNS와 플로우 로그를 모두 온보딩하는 경우:

* 두 유형의 로그가 모두 동일한 S3 버킷으로 전송되도록 구성된 경우 Panther에 하나의 AWS VPC 로그 소스를 생성할 수 있습니다.
* DNS와 흐름 로그를 서로 다른 S3 버킷으로 전송하도록 구성한 경우, 이 단계를 두 번 완료해야 합니다(Panther에서 두 개의 로그 소스 설정).
  {% endhint %}

1. Panther Console의 왼쪽 탐색 표시줄에서 **구성** > **로그 소스**.
2. 클릭 **새로 만들기**.
3. "AWS VPC"를 검색한 다음 해당 타일을 클릭합니다.
4. 클릭 **설정 시작**.
5. 다음을 따르세요 [데이터 전송을 위한 S3 구성에 대한 Panther의 문서](/ko/data-onboarding/data-transports/aws/s3.md).

### DNS 이벤트 예시

{% code overflow="wrap" %}

```json
{"version":"1.100000","account_id":"0123456789012","region":"us-west-2","vpc_id":"vpc-c26c48ba","query_timestamp":"2022-10-07T21:39:49Z","query_name":"ec2messages.us-west-2.amazonaws.com.","query_type":"A","query_class":"IN","rcode":"NOERROR","answers":[{"Rdata":"52.94.176.105","Type":"A","Class":"IN"}],"srcaddr":"172.31.46.187","srcport":"52635","transport":"UDP","srcids":{"instance":"i-09d9aa4e31675db61"}}
```

{% endcode %}

## Panther 관리 탐지

참조하세요 [Panther가 관리하는](https://docs.panther.com/detections/panther-managed) AWS VPC 규칙을 [panther-analysis GitHub 저장소의](https://github.com/panther-labs/panther-analysis/tree/main/rules/aws_vpc_flow_rules).

## Data Explorer에서 로그 쿼리하기

Panther의 [Data Explorer](/ko/search/data-explorer.md)에서 사용할 수 있는 예제 SQL 쿼리를 참조하세요 [VPC 로그 쿼리](/ko/search/data-explorer/example-queries/vpc-flow-logs-queries.md).

## 지원되는 AWS VPC 로그 유형

Panther는 [AWS.VPCDns](#aws.vpcdns) 및 [AWS.VPCFlow](#aws.vpcflow).

### AWS.VPCDns

DNS 쿼리 로그는 VPC DNS 리졸버가 Route 53으로 전달하는 쿼리를 나타냅니다. 자세한 내용은 [AWS의 Resolver 쿼리 로그 형식 문서](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resolver-query-logs-format.html).

```yaml
schema: AWS.VPCDns
parser:
  native:
    name: AWS.VPCDns
description: DNS 쿼리 로그는 VPC DNS 리졸버가 Route 53으로 전달하는 쿼리를 나타냅니다.
referenceURL: https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resolver-query-logs-format.html
fields:
  - name: version
    required: true
    description: 쿼리 로그 형식의 버전 번호입니다. 로그에 필드를 추가하거나 기존 필드의 형식을 변경하면 이 값을 증가시킵니다.
    type: string
  - name: account_id
    required: true
    description: VPC를 생성한 AWS 계정의 ID입니다.
    type: string
    indicators:
      - aws_account_id
  - name: region
    required: true
    description: VPC를 생성한 AWS 리전입니다.
    type: string
  - name: vpc_id
    required: true
    description: 쿼리가 시작된 VPC의 ID입니다.
    type: string
  - name: query_timestamp
    required: true
    description: 쿼리가 제출된 날짜와 시간이며, ISO 8601 형식 및 협정 세계시(UTC)로 표시됩니다
    type: timestamp
    timeFormat: rfc3339
    isEventTime: true
  - name: query_name
    required: true
    description: 쿼리에서 지정된 도메인 이름(example.com) 또는 하위 도메인 이름(www.example.com).
    type: string
  - name: query_type
    required: true
    description: 요청에 지정된 DNS 레코드 유형 또는 ANY입니다. Route 53이 지원하는 유형에 대한 정보는.
    type: string
  - name: query_class
    required: true
    description: 쿼리의 클래스입니다.
    type: string
  - name: rcode
    required: true
    description: Resolver가 DNS 쿼리에 대한 응답으로 반환한 DNS 응답 코드입니다. 응답 코드는 쿼리가 유효했는지 여부를 나타냅니다. 가장 일반적인 응답 코드는 NOERROR이며, 이는 쿼리가 유효했음을 의미합니다. 응답이 유효하지 않으면 Resolver는 이유를 설명하는 응답 코드를 반환합니다. 가능한 응답 코드 목록은 IANA 웹사이트의 DNS RCODE를 참조하세요.
    type: string
  - 이름: answers
    required: true
    설명: 쿼리에 대한 응답
    유형: 배열
    요소:
      유형: 객체
      fields:
        - 이름: Rdata
          required: true
          설명: Resolver가 쿼리에 대한 응답으로 반환한 값입니다. 예를 들어 A 레코드의 경우, 이는 IPv4 형식의 IP 주소입니다. CNAME 레코드의 경우, 이는 CNAME 레코드의 도메인 이름입니다.
          type: string
        - 이름: Type
          required: true
          설명: Resolver가 쿼리에 대한 응답으로 반환하는 값의 DNS 레코드 유형(A, MX, CNAME 등)입니다.
          type: string
        - 이름: Class
          required: true
          설명: 쿼리에 대한 Resolver 응답의 클래스입니다.
          type: string
  - 이름: srcaddr
    required: true
    설명: 쿼리가 시작된 인스턴스의 IP 주소입니다.
    type: string
    indicators:
      - ip
  - 이름: srcport
    required: true
    설명: 쿼리가 시작된 인스턴스의 포트입니다.
    type: string
  - 이름: transport
    required: true
    설명: DNS 쿼리를 제출하는 데 사용된 프로토콜입니다.
    type: string
  - 이름: srcids
    required: true
    설명: DNS 쿼리가 시작되었거나 통과한 소스의 ID 목록입니다.
    유형: 객체
    fields:
      - 이름: 인스턴스
        설명: 쿼리가 시작된 인스턴스의 ID입니다.
        type: string
        indicators:
          - aws_instance_id
      - 이름: resolver-endpoint
        설명: DNS 쿼리를 온프레미스 DNS 서버로 전달하는 resolver 엔드포인트의 ID입니다.
        type: string
  - 이름: firewall_룰_group_id
    description: 쿼리의 도메인 이름과 일치한 DNS Firewall 룰 그룹의 ID입니다. 이 값은 DNS Firewall이 action이 알러트 또는 차단으로 설정된 룰과 일치 항목을 찾은 경우에만 채워집니다.
    type: string
  - 이름: firewall_룰_action
    설명: 쿼리에서 도메인 이름과 일치한 룰에 의해 지정된 작업입니다. 이 값은 DNS Firewall이 작업이 알러트 또는 block으로 설정된 룰과의 일치를 찾은 경우에만 채워집니다.
    type: string
  - 이름: firewall_domain_list_id
    description: 쿼리에서 도메인 이름과 일치한 룰이 사용한 도메인 목록입니다. 이는 DNS Firewall이 action이 알러트 또는 block으로 설정된 룰에 대한 일치를 찾은 경우에만 채워집니다.
    type: string
```

### AWS.VPCFlow

VPC Flow는 VPC NetFlow 로그로, EC2의 네트워크 트래픽을 계층 3으로 나타낸 것입니다.

Panther가 VPC NetFlow 로그를 올바르게 수집하려면, 해당 로그는 헤더가 있는 Parquet 또는 CSV 형식으로 S3에서 직접 와야 합니다.

자세한 내용은 다음을 참조하세요. [흐름 로그 레코드 예제를 제공하는 AWS 문서](https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs-records-examples.html).

```yaml
schema: AWS.VPCFlow
parser:
  native:
    name: AWS.VPCFlow
description: VPCFlow는 VPC NetFlow 로그로, EC2의 네트워크 트래픽을 계층 3으로 나타낸 것입니다.
referenceURL: https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs-records-examples.html
fields:
  - name: version
    description: VPC Flow Logs 버전입니다. 기본 형식을 사용하면 버전은 2입니다. 사용자 지정 형식을 지정하면 버전은 3입니다.
    유형: bigint
  - 이름: account
    설명: 플로우 로그에 대한 AWS 계정 ID입니다.
    type: string
    indicators:
      - aws_account_id
  - 이름: interfaceId
    설명: 트래픽이 기록되는 네트워크 인터페이스의 ID입니다.
    type: string
  - 이름: srcAddr
    설명: 들어오는 트래픽의 소스 주소, 또는 나가는 트래픽에 대한 네트워크 인터페이스의 IPv4 또는 IPv6 주소입니다. 네트워크 인터페이스의 IPv4 주소는 항상 해당 프라이빗 IPv4 주소입니다.
    type: string
    indicators:
      - ip
  - 이름: dstAddr
    설명: 나가는 트래픽의 대상 주소, 또는 들어오는 트래픽에 대한 네트워크 인터페이스의 IPv4 또는 IPv6 주소입니다. 네트워크 인터페이스의 IPv4 주소는 항상 해당 프라이빗 IPv4 주소입니다.
    type: string
    indicators:
      - ip
  - 이름: srcPort
    설명: 트래픽의 소스 포트입니다.
    유형: bigint
  - 이름: dstPort
    설명: 트래픽의 대상 포트입니다.
    유형: bigint
  - 이름: protocol
    설명: 트래픽의 IANA 프로토콜 번호입니다.
    유형: bigint
  - 이름: packets
    설명: 플로우 동안 전송된 패킷 수입니다.
    유형: bigint
  - 이름: bytes
    설명: 플로우 동안 전송된 바이트 수입니다.
    유형: bigint
  - 이름: start
    required: true
    설명: 플로우 시작 시간(UTC)입니다.
    type: timestamp
    timeFormat: rfc3339
  - 이름: end
    required: true
    설명: 플로우 종료 시간(UTC)입니다.
    type: timestamp
    timeFormat: rfc3339
  - 이름: action
    설명: '트래픽과 연결된 작업입니다. ACCEPT: 기록된 트래픽이 보안 그룹 또는 네트워크 ACL에 의해 허용되었습니다. REJECT: 기록된 트래픽이 보안 그룹 또는 네트워크 ACL에 의해 허용되지 않았습니다.'
    type: string
  - 이름: status
    required: true
    설명: '플로우 로그의 로깅 상태입니다. OK: 선택한 대상에 데이터가 정상적으로 로깅되고 있습니다. NODATA: 캡처 기간 동안 네트워크 인터페이스로부터 또는 네트워크 인터페이스로의 네트워크 트래픽이 없었습니다. SKIPDATA: 캡처 기간 동안 일부 플로우 로그 레코드가 건너뛰어졌습니다. 이는 내부 용량 제약 또는 내부 오류 때문일 수 있습니다.'
    type: string
  - 이름: vpcId
    설명: 트래픽이 기록되는 네트워크 인터페이스를 포함하는 VPC의 ID입니다.
    type: string
  - 이름: subNetId
    설명: 트래픽이 기록되는 네트워크 인터페이스를 포함하는 서브넷의 ID입니다.
    type: string
  - 이름: instanceId
    설명: 인스턴스가 귀하가 소유한 경우, 트래픽이 기록되는 네트워크 인터페이스와 연결된 인스턴스의 ID입니다. 요청자 관리 네트워크 인터페이스의 경우 '-' 기호를 반환합니다. 예를 들어 NAT 게이트웨이의 네트워크 인터페이스입니다.
    type: string
    indicators:
      - aws_instance_id
  - 이름: tcpFlags
    설명: "다음 TCP 플래그에 대한 비트마스크 값입니다: SYN: 2, SYN-ACK: 18, FIN: 1, RST: 4. ACK는 SYN과 함께 있을 때만 보고됩니다. TCP 플래그는 집계 간격 동안 OR 연산으로 결합될 수 있습니다. 짧은 연결의 경우 플래그가 플로우 로그 레코드의 같은 줄에 설정될 수 있습니다. 예를 들어 SYN-ACK 및 FIN의 경우 19, SYN 및 FIN의 경우 3입니다."
    유형: bigint
  - 이름: trafficType
    설명: '트래픽 유형: IPv4, IPv6 또는 EFA입니다.'
    type: string
  - 이름: pktSrcAddr
    설명: 트래픽의 패킷 수준(원본) 소스 IP 주소입니다. 이 필드를 srcaddr 필드와 함께 사용하여 트래픽이 흐르는 중간 계층의 IP 주소와 트래픽의 원본 소스 IP 주소를 구분합니다. 예를 들어, NAT 게이트웨이의 네트워크 인터페이스를 통해 트래픽이 흐르거나 Amazon EKS의 pod IP 주소가 pod가 실행 중인 인스턴스 노드의 네트워크 인터페이스 IP 주소와 다른 경우입니다.
    type: string
    indicators:
      - ip
  - 이름: pktDstAddr
    설명: 트래픽의 패킷 수준(원본) 대상 IP 주소입니다. 이 필드를 dstaddr 필드와 함께 사용하여 트래픽이 흐르는 중간 계층의 IP 주소와 트래픽의 최종 대상 IP 주소를 구분합니다. 예를 들어, NAT 게이트웨이의 네트워크 인터페이스를 통해 트래픽이 흐르거나 Amazon EKS의 pod IP 주소가 pod가 실행 중인 인스턴스 노드의 네트워크 인터페이스 IP 주소와 다른 경우입니다.
    type: string
    indicators:
      - ip
  - 이름: pktSrcAwsService
    설명: '소스 IP 주소가 AWS 서비스인 경우, pkt-srcaddr 필드에 대한 IP 주소 범위 하위 집합의 이름입니다. 가능한 값은 다음과 같습니다: AMAZON | AMAZON_APPFLOW | AMAZON_CONNECT | API_GATEWAY | CHIME_MEETINGS | CHIME_VOICECONNECTOR | CLOUD9 | CLOUDFRONT | CODEBUILD | DYNAMODB | EC2 | EC2_INSTANCE_CONNECT | GLOBALACCELERATOR | KINESIS_VIDEO_STREAMS | ROUTE53 | ROUTE53_HEALTHCHECKS | S3 | WORKSPACES_GATEWAYS.'
    type: string
  - 이름: pktDstAwsService
    설명: 대상 IP 주소가 AWS 서비스인 경우, pkt-dstaddr 필드에 대한 IP 주소 범위 하위 집합의 이름입니다. 가능한 값 목록은 pkt-src-aws-service 필드를 참조하십시오.
    type: string
  - 이름: flowDirection
    설명: '트래픽이 캡처되는 인터페이스에 대한 플로우의 방향입니다. 가능한 값은 ingress | egress입니다.'
    type: string
  - 이름: trafficPath
    설명: 송신 트래픽이 대상까지 이동하는 경로입니다. 트래픽이 송신 트래픽인지 확인하려면 flow-direction 필드를 확인하세요. 가능한 값은 다음과 같습니다. 어떤 값도 적용되지 않으면 필드는 -로 설정됩니다. 네트워크 인터페이스가 Nitro System 기반 인스턴스에 연결된 경우, 가능한 값에는 7과 8이 포함되지만 2는 포함되지 않습니다. Nitro System 기반이 아닌 인스턴스(예: T2 및 M4)의 경우, 가능한 값에는 2가 포함되지만 7 또는 8은 포함되지 않습니다. 1 — 동일한 VPC 내의 다른 리소스를 통해, 2 — 인터넷 게이트웨이 또는 게이트웨이 VPC 엔드포인트를 통해, 3 — 가상 프라이빗 게이트웨이를 통해, 4 — 동일 리전 VPC 피어링 연결을 통해, 5 — 리전 간 VPC 피어링 연결을 통해, 6 — 로컬 게이트웨이를 통해, 7 — 게이트웨이 VPC 엔드포인트를 통해, 8 — 인터넷 게이트웨이를 통해
    유형: smallint
  - name: region
    설명: 트래픽이 기록되는 네트워크 인터페이스를 포함하는 리전입니다.
    type: string
  - 이름: azId
    설명: 트래픽이 기록되는 네트워크 인터페이스를 포함하는 가용 영역의 ID입니다. 트래픽이 하위 위치에서 발생한 경우, 레코드는 이 필드에 '-' 기호를 표시합니다.
    type: string
  - 이름: sublocationType
    설명: "sublocation-id 필드에 반환되는 하위 위치의 유형입니다. 가능한 값은 wavelength | outpost | localzone입니다. 트래픽이 하위 위치에서 발생하지 않은 경우, 레코드는 이 필드에 '-' 기호를 표시합니다."
    type: string
  - 이름: sublocationId
    설명: 트래픽이 기록되는 네트워크 인터페이스를 포함하는 하위 위치의 ID입니다. 트래픽이 하위 위치에서 발생하지 않은 경우, 레코드는 이 필드에 '-' 기호를 표시합니다.
    type: string
```


---

# 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/data-onboarding/supported-logs/aws/vpc.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.
