Cloudflare WAF 로그 수집

다음에서 지원:

이 파서는 Cloudflare 웹 애플리케이션 방화벽 (WAF) JSON 로그에서 필드를 추출하고 이를 통합 데이터 모델 (UDM)로 변환하고 매핑합니다. 다양한 Cloudflare 작업을 처리하고, 메타데이터와 네트워크 정보로 데이터를 보강한 후 출력을 UDM 형식으로 구조화합니다.

시작하기 전에

다음 기본 요건이 충족되었는지 확인합니다.

  • Google SecOps 인스턴스
  • Google Cloud에 대한 액세스 권한 관리
  • Cloudflare Enterprise 요금제
  • Cloudflare에 대한 액세스 권한 관리

스토리지 버킷 만들기 Google Cloud

  1. Google Cloud 콘솔에 로그인합니다.
  2. Cloud Storage 버킷 페이지로 이동합니다.

    버킷으로 이동

  3. 만들기를 클릭합니다.

  4. 버킷을 구성합니다.

    • 이름: 버킷 이름 요구사항을 충족하는 고유한 이름을 입력합니다 (예: cloudflare-waf).
    • 데이터 저장 위치 선택: 위치를 선택합니다.
    • 데이터의 스토리지 클래스 선택: 버킷에 기본 스토리지 클래스를 선택하거나, 자동 스토리지 클래스 관리에 자동 클래스를 선택합니다.
    • 객체 액세스를 제어하는 방식 선택: 공개 액세스 방지를 적용하지 않으려면 아니요를 선택하고 버킷의 객체에 대한 액세스 제어 모델을 선택합니다.
    • 스토리지 클래스: 필요에 따라 선택합니다 (예: 표준).
  5. 만들기를 클릭합니다.

Cloudflare IAM 사용자에게 버킷 권한 부여

  1. Google Cloud에서 스토리지 > 브라우저 > 버킷 > 권한으로 이동합니다.
  2. 스토리지 객체 관리자 권한으로 account logpush@cloudflare-data.iam.gserviceaccount.com 를 추가합니다.

Cloudflare UI를 사용하여 WAF 로그의 Logpush 작업 만들기

  1. Cloudflare에 로그인합니다.
  2. 분석 및 로그 > Logpush로 이동합니다.
  3. 로그 푸시 작업 만들기를 선택합니다.
  4. 대상 선택에서 Google Cloud 스토리지를 선택합니다.
  5. 다음 대상 세부정보를 입력합니다.
    • 버킷: Google Cloud 스토리지 버킷 이름
    • 경로: 스토리지 컨테이너 내 버킷 위치
    • 로그를 일별 하위 폴더로 정리를 선택합니다.
  6. 계속을 클릭합니다.
  1. 스토리지로 푸시할 보안 (WAF) 데이터 세트를 선택합니다.
  2. logpush 작업을 구성합니다.
    • 작업 이름을 입력합니다.
    • '로그가 일치하는 경우'에서 로그에 포함하거나 삭제할 이벤트를 선택할 수 있습니다. 자세한 내용은 필터를 참고하세요. 일부 데이터 세트에서는 이 옵션을 사용할 수 없습니다.
    • 다음 항목 보내기 필드에서 모든 로그를 저장소 대상으로 푸시하거나 푸시할 로그를 선택할 수 있습니다.
  3. 제출을 클릭합니다.

피드 설정

피드를 구성하려면 다음 단계를 따르세요.

  1. SIEM 설정 > 피드로 이동합니다.
  2. 새 피드 추가를 클릭합니다.
  3. 다음 페이지에서 단일 피드 구성을 클릭합니다.
  4. 피드 이름 필드에 피드 이름을 입력합니다 (예: Cloudflare WAF 로그).
  5. 소스 유형으로 Google Cloud Storage V2를 선택합니다.
  6. 로그 유형으로 Cloudflare WAF를 선택합니다.
  7. 서비스 계정 가져오기를 클릭합니다.
  8. 다음을 클릭합니다.
  9. 다음 입력 매개변수의 값을 지정합니다.

    • 스토리지 버킷 URI: Cloud Storage URL입니다.
    • 소스 삭제 옵션: 환경설정에 따라 삭제 옵션을 선택합니다.
  10. 다음을 클릭합니다.

  11. 확정 화면에서 새 피드 구성을 검토한 다음 제출을 클릭합니다.

UDM 매핑 테이블

