Cloudflare WAF 로그 수집
다음에서 지원:
Google SecOps
SIEM
이 파서는 Cloudflare 웹 애플리케이션 방화벽 (WAF) JSON 로그에서 필드를 추출하고 이를 통합 데이터 모델 (UDM)로 변환하고 매핑합니다. 다양한 Cloudflare 작업을 처리하고, 메타데이터와 네트워크 정보로 데이터를 보강한 후 출력을 UDM 형식으로 구조화합니다.
시작하기 전에
다음 기본 요건이 충족되었는지 확인합니다.
- Google SecOps 인스턴스
- Google Cloud에 대한 액세스 권한 관리
- Cloudflare Enterprise 요금제
- Cloudflare에 대한 액세스 권한 관리
스토리지 버킷 만들기 Google Cloud
- Google Cloud 콘솔에 로그인합니다.
Cloud Storage 버킷 페이지로 이동합니다.
만들기를 클릭합니다.
버킷을 구성합니다.
- 이름: 버킷 이름 요구사항을 충족하는 고유한 이름을 입력합니다 (예: cloudflare-waf).
- 데이터 저장 위치 선택: 위치를 선택합니다.
- 데이터의 스토리지 클래스 선택: 버킷에 기본 스토리지 클래스를 선택하거나, 자동 스토리지 클래스 관리에 자동 클래스를 선택합니다.
- 객체 액세스를 제어하는 방식 선택: 공개 액세스 방지를 적용하지 않으려면 아니요를 선택하고 버킷의 객체에 대한 액세스 제어 모델을 선택합니다.
- 스토리지 클래스: 필요에 따라 선택합니다 (예: 표준).
만들기를 클릭합니다.
Cloudflare IAM 사용자에게 버킷 권한 부여
- Google Cloud에서 스토리지 > 브라우저 > 버킷 > 권한으로 이동합니다.
- 스토리지 객체 관리자 권한으로 account 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 은 '메타데이터 유형'으로 정적으로 설정됩니다. 이 필드의 값은 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 전문가로부터 답변을 받으세요.