Cloudflare WAF 로그 수집

다음에서 지원:

이 문서에서는 Google Security Operations 피드를 설정하여 Cloudflare WAF 로그를 수집하는 방법을 설명합니다.

자세한 내용은 Google Security Operations에 데이터 수집을 참조하세요.

수집 라벨은 원시 로그 데이터를 구조화된 UDM 형식으로 정규화하는 파서를 식별합니다. 이 문서의 정보는 CLOUDFLARE_WAF 수집 라벨이 있는 파서에 적용됩니다.

API를 사용하여 Cloudflare WAF 구성

Cloudflare 로그를 활성화한 후 다음 매개변수를 사용하여 통합을 사용 설정합니다.

  • Auth email: Cloudflare 계정 이메일 주소입니다.

  • 인증 키: Cloudflare API 토큰입니다.

  • Zone ID: Cloudflare 영역 ID입니다.

Zone IDAuth Key를 가져오려면 다음 단계를 따르세요.

  1. Cloudflare 대시보드에 로그인합니다.
  2. 모니터링해야 하는 웹사이트를 클릭합니다.
  3. API 키 가져오기를 클릭하여 인증 키를 가져옵니다.
  4. API 토큰을 선택합니다.
  5. 토큰 만들기를 클릭합니다.
  6. 토큰 만들기 페이지에 다음 값을 입력합니다.
    1. 토큰 이름 필드에 토큰 이름을 입력합니다.
    2. 권한 섹션에서 다음을 수행합니다.
      1. 첫 번째, 두 번째, 세 번째 목록에서 각각 영역, 로그, 읽기를 선택합니다.
      2. 추가를 클릭합니다. 첫 번째, 두 번째, 세 번째 목록에서 각각 영역, 분석, 읽기를 선택합니다.
      3. 추가를 클릭합니다. 첫 번째, 두 번째, 세 번째 목록에서 각각 영역, 방화벽 서비스, 읽기를 선택합니다.
      4. 영역 리소스 섹션의 첫 번째 목록에서 포함을 선택하고 두 번째 목록에서 모든 영역을 선택합니다.
  7. 요약으로 계속을 클릭합니다.
  8. 토큰 만들기를 클릭합니다.
  9. Google Security Operations 피드를 구성하는 데 필요한 표시된 토큰을 복사합니다.

Cloudflare 대시보드를 사용하여 Cloudflare WAF 구성

  1. Cloudflare 대시보드에 로그인합니다.
  2. 모니터링해야 하는 웹사이트를 클릭합니다.
  3. 분석 및 로그 > Logpush로 이동합니다.
  4. Logpush 작업 만들기를 선택합니다.
  5. 대상 선택에서 Google Cloud Storage를 선택합니다.
  6. 다음 대상 세부정보를 입력하거나 선택합니다.
    • 버킷 - Google Cloud 버킷 이름
    • 경로: 스토리지 컨테이너 내의 버킷 위치
    • 일일 하위 폴더로 로그 정리 (권장)
    • 버킷에 파일을 업로드할 수 있는 Cloudflare 액세스 권한 부여의 경우 버킷에 Cloudflare IAM이 스토리지 객체 관리자 역할이 있는 사용자로 추가되어 있는지 확인합니다.
    • 대상 세부정보 입력이 완료되면 계속을 선택합니다.
  7. 소유권을 증명하기 위해 Cloudflare에서 지정된 대상에 파일을 전송합니다. 토큰을 찾으려면 소유권 문제 제기 파일의 개요 탭에서 열기 버튼을 선택한 다음 Cloudflare 대시보드에 붙여넣어 버킷에 대한 액세스 권한을 확인합니다. 소유권 토큰을 입력하고 계속을 선택합니다.
  8. 스토리지 서비스에 푸시할 데이터 세트를 선택합니다.
  9. Logpush 작업을 구성합니다.
    • 작업 이름을 입력합니다.
    • 로그 일치 시에서 로그에 포함하거나 로그에서 삭제할 이벤트를 선택합니다. 일부 데이터 세트에서는 이 옵션을 사용할 수 없습니다.
    • 다음 필드 전송에서 모든 로그를 저장소 대상에 푸시하거나 푸시할 로그를 선택적으로 선택합니다.
  10. Logpush 작업 구성을 완료하면 제출을 선택합니다.

