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