# Cloudflare 로그

## 개요

Panther는 Cloudflare의 [Logpush](https://developers.cloudflare.com/logs/about/) 서비스를 통해 Cloudflare 로그 수집을 지원합니다. 이 서비스는 로그를 Amazon Web Services(AWS) S3, Google Cloud Storage(GCS) 또는 Azure Blob Storage로 직접 스트리밍합니다.

{% hint style="info" %}
Cloudflare의 Logpush는 Cloudflare 엔터프라이즈 고객에게만 제공된다는 점에 유의하세요. 이 페이지의 일부 Cloudflare 로그 유형(예: [감사 로그](https://developers.cloudflare.com/logs/reference/log-fields/account/audit_logs))은 Logpush 없이 가져올 수 있을 수 있지만, Panther에서 지원하는 스키마는 Logpush로 전달될 때의 데이터 구조에 의존합니다.
{% endhint %}

{% hint style="info" %}
Panther는 Cloudflare에서 제공되는 30개 이상의 로그 유형 중 네 가지를 기본적으로 지원합니다. Cloudflare 데이터셋에 지원되지 않는 로그 유형이 포함된 경우 대신 [S3 데이터 전송 소스](https://docs.panther.com/ko/data-onboarding/data-transports/aws/s3).

다음 중 어느 것이든 연결할 수 있습니다 [Panther에서 관리하는 Cloudflare 스키마](#supported-log-types) (다음을 제외하고 [`Cloudflare.Firewall`](#cloudflare.firewall)) 이 맞춤 로그 소스에 그대로 연결할 수 있습니다. 방화벽 로그의 경우 관리되는 [`Cloudflare.Firewall`](#cloudflare.firewall) 스키마를 복제하고 `kind` 필드를 편집하여  `required: true`.

추가 로그 유형이 있는 경우 샘플 이벤트로부터 구조를 자동 생성하는 [XML:](https://docs.panther.com/data-onboarding/custom-log-types#how-to-infer-a-schema) 기능을 사용하여 새 맞춤 스키마를 생성하는 것이 좋습니다.
{% endhint %}

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

Cloudflare 로그는 S3 버킷, GCS 버킷 또는 Azure Blob 소스로 스트리밍하여 Panther에 수집할 수 있습니다.

### 전제 조건

{% tabs %}
{% tab title="AWS S3" %}

* AWS 계정에서 새 S3 버킷을 생성하세요.
  * Cloudflare 로그 전용으로 새 S3 버킷을 생성하는 것을 권장합니다. 기본 설정을 사용할 수 있습니다.
  * 버킷을 생성하는 리전을 기록해 두세요. 해당 리전을 Cloudflare에 제공해야 합니다.
    {% endtab %}

{% tab title="GCP GCS" %}

* Google Cloud Platform(GCP) 계정에서 새 GCS 버킷을 생성하세요.
  * Cloudflare 로그 전용으로 새 GCS 버킷을 생성하는 것을 권장합니다. 기본 설정을 사용할 수 있습니다.
    {% endtab %}

{% tab title="Azure Blob" %}

* Azure 계정에서 새 Blob 스토리지를 생성하세요.
  * Cloudflare 로그 전용으로 새 Blob 스토리지를 생성하는 것을 권장합니다. 기본 설정을 사용할 수 있습니다.
    {% endtab %}
    {% endtabs %}

### 1단계: Panther에서 Cloudflare 소스 설정

1. Panther 콘솔의 왼쪽 탐색 창에서 **구성** > **로그 소스**.
2. 를 선택하고 Panther가 설치된 계정 ID를 입력하십시오. **새로 만들기**.
3. “Cloudflare”를 검색한 다음 해당 타일을 클릭하세요.
   * 슬라이드 아웃 패널에서 **전송 메커니즘** 오른쪽 상단의 드롭다운이 미리 채워져 있으며 **AWS S3 버킷** 옵션. 이 선택을 그대로 두거나 **Pub/Sub** 이전에 생성한 Snowflake 사용자 이름, 예를 들면 **Azure Blob Storage**.
4. 를 선택하고 Panther가 설치된 계정 ID를 입력하십시오. **설정 시작**.
5. 선택한 데이터 전송 구성에 대해서는 Panther 문서를 따르세요: [AWS S3](https://docs.panther.com/ko/data-onboarding/data-transports/aws/s3), [Pub/Sub](https://docs.panther.com/ko/data-onboarding/data-transports/google/cloud-storage) 이전에 생성한 Snowflake 사용자 이름, 예를 들면 [Azure Blob Storage](https://docs.panther.com/ko/data-onboarding/data-transports/azure/blob-storage).

### 2단계: Logpush를 구성하여 로그를 클라우드 스토리지 위치로 스트리밍

{% hint style="info" %}
Logpush 작업의 데이터셋 유형을 선택할 때 Cloudflare에는 계정 범위 데이터와 존(zone) 범위 데이터 옵션이 있다는 점을 유의하세요. [감사 로그](#cloudflare.audit) 은(는) 계정 범위인 반면 [Firewall](#cloudflare.firewall), [HttpRequest](#cloudflare.httprequest)및 [Spectrum](#cloudflare.spectrum) 은(는) 존 범위입니다.
{% endhint %}

{% tabs %}
{% tab title="AWS S3" %}

* Cloudflare의 지침을 따르세요: [Logpush를 Amazon S3로 활성화 문서 활성화](https://developers.cloudflare.com/logs/get-started/enable-destinations/aws-s3/).
  {% endtab %}

{% tab title="GCP GCS" %}

* Cloudflare의 지침을 따르세요: [Logpush를 Google Cloud Storage로 활성화](https://developers.cloudflare.com/logs/get-started/enable-destinations/google-cloud-storage/) 문서.
  {% endtab %}

{% tab title="Azure Blob" %}

* Cloudflare의 지침을 따르세요: [Logpush를 Microsoft Azure로 활성화](https://developers.cloudflare.com/logs/get-started/enable-destinations/azure/) 문서.
  {% endtab %}
  {% endtabs %}

## Panther 관리 디텍션

참조 [Panther 관리](https://docs.panther.com/ko/detections/panther-managed) Panther의 [panther-analysis GitHub 리포지토리](https://github.com/panther-labs/panther-analysis/tree/master/rules/cloudflare_rules).

## 지원되는 로그 유형

### Cloudflare.Audit

Cloudflare UI에서 이벤트 필드를 선택할 때 Panther에서 요구하므로 `다음 필드를 포함해야 합니다`, `ID`및 `ResourceType` 필드는 Panther에서 필요하므로 포함해야 합니다.

```yaml
# Panther에 의해 생성됨; 편집하지 마세요. (@generated)
schema: Cloudflare.Audit
파서:
  네이티브:
    name: Cloudflare.Audit
description: 감사 로그는 Cloudflare 계정 내에서 수행된 변경 사항의 기록을 요약합니다. 감사 로그에는 로그인 및 로그아웃과 같은 계정 수준 작업뿐만 아니라 존 구성 변경이 포함됩니다.
referenceURL: https://developers.cloudflare.com/logs/reference/log-fields/account/audit_logs
필드:
  - name: ActionResult
    description: 작업이 성공했는지 여부
    유형: boolean
  - name: ActionType
    description: 수행된 작업의 유형
    type: string
  - name: ActorEmail
    description: 수행자(액터)의 이메일
    type: string
    지표:
      - 이메일
  - name: ActorID
    description: Cloudflare 시스템에서 수행자를 고유하게 식별하는 식별자
    type: string
    지표:
      - username
  - name: ActorIP
    description: 수행자의 물리적 네트워크 주소
    type: string
    지표:
      - ip
  - name: ActorType
    description: 감사 추적을 시작한 사용자 유형
    type: string
  - 이름: ID
    required: true
    description: 감사 로그의 고유 식별자
    type: string
  - name: Interface
    description: 감사 로그의 진입점 또는 인터페이스
    type: string
  - name: Metadata
    description: 추가 감사 로그 관련 정보. 메타데이터는 키:값 쌍으로 구성됩니다. 키 및 값 형식은 ResourceType에 따라 달라질 수 있습니다.
    유형: json
  - name: NewValue
    description: 감사 대상 항목의 새 값을 포함합니다
    유형: json
  - name: OldValue
    description: 감사 대상 항목의 이전 값을 포함합니다
    유형: json
  - name: OwnerID
    description: 작업을 수행했거나 대신 행위가 수행된 사용자의 식별자. 사용자가 스스로 작업을 수행한 경우 이 값은 ActorID와 동일합니다.
    type: string
    지표:
      - username
  - name: ResourceID
    description: Cloudflare 시스템 내 리소스의 고유 식별자
    type: string
  - name: ResourceType
    required: true
    description: 변경된 리소스의 유형
    type: string
  - name: When
    required: true
    description: 변경이 발생한 시점
    type: timestamp
    timeFormats:
      - cloudflare
    isEventTime: true
```

### Cloudflare.Firewall

Cloudflare UI에서 이벤트 필드를 선택할 때 Panther에서 필요하므로 "Datetime" 필드를 포함해야 합니다.

참고: [로그 필드 방화벽에 대한 Cloudflare 문서.](https://developers.cloudflare.com/logs/reference/log-fields/#firewall-events)

```yaml
schema: Cloudflare.Firewall
description: Cloudflare 방화벽 로그. Cloudflare UI에서 이벤트 필드를 선택할 때 Panther에서 필요하므로 "Datetime" 필드를 포함해야 합니다.
referenceURL: https://developers.cloudflare.com/logs/log-fields#firewall-events
필드:
    - name: Action
      description: Cloudflare 방화벽이 이 요청에 대해 취한 1차 조치의 코드
      type: string
    - name: ClientASN
      description: 방문자의 ASN 번호
      type: bigint
    - name: ClientASNDescription
      description: 방문자의 ASN을 문자열로 표현한 값
      type: string
    - name: ClientCountry
      description: 요청이 발생한 국가
      type: string
    - name: ClientIP
      description: 방문자의 IP 주소(IPv4 또는 IPv6)
      type: string
      지표:
        - ip
    - name: ClientIPClass
      description: '방문자의 IP 주소 분류, 가능한 값: unknown | clean | badHost | searchEngine | whitelist | greylist | monitoringService | securityScanner | noRecord | scan | backupService | mobilePlatform | tor'
      type: string
    - name: ClientRefererHost
      description: 레퍼러 호스트
      type: string
      지표:
        - hostname
    - name: ClientRefererPath
      description: 방문자가 요청한 레퍼러 경로
      type: string
    - name: ClientRefererQuery
      description: 방문자가 요청한 레퍼러 쿼리 문자열
      type: string
    - name: ClientRefererScheme
      description: 방문자가 요청한 레퍼러 URL 스킴
      type: string
    - name: ClientRequestHost
      description: 방문자가 요청한 HTTP 호스트 이름
      type: string
      지표:
        - hostname
    - name: ClientRequestMethod
      description: 방문자가 사용한 HTTP 메서드
      type: string
    - name: ClientRequestPath
      description: 방문자가 요청한 경로
      type: string
    - name: ClientRequestProtocol
      description: 방문자가 요청한 HTTP 프로토콜 버전
      type: string
    - name: ClientRequestQuery
      description: 방문자가 요청한 쿼리 문자열
      type: string
    - name: ClientRequestScheme
      description: 방문자가 요청한 URL 스킴
      type: string
    - name: ClientRequestUserAgent
      description: 방문자의 사용자 에이전트 문자열
      type: string
    - name: Datetime
      required: true
      description: 엣지에서 이벤트가 발생한 날짜 및 시간
      type: timestamp
      timeFormats:
        - cloudflare
      isEventTime: true
    - name: Description
      description: 이 이벤트에 대한 룰 설명
      type: string
    - name: EdgeColoCode
      description: 이 요청을 처리한 Cloudflare 데이터 센터의 공항 코드
      type: string
    - name: EdgeResponseStatus
      description: 브라우저에 반환된 HTTP 응답 상태 코드
      유형: smallint
    - name: Kind
      description: '이 이벤트의 종류, 현재 가능한 값은: firewall'
      type: string
    - name: MatchIndex
      description: 체인에서 룰 매치의 인덱스
      type: bigint
    - name: Metadata
      description: 추가 제품별 정보. 메타데이터는 키:값 쌍으로 구성됩니다. 키 및 값 형식은 Cloudflare 보안 제품에 따라 달라질 수 있으며 시간이 지나면서 변경될 수 있습니다.
      유형: json
    - name: OriginResponseStatus
      description: 브라우저에 반환된 원본(origin) HTTP 응답 상태 코드
      유형: smallint
    - name: OriginatorRayID
      description: 챌린지/jschallenge를 발생시킨 요청의 RayID
      type: string
      지표:
        - trace_id
    - name: RayID
      description: 요청의 RayID
      type: string
      지표:
        - trace_id
    - name: Ref
      description: 이 이벤트에 대한 사용자가 정의한 룰 참조
      type: string
    - name: RuleID
      description: 이 요청으로 인해 트리거된 Cloudflare 보안 제품별 RuleID
      type: string
    - name: Source
      description: 이 요청을 트리거한 Cloudflare 보안 제품
      type: string
```

### Cloudflare.HttpRequest

Cloudflare UI에서 이벤트 필드를 선택할 때 Panther에서 필요하므로 "EdgeStartTimestamp" 필드를 포함해야 합니다.

참고: [로그 필드 요청에 대한 Cloudflare 문서.](https://developers.cloudflare.com/logs/reference/log-fields/#http-requests)

```yaml
schema: Cloudflare.HttpRequest
description: Cloudflare HTTP 요청 로그. Cloudflare UI에서 이벤트 필드를 선택할 때 Panther에서 필요하므로 "EdgeStartTimestamp" 필드를 포함해야 합니다.
referenceURL: https://developers.cloudflare.com/logs/log-fields#http-requests
필드:
    - name: BotDetectionIDs
      description: 요청에서 수행된 봇 관리 휴리스틱 디텍션과 연관된 ID 목록. Logpush v2에서만 제공됩니다.
      type: array
      element:
        type: bigint
    - name: BotScore
      description: Cloudflare 봇 점수(봇 관리 고객에게 제공; 활성화하려면 계정 팀에 문의하세요)
      type: bigint
    - name: BotScoreSrc
      description: 봇 점수가 계산된 기반 디텍션 엔진 또는 소스. 가능한 값: Not Computed | Heuristics | Machine Learning | Behavioral Analysis | Verified Bot
      type: string
    - name: BotTags
      description: 봇 트래픽 유형(가능한 경우). 가능한 값 목록은 Bot Tags를 참조하세요. Logpush v2에서만 제공됩니다.
      type: array
      element:
        type: string
    - name: CacheCacheStatus
      description: unknown | miss | expired | updating | stale | hit | ignored | bypass | revalidated
      type: string
    - name: CacheReserveUsed
      description: 이 요청을 제공하는 데 캐시 리저브가 사용되었음. Logpush v2에서만 제공됩니다.
      유형: boolean
    - name: CacheResponseBytes
      description: 캐시에서 반환된 바이트 수
      type: bigint
    - name: CacheResponseStatus
      description: 엣지에 대해 캐시가 반환한 HTTP 상태 코드; 모든 요청(캐시 불가 요청 포함)은 캐시를 통과합니다; CacheStatus 필드도 참조하세요
      유형: smallint
    - name: CacheTieredFill
      description: 계층형 캐시(Tiered Cache)가 이 요청을 제공하는 데 사용되었음
      유형: boolean
    - name: ClientASN
      description: 클라이언트 AS 번호
      type: bigint
    - name: ClientCountry
      description: 클라이언트 IP 주소의 국가
      type: string
    - name: ClientDeviceType
      description: 클라이언트 장치 유형
      type: string
    - name: ClientIP
      description: 클라이언트의 IP 주소
      type: string
      지표:
        - ip
    - name: ClientIPClass
      description: unknown | clean | badHost | searchEngine | whitelist | greylist | monitoringService | securityScanner | noRecord | scan | backupService | mobilePlatform | tor
      type: string
    - name: ClientMTLSAuthCertFingerprint
      description: mTLS 인증 중 클라이언트가 제시한 인증서의 SHA256 지문. mTLS 연결의 첫 번째 요청에서만 채워집니다. Logpush v2에서만 제공됩니다.
      type: string
      지표:
        - sha256
    - name: ClientMTLSAuthStatus
      description: mTLS 인증 상태. mTLS 연결의 첫 번째 요청에서만 채워집니다. Logpush v2에서만 제공됩니다. 가능한 값: unknown | ok | absent | untrusted | notyetvalid | expired
      type: string
    - name: ClientRegionCode
      description: 클라이언트 IP 주소의 ISO-3166-2 지역 코드.
      type: string
    - name: ClientRequestBytes
      description: 클라이언트 요청의 바이트 수
      type: bigint
    - name: ClientRequestHost
      description: 클라이언트가 요청한 호스트
      type: string
      지표:
        - hostname
    - name: ClientRequestMethod
      description: 클라이언트 요청의 HTTP 메서드
      type: string
    - name: ClientRequestPath
      description: 클라이언트가 요청한 URI 경로
      type: string
    - name: ClientRequestProtocol
      description: 클라이언트 요청의 HTTP 프로토콜
      type: string
    - name: ClientRequestReferer
      description: HTTP 요청 레퍼러
      type: string
      지표:
        - hostname
    - name: ClientRequestScheme
      description: 방문자가 요청한 URL 스킴. Logpush v2에서만 제공됩니다.
      type: string
      지표:
        - hostname
    - name: ClientRequestSource
      description: 요청이 외부 소스에서 왔는지 또는 Cloudflare 내부의 다른 서비스에서 왔는지 식별합니다. 가능한 값 목록은 ClientRequestSource 필드를 참조하세요. Logpush v2에서만 제공됩니다.
      type: string
      지표:
        - hostname
    - name: ClientRequestURI
      description: 클라이언트가 요청한 URI
      type: string
    - name: ClientRequestUserAgent
      description: 클라이언트가 보고한 사용자 에이전트
      type: string
    - name: ClientSrcPort
      description: 클라이언트 소스 포트
      유형: int
    - name: ClientSSLCipher
      description: 클라이언트 SSL 암호화 방식(cipher)
      type: string
    - name: ClientSSLProtocol
      description: 클라이언트 SSL(TLS) 프로토콜
      type: string
    - name: ClientTCPRTTMs
      description: TCP 왕복 시간(SRTT)의 평활 평균. 연결의 초기 요청의 경우 연결 설정 중에만 측정됩니다. 동일 연결의 이후 요청의 경우 해당 요청 수신 시점까지 전체 연결 수명 동안 측정됩니다. Logpush v2에서만 제공됩니다.
      type: bigint
    - name: ClientXRequestedWith
      description: X-Requested-With HTTP 헤더
      type: string
    - name: ContentScanObjResults
      description: 콘텐츠 스캔 결과 목록.
      type: array
      element:
        type: string
    - name: ContentScanObjTypes
      description: 콘텐츠 유형 목록.
      type: array
      element:
        type: string
    - name: Cookies
      description: 쿠키의 문자열 키-값 쌍.
      유형: json
    - name: EdgeCFConnectingO2O
      description: 요청이 Cloudflare 엣지에서 여러 존을 통해 루프된 경우 true. 이는 오렌지에서 오렌지로의(o2o) 요청으로 간주됩니다. Logpush v2에서만 제공됩니다.
      유형: boolean
    - name: EdgeColoCode
      description: 요청을 수신한 데이터 센터의 IATA 공항 코드
      type: string
    - name: EdgeColoID
      description: Cloudflare 엣지 콜로(colo) ID
      type: bigint
    - name: EdgeEndTimestamp
      description: 엣지가 클라이언트에 대한 응답 전송을 완료한 시점의 타임스탬프
      type: timestamp
      timeFormats:
        - cloudflare
    - name: EdgePathingOp
      description: 이 요청에 대해 어떤 유형의 응답이 발행되었는지 나타냄(unknown = 특정 작업 없음)
      type: string
    - name: EdgePathingSrc
      description: 보안 검사에 따라 요청이 어떻게 분류되었는지에 대한 세부정보(unknown = 특정 분류 없음)
      type: string
    - name: EdgePathingStatus
      description: 이 요청의 처리 방식을 결정하는 데 어떤 데이터가 사용되었는지 나타냄(unknown = 데이터 없음)
      type: string
    - name: EdgeRateLimitAction
      description: 차단 룰이 취한 조치; 조치가 없으면 비어 있음
      type: string
    - name: EdgeRateLimitID
      description: 차단(금지) 또는 시뮬레이트 동작을 트리거한 속도 제한 룰의 내부 룰 ID. 조치가 없으면 0
      type: string
    - name: EdgeRequestHost
      description: 엣지에서 오리진으로 보내는 요청의 Host 헤더
      type: string
      지표:
        - hostname
    - name: EdgeResponseBodyBytes
      description: 클라이언트에 반환된 HTTP 응답 본문 크기. Logpush v2에서만 제공됩니다.
      type: bigint
    - name: EdgeResponseBytes
      description: 엣지가 클라이언트에 반환한 바이트 수
      type: bigint
    - name: EdgeResponseCompressionRatio
      description: 엣지 응답의 압축 비율
      type: float
    - name: EdgeResponseContentType
      description: 엣지 응답의 Content-Type 헤더 값
      type: string
    - name: EdgeResponseStatus
      description: Cloudflare가 클라이언트에 반환한 HTTP 상태 코드
      유형: smallint
    - name: EdgeServerIP
      description: 오리진에 요청을 보내는 엣지 서버의 IP
      type: string
      지표:
        - ip
    - name: EdgeStartTimestamp
      required: true
      description: 엣지가 클라이언트로부터 요청을 받은 시점의 타임스탬프
      type: timestamp
      timeFormats:
        - cloudflare
      isEventTime: true
    - name: EdgeTimeToFirstByteMs
      description: Cloudflare 엣지에서 측정한 Time To First Byte의 전체 보기. TCP 연결이 설정된 후 시작하여 Cloudflare가 응답의 첫 바이트를 반환하기 시작할 때 끝납니다. TLS 핸드셰이크 시간(새 연결의 경우)과 오리진 응답 시간이 포함됩니다. Logpush v2에서만 제공됩니다.
      type: bigint
    - name: FirewallMatchesActions
      description: Cloudflare 방화벽 제품이 이 요청에 대해 수행한 동작의 배열. 이 동작과 관련된 개별 방화벽 제품은 FirewallMatchesSources에서 찾을 수 있고 해당 RuleId는 FirewallMatchesRuleIDs에서 찾을 수 있습니다. 배열의 길이는 FirewallMatchesRuleIDs 및 FirewallMatchesSources와 동일합니다. 가능한 동작: allow | log | simulate | drop | challenge | jschallenge | connectionClose | challengeSolved | challengeFailed | challengeBypassed | jschallengeSolved | jschallengeFailed | jschallengeBypassed | bypass
      type: array
      element:
        type: string
    - name: FirewallMatchesRuleIDs
      description: 요청과 일치한 방화벽 제품의 RuleID 배열. RuleID와 연관된 방화벽 제품은 FirewallMatchesSources에서 찾을 수 있습니다. 배열의 길이는 FirewallMatchesActions 및 FirewallMatchesSources와 동일합니다.
      type: array
      element:
        type: string
    - name: FirewallMatchesSources
      description: 요청과 일치한 방화벽 제품들. 동일한 제품이 여러 번 나타날 수 있으며 이는 서로 다른 룰 또는 활성화된 동작을 나타냅니다. RuleID는 FirewallMatchesRuleIDs에서, 동작은 FirewallMatchesActions에서 찾을 수 있습니다. 배열의 길이는 FirewallMatchesRuleIDs 및 FirewallMatchesActions와 동일합니다. 가능한 소스: asn | country | ip | ipRange | securityLevel | zoneLockdown | waf | firewallRules | uaBlock | rateLimit | bic | hot | l7ddos | sanitycheck | protect
      type: array
      element:
        type: string
    - name: JA3Hash
      description: SSL/TLS 클라이언트를 프로파일링하는 데 사용되는 JA3 지문(MD5 해시). Logpush v2에서만 제공됩니다.
      type: string
      지표:
        - md5
    - name: OriginDNSResponseTimeMs
      description: 오리진 이름에 대한 DNS 응답을 수신하는 데 걸린 시간. 보통 몇 밀리초가 소요되지만 CNAME 레코드가 사용되면 더 길어질 수 있습니다. Logpush v2에서만 제공됩니다.
      type: bigint
    - name: OriginIP
      description: 오리진 서버의 IP
      type: string
      지표:
        - ip
    - name: OriginRequestHeaderSendDurationMs
      description: 연결을 설정한 후 오리진으로 요청 헤더를 보내는 데 걸린 시간. 이 값은 일반적으로 0입니다. Logpush v2에서만 제공됩니다.
      type: bigint
    - name: OriginResponseBytes
      description: 오리진 서버가 반환한 바이트 수
      type: bigint
    - name: OriginResponseDurationMs
      description: 요청을 수신한 최초 데이터 센터부터 측정한 업스트림 응답 시간. Argo Smart Routing 및 Tiered Cache에 의해 소요되는 시간과 오리진 서버에 연결하여 응답을 수신하는 시간이 포함됩니다. 이 필드는 OriginResponseTime을 대체합니다. Logpush v2에서만 제공됩니다.
      type: bigint
    - name: OriginResponseHeaderReceiveDurationMs
      description: Cloudflare가 요청 헤더 전송을 마친 후 오리진이 응답 헤더를 반환하는 데 걸린 시간. Logpush v2에서만 제공됩니다.
      type: bigint
    - name: OriginResponseHTTPExpires
      description: RFC1123 형식의 오리진 'expires' 헤더 값
      type: timestamp
      timeFormats:
        - '%a, %d %b %Y %H:%M:%S %Z'
    - name: OriginResponseHTTPLastModified
      description: RFC1123 형식의 오리진 'last-modified' 헤더 값
      type: timestamp
      timeFormats:
        - '%a, %d %b %Y %H:%M:%S %Z'
    - name: OriginResponseStatus
      description: 오리진 서버가 반환한 상태
      유형: smallint
    - name: OriginResponseTime
      description: 오리진이 엣지에 응답을 반환하는 데 걸린 나노초 수
      type: bigint
    - name: OriginSSLProtocol
      description: 오리진에 연결할 때 사용된 SSL(TLS) 프로토콜
      type: string
    - name: OriginTCPHandshakeDurationMs
      description: 오리진과 TCP 핸드셰이크를 완료하는 데 걸린 시간. 오리진 연결이 재사용된 경우 이 값은 0입니다. Logpush v2에서만 제공됩니다.
      type: bigint
    - name: OriginTLSHandshakeDurationMs
      description: 오리진과 TLS 핸드셰이크를 완료하는 데 걸린 시간. 오리진 연결이 재사용된 경우 이 값은 0입니다. Logpush v2에서만 제공됩니다.
      type: bigint
    - name: ParentRayID
      description: 이 요청이 Worker 스크립트를 사용하여 만들어진 경우 상위 요청의 Ray ID
      type: string
      지표:
        - trace_id
    - name: RayID
      description: 요청의 ID
      type: string
      지표:
        - trace_id
    - name: RequestHeaders
      description: RequestHeaders의 문자열 키-값 쌍
      유형: json
    - name: ResponseHeaders
      description: ResponseHeaders의 문자열 키-값 쌍
      유형: json
    - name: SecurityAction
      description: 종료 조치를 트리거한 보안 룰의 룰 동작(있는 경우)
      type: string
    - name: SecurityActions
      description: Cloudflare 보안 제품이 이 요청에 대해 수행한 동작의 배열. 이 동작과 관련된 개별 보안 제품은 FirewallMatchesSources에서 찾을 수 있고 해당 RuleId는 FirewallMatchesRuleIDs에서 찾을 수 있습니다. 배열의 길이는 FirewallMatchesRuleIDs 및 FirewallMatchesSources와 동일합니다. 가능한 동작: allow | log | simulate | drop | challenge | jschallenge | connectionClose | challengeSolved | challengeFailed | challengeBypassed | jschallengeSolved | jschallengeFailed | jschallengeBypassed | bypass
      type: array
      element:
        type: string
    - name: SecurityLevel
      description: 이 요청 시점에 구성된 보안 수준. IP 평판 시스템의 민감도를 결정하는 데 사용됩니다.
      type: string
    - name: SecurityRuleDescription
      description: 종료 조치를 트리거한 보안 룰의 설명(있는 경우)
      type: string
    - name: SecurityRuleID
      description: 종료 조치를 트리거한 보안 룰의 룰 ID(있는 경우)
      type: string
    - name: SecurityRuleIDs
      description: 요청과 일치한 보안 룰 ID 배열. RuleID와 연관된 방화벽 제품은 FirewallMatchesSources에서 찾을 수 있습니다. 배열의 길이는 FirewallMatchesActions 및 FirewallMatchesSources와 동일합니다.
      type: array
      element:
        type: string
    - name: SecuritySources
      description: 요청과 일치한 Cloudflare 보안 제품 배열. 동일한 제품이 여러 번 나타날 수 있으며 이는 서로 다른 룰 또는 동작이 활성화되었음을 나타냅니다. RuleID는 FirewallMatchesRuleIDs에서, 동작은 FirewallMatchesActions에서 찾을 수 있습니다. 배열의 길이는 FirewallMatchesRuleIDs 및 FirewallMatchesActions와 동일합니다. 가능한 소스: asn | country | ip | ipRange | securityLevel | zoneLockdown | waf | firewallRules | uaBlock | rateLimit | bic | hot | l7ddos | sanitycheck | protect
      type: array
      element:
        type: string
    - name: SmartRouteColoID
      description: Argo Smart Routing이 사용되는 경우 오리진 서버에 연결하는 데 사용된 Cloudflare 데이터센터. Logpush v2에서만 제공됩니다.
      type: bigint
    - name: UpperTierColoID
      description: Tiered Cache가 사용되는 경우 캐시 복사본을 확인한 '상위 티어' 데이터센터. Logpush v2에서만 제공됩니다.
      type: bigint
    - name: WAFAction
      description: WAF가 트리거된 경우 취한 동작
      type: string
    - name: WAFAttackScore
      description: WAF 탐지 모듈이 생성한 전체 요청 점수.
      type: bigint
    - name: WAFFlags
      description: '추가 구성 플래그: simulate (0x1) | null'
      type: string
    - name: WAFMatchedVar
      description: 가장 최근에 매치된 변수의 전체 이름
      type: string
    - name: WAFProfile
      description: low | med | high
      type: string
    - name: WAFRCEAttackScore
      description: RCE 공격에 대한 WAF 점수.
      type: bigint
    - name: WAFRuleID
      description: 적용된 WAF 룰의 ID
      type: string
    - name: WAFRuleMessage
      description: 트리거된 룰과 관련된 룰 메시지
      type: string
    - name: WAFSQLiAttackScore
      description: SQL 인젝션 공격에 대한 WAF 점수.
      type: bigint
    - name: WAFXSSAttackScore
      description: XSS 공격에 대한 WAF 점수.
      type: bigint
    - name: WorkerCPUTime
      description: 워커 실행에 소요된 마이크로초 단위의 시간(있는 경우)
      type: bigint
    - name: WorkerStatus
      description: 워커 데몬에서 반환된 상태
      type: string
    - name: WorkerSubrequest
      description: 이 요청이 워커 서브요청인지 여부
      유형: boolean
    - name: WorkerSubrequestCount
      description: 이 요청을 처리할 때 워커가 발행한 서브요청 수
      type: bigint
    - name: WorkerWallTimeUs
      description: 워커 호출의 시작과 종료 사이에 경과된 실제 시간(마이크로초)
      type: bigint
    - name: ZoneID
      description: 내부 존 ID
      type: bigint
    - name: ZoneName
      description: 존의 사람이 읽을 수 있는 이름(예: cloudflare.com). Logpush v2에서만 제공됩니다.
      type: string
    - name: JA4
      description: SSL/TLS 클라이언트를 프로파일링하는 데 사용되는 JA4 지문.
      type: string
    - name: JA4Signals
      description: 이 JA4 지문에 대해 계산된 요청 간 통계. JA4Signals 필드는 키:값 쌍으로 구성되며 값은 숫자입니다.
      유형: json
    - name: LeakedCredentialCheckResult
      description: 유출된 자격 증명 검사 결과.
      type: string
```

### Cloudflare.Spectrum

Cloudflare UI에서 이벤트 필드를 선택할 때 Panther에서 필요하므로 "Timestamp" 필드를 포함해야 합니다.

참고: [로그 필드 Spectrum 이벤트에 대한 Cloudflare 문서.](https://developers.cloudflare.com/logs/reference/log-fields/#spectrum-events)

```yaml
schema: Cloudflare.Spectrum
description: Cloudflare Spectrum 로그. Cloudflare UI에서 이벤트 필드를 선택할 때 Panther에서 필요하므로 "Timestamp" 필드를 포함해야 합니다.
referenceURL: https://developers.cloudflare.com/logs/log-fields#spectrum-events
필드:
    - name: Application
      description: 이벤트가 발생한 애플리케이션의 고유한 공개 ID
      type: string
    - name: ClientASN
      description: 클라이언트 AS 번호
      type: bigint
    - name: ClientBytes
      description: Spectrum 서비스가 클라이언트로부터 읽은 바이트 수
      type: bigint
    - name: ClientCountry
      description: 클라이언트 IP 주소의 국가
      type: string
    - name: ClientIP
      description: 클라이언트의 IP 주소
      type: string
      지표:
        - ip
    - name: ClientMatchedIpFirewall
      description: 연결이 IP 방화벽 규칙과 일치했는지 여부; UNKNOWN | ALLOW | BLOCK_ERROR | BLOCK_IP | BLOCK_COUNTRY | BLOCK_ASN | WHITELIST_IP | WHITELIST_COUNTRY | WHITELIST_ASN
      type: string
    - name: ClientPort
      description: 클라이언트 포트
      유형: int
    - name: ClientProto
      description: 클라이언트가 사용한 전송 프로토콜; tcp | udp | unix
      type: string
    - name: ClientTcpRtt
      description: 클라이언트와 Spectrum 간의 TCP 왕복 시간(나노초)
      type: bigint
    - name: ClientTlsCipher
      description: 클라이언트와 Spectrum 간에 협상된 암호
      type: string
    - name: ClientTlsClientHelloServerName
      description: 클라이언트가 Spectrum으로 보낸 Client Hello 메시지의 서버 이름
      type: string
    - name: ClientTlsProtocol
      description: 클라이언트와 Spectrum 간에 협상된 TLS 버전; unknown | none | SSLv3 | TLSv1 | TLSv1.1 | TLSv1.2 | TLSv1.3
      type: string
    - name: ClientTlsStatus
      description: 클라이언트에서 Spectrum으로의 TLS 세션 상태; UNKNOWN | OK | INTERNAL_ERROR | INVALID_CONFIG | INVALID_SNI | HANDSHAKE_FAILED | KEYLESS_RPC
      type: string
    - name: ColoCode
      description: 요청을 수신한 데이터 센터의 IATA 공항 코드
      type: string
    - name: ConnectTimestamp
      description: 연결의 양쪽(클라이언트/엣지, 엣지/오리진 또는 다음홉)이 설정된 시점의 타임스탬프
      type: timestamp
      timeFormats:
        - cloudflare
    - name: DisconnectTimestamp
      description: 연결이 종료된 시점의 타임스탬프
      type: timestamp
      timeFormats:
        - cloudflare
    - name: Event
      description: connect | disconnect | clientFiltered | tlsError | resolveOrigin | originError
      type: string
    - name: IpFirewall
      description: 연결 시점에 IP 방화벽이 활성화되었는지 여부
      유형: boolean
    - name: OriginBytes
      description: Spectrum이 오리진에서 읽은 바이트 수
      type: bigint
    - name: OriginIP
      description: 오리진 IP 주소
      type: string
      지표:
        - ip
    - name: OriginPort
      description: 오리진 포트
      유형: int
    - name: OriginProto
      description: 오리진이 사용한 전송 프로토콜; tcp | udp | unix
      type: string
    - name: OriginTcpRtt
      description: Spectrum과 오리진 간의 TCP 왕복 시간(나노초)
      type: bigint
    - name: OriginTlsCipher
      description: Spectrum과 오리진 간에 협상된 암호
      type: string
    - name: OriginTlsFingerprint
      description: 오리진 인증서의 SHA256 해시
      type: string
    - name: OriginTlsMode
      description: 업스트림 연결이 어떻게 암호화되는지; unknown | off | flexible | full | strict
      type: string
    - name: OriginTlsProtocol
      description: Spectrum과 오리진 간에 협상된 TLS 버전; unknown | none | SSLv3 | TLSv1 | TLSv1.1 | TLSv1.2 | TLSv1.3
      type: string
    - name: OriginTlsStatus
      description: Spectrum에서 오리진으로의 TLS 세션 상태; UNKNOWN | OK | INTERNAL_ERROR | INVALID_CONFIG | INVALID_SNI | HANDSHAKE_FAILED | KEYLESS_RPC
      type: string
    - name: ProxyProtocol
      description: 주어진 연결에 적용되는 프록시 프로토콜 형태; off | v1 | v2 | simple
      type: string
    - name: Status
      description: 연결 종료 사유를 나타내는 코드
      type: bigint
    - name: Timestamp
      required: true
      description: 이벤트가 발생한 타임스탬프
      type: timestamp
      timeFormats:
        - cloudflare
      isEventTime: true
```