Cloudflare WAF 로그를 수집하도록 Google Security Operations에서 피드 구성

  1. SIEM 설정 > 피드를 선택합니다.
  2. 새로 추가를 클릭합니다.
  3. 피드 이름에 고유한 이름을 입력합니다.
  4. 소스 유형으로 Google Cloud Storage를 선택합니다.
  5. 로그 유형으로 Cloudflare WAF를 선택합니다.
  6. 서비스 계정 가져오기를 클릭합니다. Google Security Operations는 Google Security Operations에서 데이터를 수집하는 데 사용하는 고유한 서비스 계정을 제공합니다.
  7. Cloud Storage 객체에 액세스하도록 서비스 계정의 액세스 권한을 구성합니다. 자세한 내용은 Google Security Operations 서비스 계정에 대한 액세스 권한 부여를 참고하세요.
  8. 다음을 클릭합니다.
  9. 다음 입력 매개변수를 구성합니다.
    • 스토리지 버킷 URI
    • URI
    • 소스 삭제 옵션
  10. 다음을 클릭한 후 제출을 클릭합니다.

Google Security Operations 피드에 대한 자세한 내용은 Google Security Operations 피드 문서를 참조하세요. 각 피드 유형의 요구사항은 유형별 피드 구성을 참조하세요.

피드를 만들 때 문제가 발생하면 Google Security Operations 지원팀에 문의하세요.

필드 매핑 참조

이 파서는 Cloudflare 웹 애플리케이션 방화벽 (WAF) JSON 로그에서 필드를 추출하여 통합 데이터 모델 (UDM)로 변환합니다. 이 도구는 네트워크 정보, HTTP 세부정보, 보안 결과, 메타데이터를 비롯한 다양한 로그 필드를 처리하여 Google 보안 운영 내에서 일관된 표현과 분석을 위해 해당 UDM 필드에 매핑합니다.

UDM 매핑 표

