Cloudflare WAF 로그 수집
파서 버전: 6.0
다음에서 지원:
Google SecOps
SIEM
이 파서는 Cloudflare 웹 애플리케이션 방화벽 (WAF) JSON 로그에서 필드를 추출하고 통합 데이터 모델 (UDM)로 변환하고 매핑합니다. 다양한 Cloudflare 작업을 처리하여 출력을 UDM 형식으로 구조화하기 전에 메타데이터와 네트워크 정보로 데이터를 보강합니다.
시작하기 전에
다음 기본 요건이 충족되었는지 확인합니다.
- Google SecOps 인스턴스
- Google Cloud에 대한 액세스 권한 관리
- Cloudflare Enterprise 요금제
- Cloudflare에 대한 액세스 권한 관리 자세한 내용은 Cloudflare를 참고하세요.
스토리지 버킷 만들기 Google Cloud
- Google Cloud 콘솔에 로그인합니다.
Cloud Storage 버킷 페이지로 이동합니다.
만들기를 클릭합니다.
버킷을 구성합니다.
- 이름: 버킷 이름 요구사항을 충족하는 고유한 이름을 입력합니다 (예: cloudflare-waf).
- 데이터 저장 위치 선택: 위치를 선택합니다.
- 데이터의 스토리지 클래스 선택: 버킷의 기본 스토리지 클래스를 선택하거나 자동 스토리지 클래스 관리에 자동 클래스를 선택합니다.
- 객체 액세스를 제어하는 방식 선택: 공개 액세스 방지를 적용하지 않으려면 아니요를 선택하고 버킷의 객체에 대한 액세스 제어 모델을 선택합니다.
- 스토리지 클래스: 필요에 따라 선택합니다 (예: 표준).
만들기를 클릭합니다.
Cloudflare IAM 사용자에게 버킷 권한 부여
- Google Cloud에서 스토리지 > 브라우저 > 버킷 > 권한으로 이동합니다.
- 스토리지 객체 관리자 권한이 있는 계정 logpush@cloudflare-data.iam.gserviceaccount.com 을 추가합니다.
Cloudflare UI를 사용하여 WAF 로그의 Logpush 작업 만들기
- Cloudflare에 로그인합니다.
- 분석 및 로그 > Logpush로 이동합니다.
- 로그푸시 작업 만들기를 선택합니다.
- 대상 선택에서 Google Cloud 스토리지를 선택합니다.
- 다음 대상 세부정보를 입력합니다.
- 버킷: Google Cloud 스토리지 버킷 이름
- 경로: 스토리지 컨테이너 내 버킷 위치
- 로그를 일별 하위 폴더로 정리를 선택합니다.
- 계속을 클릭합니다.
- 스토리지에 푸시할 보안 (WAF) 데이터 세트를 선택합니다.
- logpush 작업 구성:
- 작업 이름을 입력합니다.
- 로그가 일치하는 경우 로그에 포함하거나 삭제할 이벤트를 선택할 수 있습니다. 자세한 내용은 필터를 참고하세요. 일부 데이터 세트에는 이 옵션이 없습니다.
- 다음을 전송 필드에서 모든 로그를 저장소 대상으로 푸시하거나 푸시할 로그를 선택할 수 있습니다.
- 제출을 클릭합니다.
피드 설정
피드를 구성하려면 다음 단계를 따르세요.
- SIEM 설정 > 피드로 이동합니다.
- 새 피드 추가를 클릭합니다.
- 다음 페이지에서 단일 피드 구성을 클릭합니다.
- 피드 이름 필드에 피드 이름을 입력합니다 (예: Cloudflare WAF 로그).
- 소스 유형으로 Google Cloud Storage V2를 선택합니다.
- 로그 유형으로 Cloudflare WAF를 선택합니다.
- 서비스 계정 가져오기를 클릭합니다.
- 다음을 클릭합니다.
다음 입력 매개변수의 값을 지정합니다.
- 스토리지 버킷 URI: Cloud Storage URL입니다.
- 소스 삭제 옵션: 환경설정에 따라 삭제 옵션을 선택합니다.
다음을 클릭합니다.
확정 화면에서 새 피드 구성을 검토한 다음 제출을 클릭합니다.
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은 'Metadata type'으로 정적으로 설정됩니다. 이 필드의 값은 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 전문가에게 문의하여 답변을 받으세요.