로그 필드 UDM 매핑 논리
Action security_result.action_details 원시 로그의 Action 값이 이 UDM 필드에 직접 할당됩니다.
Action security_result.action 이 필드의 값은 원시 로그의 Action 필드에서 파생됩니다. Action이 'allow'인 경우 UDM 필드가 ALLOW으로 설정됩니다. Action이 'challengeSolved', 'jschallengeSolved', 'managedchallengenoninteractivesolved' 또는 'managedchallengeinteractivesolved'인 경우 UDM 필드는 ALLOW_WITH_MODIFICATION로 설정됩니다. Action이 'drop', 'block' 또는 'connectionclose'인 경우 UDM 필드가 BLOCK으로 설정됩니다. Action이 'challengefailed' 또는 'jschallengefailed'인 경우 UDM 필드가 FAIL으로 설정됩니다. 그렇지 않으면 UNKNOWN_ACTION로 설정됩니다.
ClientASN network.asn 원시 로그의 ClientASN 값이 문자열로 변환된 후 이 UDM 필드에 직접 할당됩니다.
ClientASNDescription additional.fields.key 키는 'ClientASNDescription'으로 정적으로 설정됩니다.
ClientASNDescription additional.fields.value.string_value 원시 로그의 ClientASNDescription 값이 이 UDM 필드에 직접 할당됩니다.
ClientCountry principal.location.country_or_region 원시 로그의 ClientCountry 값이 이 UDM 필드에 직접 할당됩니다.
ClientIP principal.ip 원시 로그의 ClientIP 값이 이 UDM 필드에 직접 할당됩니다.
ClientRefererHost intermediary.hostname 원시 로그의 ClientRefererHost 값이 이 UDM 필드에 직접 할당됩니다.
ClientRefererPath network.http.referral_url 원시 로그의 ClientRefererPath 값이 이 UDM 필드에 직접 할당됩니다.
ClientRequestHost target.hostname 원시 로그의 ClientRequestHost 값이 이 UDM 필드에 직접 할당됩니다.
ClientRequestMethod network.http.method 원시 로그의 ClientRequestMethod 값이 이 UDM 필드에 직접 할당됩니다.
ClientRequestPath target.file.full_path 원시 로그의 ClientRequestPath 값이 이 UDM 필드에 직접 할당됩니다.
ClientRequestProtocol network.application_protocol ClientRequestProtocol의 프로토콜 부분 (예: 'HTTP/1.1'에서 'HTTP')가 grok을 사용하여 추출되고 대문자로 변환되어 이 UDM 필드에 할당됩니다.
ClientRequestUserAgent network.http.user_agent 원시 로그의 ClientRequestUserAgent 값이 이 UDM 필드에 직접 할당됩니다.
Datetime metadata.event_timestamp 원시 로그의 Datetime 값이 RFC 3339 타임스탬프로 파싱되어 이 UDM 필드에 할당됩니다.
EdgeColoCode additional.fields.key 키는 'EdgeColoCode'로 정적으로 설정됩니다.
EdgeColoCode additional.fields.value.string_value 원시 로그의 EdgeColoCode 값이 이 UDM 필드에 직접 할당됩니다.
EdgeResponseStatus network.http.response_code 원시 로그의 EdgeResponseStatus 값이 이 UDM 필드에 직접 할당되고 정수로 변환됩니다.
Kind metadata.product_event_type 원시 로그의 Kind 값이 이 UDM 필드에 직접 할당됩니다.
Metadata.filter target.resource.attribute.labels.value 원시 로그의 Metadata.filter 값이 target.resource.attribute.labels 내 라벨의 value 필드에 할당됩니다. 이 라벨의 key는 '메타데이터 필터'로 정적으로 설정됩니다.
Metadata.type target.resource.attribute.labels.value 원시 로그의 Metadata.type 값이 target.resource.attribute.labels 내 라벨의 value 필드에 할당됩니다. 이 라벨의 key은 '메타데이터 유형'으로 정적으로 설정됩니다. 이 필드의 값은 ClientIP, ClientRequestHost, app_protocol의 존재 여부와 값을 기반으로 파생됩니다. 구체적인 로직은 파서 코드를 참고하세요. 정적으로 'Cloudflare'로 설정됩니다. 정적으로 'Cloudflare 로그 애그리게이터'로 설정됩니다. 고정적으로 'CLOUDFLARE_WAF'로 설정됩니다.
RayID metadata.product_log_id 원시 로그의 RayID 값이 이 UDM 필드에 직접 할당됩니다.
RuleID security_result.rule_id 원시 로그의 RuleID 값이 이 UDM 필드에 직접 할당됩니다.
Source security_result.rule_name 원시 로그의 Source 값이 이 UDM 필드에 직접 할당됩니다.
timestamp metadata.event_timestamp, events.timestamp 원시 로그의 timestamp 값이 이러한 UDM 필드에 직접 할당됩니다.

도움이 더 필요하신가요? 커뮤니티 회원 및 Google SecOps 전문가로부터 답변을 받으세요.