로그 필드 UDM 매핑 논리
작업 security_result.action_details 원시 로그 '작업' 필드 값은 security_result.action_details에 매핑됩니다.
작업 security_result.action security_result.action 필드는 '작업' 필드의 값을 기반으로 파생됩니다. '허용'을 ALLOW로 매핑합니다. 'challengeSolved', 'jschallengeSolved', 'managedchallengenoninteractivesolved', 'managedchallengeinteractivesolved'가 ALLOW_WITH_MODIFICATION에 매핑됩니다. 'drop', 'block', 'connectionclose'는 BLOCK에 매핑됩니다. 'challengefailed' 및 'jschallengefailed'는 FAIL에 매핑됩니다. 그 밖의 비어 있지 않은 값 또는 '알 수 없음'은 UNKNOWN_ACTION에 매핑됩니다.
ClientASN network.asn 원시 로그 'ClientASN' 필드 값이 문자열로 변환되고 network.asn에 매핑됩니다.
ClientASNDescription additional.fields.key 'ClientASNDescription'으로 설정합니다.
ClientASNDescription additional.fields.value.string_value 원시 로그 'ClientASNDescription' 필드 값이 additional.fields.value.string_value에 매핑됩니다.
ClientCountry principal.location.country_or_region 원시 로그 'ClientCountry' 필드 값이 principal.location.country_or_region에 매핑됩니다.
ClientIP principal.ip 원시 로그 'ClientIP' 필드 값이 principal.ip에 매핑됩니다.
ClientRefererHost intermediary.hostname 원시 로그 'ClientRefererHost' 필드 값이 intermediary.hostname에 매핑됩니다.
ClientRefererPath network.http.referral_url 원시 로그 'ClientRefererPath' 필드 값은 network.http.referral_url에 매핑됩니다.
ClientRequestMethod network.http.method 원시 로그 'ClientRequestMethod' 필드 값이 network.http.method에 매핑됩니다.
ClientRequestHost target.hostname 원시 로그 'ClientRequestHost' 필드 값이 target.hostname에 매핑됩니다.
ClientRequestPath target.file.full_path 원시 로그 'ClientRequestPath' 필드 값이 비어 있지 않거나 '/'이 아닌 경우 target.file.full_path에 매핑됩니다.
ClientRequestProtocol network.application_protocol 'ClientRequestProtocol' 필드 값의 프로토콜 부분입니다 (예: 'HTTP/1.1'의 'HTTP')가 추출되고 대문자로 변환된 후 network.application_protocol에 매핑됩니다.
ClientRequestUserAgent network.http.user_agent 원시 로그 'ClientRequestUserAgent' 필드 값이 network.http.user_agent에 매핑됩니다.
날짜/시간 metadata.event_timestamp 원시 로그 'Datetime' 필드 값은 RFC 3339 타임스탬프로 파싱되고 metadata.event_timestamp에 매핑됩니다.
EdgeColoCode additional.fields.key 'EdgeColoCode'로 설정합니다.
EdgeColoCode additional.fields.value.string_value 원시 로그 'EdgeColoCode' 필드 값이 additional.fields.value.string_value에 매핑됩니다.
EdgeResponseStatus network.http.response_code 원시 로그 'EdgeResponseStatus' 필드 값이 정수로 변환되고 network.http.response_code에 매핑됩니다.
종류 metadata.product_event_type 원시 로그 'Kind' 필드 값은 metadata.product_event_type에 매핑됩니다.
Metadata.filter target.resource.attribute.labels.key '메타데이터 필터'로 설정합니다.
Metadata.filter target.resource.attribute.labels.value 원시 로그 'Metadata.filter' 필드 값이 target.resource.attribute.labels.value에 매핑됩니다.
Metadata.type target.resource.attribute.labels.key '메타데이터 유형'으로 설정합니다.
Metadata.type target.resource.attribute.labels.value 원시 로그 'Metadata.type' 필드 값이 target.resource.attribute.labels.value에 매핑됩니다.
RayID metadata.product_log_id 원시 로그 'RayID' 필드 값이 metadata.product_log_id에 매핑됩니다.
RuleID security_result.rule_id 원시 로그 'RuleID' 필드 값이 security_result.rule_id에 매핑됩니다.
소스 security_result.rule_name 원시 로그 '소스' 필드 값은 security_result.rule_name에 매핑됩니다.
해당 사항 없음 metadata.vendor_name 'Cloudflare'로 하드코딩되었습니다.
해당 사항 없음 metadata.product_name 'Cloudflare 로그 애그리게이터'로 하드코딩되었습니다.
해당 사항 없음 metadata.log_type 'CLOUDFLARE_WAF'로 하드코딩됩니다.
해당 사항 없음 metadata.event_type 'ClientIP', 'ClientRequestHost'의 존재 여부와 'app_protocol' 값을 기반으로 파서 로직에 의해 결정됩니다. 가능한 값은 NETWORK_HTTP, NETWORK_CONNECTION, STATUS_UPDATE, GENERIC_EVENT입니다.

변경사항

2023-08-30

  • 'ClientRequestPath' 필드를 초기화했습니다.

2023-02-02

  • 이벤트에 병합되기 전에 'security_result' 값을 검증했습니다.

2022-09-16

  • 'Action' 필드가 'security_result.action_details'에 매핑되었습니다.
  • 작업에 'challengeSolved', 'jschallengeSolved', 'managedchallengenoninteractivesolved', 'managedchallengeinteractivesolved'가 포함된 경우 'security_result.action'이 'ALLOW_WITH_MODIFICATION'에 매핑되었습니다.
  • 작업에 'drop', 'block', 'connectionclose'가 포함된 경우 'security_result.action'이 'BLOCK'에 매핑되었습니다.
  • 작업에 'challengefailed', 'jschallengefailed'가 포함된 경우 'security_result.action'이 'FAIL'에 매핑되었습니다.

2022-07-25

  • 설명 - 새로 만든 파서