# AWS WAF

## 개요

Panther는 AWS S3를 통해 Amazon Web Services (AWS) Web Application Firewall (WAF) 로그를 수집하는 것을 지원합니다.

## AWS 온보드하는 방법 **WAF** 로그를 Panther로

WAF 로그를 Panther로 가져오려면, AWS 계정에서 데이터를 스트리밍하기 위해 Panther Console에 S3 버킷을 설정해야 합니다.

1. Panther Console의 왼쪽 탐색 표시줄에서 **구성** > **로그 소스**.
2. 클릭 **새로 만들기**.
3. "AWS"를 검색하여 사용 가능한 로그 소스 목록을 확인하세요.
4. 선택 **AWS WAF Web ACL**.
5. 선택 **AWS S3 버킷** 을 소스로 선택하여 설정을 시작합니다. 다음을 따르세요. [데이터 전송을 위한 S3 구성에 대한 Panther의 문서](/ko/data-onboarding/data-transports/aws/s3.md).

## Panther에서 만든 탐지 규칙

에서 Panther의 사전 작성된 AWS 룰을 확인하세요. [panther-analysis Github 저장소](https://github.com/panther-labs/panther-analysis/tree/master/rules).

## 지원되는 AWS WAF 로그

### AWS.WAFWebACL

WAFWebACL 로그는 웹 액세스 제어 목록(ACL) 트래픽 정보를 나타냅니다. 자세한 내용은 [웹 ACL 트래픽 로깅에 대한 AWS 문서](https://docs.aws.amazon.com/waf/latest/developerguide/logging.html).

```yaml
schema: AWS.WAFWebACL
parser:
  native:
    name: AWS.WAFWebACL
description: WAF 웹 ACL 트래픽 정보 로그.
referenceURL: https://docs.aws.amazon.com/waf/latest/developerguide/logging.html
fields:
  - name: action
    required: true
    description: 'WAF에 의해 적용된 동작입니다. 종료 룰에 대한 가능한 값은 ALLOW와 BLOCK입니다. COUNT는 종료 룰에 대해 유효한 값이 아닙니다.'
    type: string
  - name: formatVersion
    description: 로그의 형식 버전입니다.
    type: smallint
  - name: httpRequest
    required: true
    description: 요청에 대한 메타데이터입니다.
    type: object
    fields:
      - name: args
        description: HTTP 요청 쿼리 문자열입니다.
        type: string
      - name: clientIp
        description: 요청을 보내는 클라이언트의 IP 주소입니다.
        type: string
        indicators:
          - ip
      - name: country
        description: 요청의 출발 국가입니다. AWS WAF가 원산지 국가를 판별할 수 없으면 이 필드를 -로 설정합니다.
        type: string
      - name: headers
        description: 헤더 목록입니다.
        type: array
        element:
          type: object
          fields:
            - name: name
              description: 헤더 이름입니다.
              type: string
            - name: value
              description: 헤더 값입니다.
              type: string
      - name: httpMethod
        description: 요청의 HTTP 메서드입니다.
        type: string
      - name: httpVersion
        description: HTTP 버전입니다. 예: HTTP/2.0.
        type: string
      - name: requestId
        description: 기본 호스트 서비스에서 생성되는 요청의 ID입니다. Application Load Balancer의 경우 이는 추적 ID입니다. 그 외 모든 경우에는 요청 ID입니다.
        type: string
        indicators:
          - trace_id
      - name: uri
        description: 요청의 URI입니다.
        type: string
  - name: httpSourceId
    required: true
    description: 소스 ID입니다. 이 필드는 연결된 리소스의 ID를 보여줍니다.
    type: string
  - name: httpSourceName
    description: '요청의 소스입니다. 가능한 값: Amazon CloudFront의 CF, Amazon API Gateway의 APIGW, Application Load Balancer의 ALB, AWS AppSync의 APPSYNC.'
    type: string
  - name: nonTerminatingMatchingRules
    description: 요청과 일치하는 룰 그룹의 비종료 룰 목록입니다. 이들은 항상 COUNT 룰(일치하지만 비종료인 룰)입니다.
    type: array
    element:
      type: object
      fields:
        - name: ruleId
          description: 룰 ID입니다.
          type: string
        - name: action
          description: 구성된 룰 작업입니다. 비종료 룰의 경우 값은 항상 COUNT입니다.
          type: string
        - name: ruleMatchDetails
          description: 요청과 일치한 룰에 대한 자세한 정보입니다. 이 필드는 SQL 삽입 및 사이트 간 스크립팅(XSS) 일치 룰 문에 대해서만 채워집니다.
          type: array
          element:
            type: object
            fields:
              - name: conditionType
                description: 취약성 유형입니다. SQL_INJECTION 또는 XSS입니다.
                type: string
              - name: location
                description: 일치를 제공한 요청 매개변수 유형입니다. ALL_QUERY_ARGS, HEADER 등이 될 수 있습니다.
                type: string
              - name: matchedData
                description: 일치를 제공하는 문자열 목록입니다. 예: ["10", "AND", "1"]
                type: array
                element:
                  type: string
  - name: rateBasedRuleList
    description: 요청에 적용된 속도 기반 룰 목록입니다.
    type: array
    element:
      type: object
      fields:
        - name: limitKey
          description: 'AWS WAF가 요청이 단일 소스에서 도착하는지, 따라서 속도 모니터링 대상인지 판단하는 데 사용하는 필드입니다. 가능한 값: IP.'
          type: string
        - name: limitValue
          description: 속도 제한을 위해 요청을 집계하는 데 속도 기반 룰이 사용하는 IP 주소입니다. 요청에 유효하지 않은 IP 주소가 포함되어 있으면 limitvalue는 INVALID입니다.
          type: string
        - name: maxRateAllowed
          description: limitKey로 지정된 필드에서 동일한 값을 가진 요청 중 5분 동안 허용되는 최대 요청 수입니다. 요청 수가 maxRateAllowed를 초과하고 룰에 지정된 다른 조건도 충족되면 AWS WAF가 이 룰에 지정된 작업을 트리거합니다.
          type: bigint
        - name: rateBasedRuleId
          description: 요청에 적용된 속도 기반 룰의 ID입니다. 이 룰이 요청을 종료한 경우 rateBasedRuleId의 ID는 terminatingRuleId의 ID와 같습니다.
          type: string
        - name: rateBasedRuleName
          description: 요청에 적용된 속도 기반 룰의 이름입니다.
          type: string
  - name: ruleGroupList
    description: 이 요청에 적용된 룰 그룹의 목록입니다. 앞의 코드 예제에서는 하나만 있습니다.
    type: array
    element:
      type: object
      fields:
        - name: excludedRules
          description: 제외한 룰 그룹 내 룰 목록입니다. 이러한 룰의 작업은 COUNT로 설정됩니다.
          type: array
          element:
            type: object
            fields:
              - 이름: exclusionType
                설명: 제외된 룰이 COUNT 작업을 갖는다는 것을 나타내는 유형입니다(가장 가능성이 높은 값은 EXCLUDED_AS_COUNT입니다).
                type: string
              - name: ruleId
                설명: 룰 그룹 내에서 제외된 룰의 ID입니다.
                type: string
        - name: nonTerminatingMatchingRules
          description: 요청과 일치하는 룰 그룹의 비종료 룰 목록입니다. 이들은 항상 COUNT 룰(일치하지만 비종료인 룰)입니다.
          type: array
          element:
            type: object
            fields:
              - name: ruleId
                description: 룰 ID입니다.
                type: string
              - name: action
                description: 구성된 룰 작업입니다. 비종료 룰의 경우 값은 항상 COUNT입니다.
                type: string
              - name: ruleMatchDetails
                description: 요청과 일치한 룰에 대한 자세한 정보입니다. 이 필드는 SQL 삽입 및 사이트 간 스크립팅(XSS) 일치 룰 문에 대해서만 채워집니다.
                type: array
                element:
                  type: object
                  fields:
                    - name: conditionType
                      description: 취약성 유형입니다. SQL_INJECTION 또는 XSS입니다.
                      type: string
                    - name: location
                      description: 일치를 제공한 요청 매개변수 유형입니다. ALL_QUERY_ARGS, HEADER 등이 될 수 있습니다.
                      type: string
                    - name: matchedData
                      description: 일치를 제공하는 문자열 목록입니다. 예: ["10", "AND", "1"]
                      type: array
                      element:
                        type: string
        - 이름: ruleGroupId
          설명: 룰 그룹의 ID입니다. 룰이 요청을 차단한 경우, ruleGroupID의 ID는 terminatingRuleId의 ID와 동일합니다.
          type: string
        - 이름: terminatingRule
          설명: 요청을 종료한 룰 그룹 내의 룰입니다. 이 값이 null이 아닌 경우, ruleid와 작업(action)도 포함됩니다. 이 경우 작업은 항상 BLOCK입니다.
          type: object
          fields:
            - name: ruleId
              description: 룰 ID입니다.
              type: string
            - name: action
              description: 구성된 룰 작업입니다. 비종료 룰의 경우 값은 항상 COUNT입니다.
              type: string
            - name: ruleMatchDetails
              description: 요청과 일치한 룰에 대한 자세한 정보입니다. 이 필드는 SQL 삽입 및 사이트 간 스크립팅(XSS) 일치 룰 문에 대해서만 채워집니다.
              type: array
              element:
                type: object
                fields:
                  - name: conditionType
                    description: 취약성 유형입니다. SQL_INJECTION 또는 XSS입니다.
                    type: string
                  - name: location
                    description: 일치를 제공한 요청 매개변수 유형입니다. ALL_QUERY_ARGS, HEADER 등이 될 수 있습니다.
                    type: string
                  - name: matchedData
                    description: 일치를 제공하는 문자열 목록입니다. 예: ["10", "AND", "1"]
                    type: array
                    element:
                      type: string
  - 이름: terminatingRuleId
    설명: 요청을 종료한 룰의 ID입니다. 요청을 종료하는 것이 아무것도 없으면 값은 Default_Action입니다.
    type: string
  - 이름: terminatingRuleMatchDetails
    description: 요청과 일치한 종료 룰에 대한 자세한 정보입니다. 종료 룰은 웹 요청에 대한 검사 프로세스를 종료하는 작업을 가집니다. 종료 룰의 가능한 작업은 ALLOW 및 BLOCK입니다. 이는 SQL 인젝션 및 사이트 간 스크립팅(XSS) 매치 룰 문에 대해서만 채워집니다. 둘 이상의 항목을 검사하는 모든 룰 문과 마찬가지로 AWS WAF는 첫 번째 일치 항목에 작업을 적용하고 웹 요청 검사를 중지합니다. 종료 작업이 있는 웹 요청에는 로그에 보고된 위협 외에도 다른 위협이 포함될 수 있습니다.
    type: array
    element:
      type: object
      fields:
        - name: conditionType
          description: 취약성 유형입니다. SQL_INJECTION 또는 XSS입니다.
          type: string
        - name: location
          description: 일치를 제공한 요청 매개변수 유형입니다. ALL_QUERY_ARGS, HEADER 등이 될 수 있습니다.
          type: string
        - name: matchedData
          description: 일치를 제공하는 문자열 목록입니다. 예: ["10", "AND", "1"]
          type: array
          element:
            type: string
  - 이름: terminatingRuleType
    설명: '요청을 종료한 룰의 유형입니다. 가능한 값: RATE_BASED, REGULAR, GROUP, MANAGED_RULE_GROUP.'
    type: string
  - 이름: 타임스탬프
    required: true
    설명: 밀리초 단위의 타임스탬프.
    유형: 타임스탬프
    시간 형식: unix_ms
    isEventTime: true
  - 이름: webaclId
    required: true
    설명: 웹 ACL의 GUID입니다.
    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/waf.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.
