Netskope 웹 프록시 로그 수집
이 문서에서는 Cloud Storage V2를 사용하여 Netskope 웹 프록시 로그를 Google Security Operations로 수집하는 방법을 설명합니다.
Netskope는 웹 트래픽을 실시간으로 검사하고 제어하는 클라우드 네이티브 보안 웹 게이트웨이를 제공합니다. 웹 트랜잭션(WebTx) 로그는 사용자 ID, 애플리케이션, URL 카테고리, 위협 및 DLP 판정, 네트워크 메타데이터를 포함하여 Netskope 프록시에서 처리하는 모든 HTTP 및 HTTPS 세션의 세부 기록을 캡처합니다.
시작하기 전에
다음 기본 요건이 충족되었는지 확인합니다.
- Google SecOps 인스턴스
- Cloud Storage API가 사용 설정된 Google Cloud 프로젝트
- Cloud Storage 버킷을 만들고 관리할 수 있는 권한
- Cloud Storage 버킷에서 Identity and Access Management(IAM) 정책을 관리할 수 있는 권한
- 관리자 인증 정보를 사용한 Netskope 테넌트에 대한 권한 액세스
옵션 1: Cloud Storage로 Netskope 로그 스트리밍
테넌트에 Netskope 로그 스트리밍 구독이 사용 설정된 경우 이 옵션을 사용합니다. Netskope 로그 스트리밍은 WebTx 로그 파일을 압축된 .gzip 파일로 240초 간격으로 Cloud Storage 버킷에 직접 푸시합니다.
Cloud Storage 버킷 만들기
- Google Cloud 콘솔로 이동합니다.
- 프로젝트를 선택하거나 새 프로젝트를 만듭니다.
- 탐색 메뉴에서 Cloud Storage > 버킷으로 이동합니다.
- 버킷 만들기를 클릭합니다.
다음 구성 세부정보를 제공합니다.
설정 값 버킷 이름 지정 전역적으로 고유한 이름(예: netskope-webtx-logs)을 입력합니다.위치 유형 필요에 따라 선택(리전, 이중 리전, 멀티 리전) 위치 조직과 가장 가까운 위치를 선택합니다(예: us-central1).스토리지 클래스 표준(자주 액세스하는 로그에 권장) 액세스 제어 균일(권장) 보호 도구 선택사항: 객체 버전 관리 또는 보관 정책 사용 설정 만들기를 클릭합니다.
Google Cloud 서비스 계정을 만듭니다.
Netskope 로그 스트리밍에는 Cloud Storage 버킷에 대한 쓰기 권한이 있는 Google Cloud 서비스 계정이 필요합니다. 이 서비스 계정의 JSON 키 파일은 Netskope에서 로그 파일을 푸시할 때 인증하는 데 사용됩니다.
- Google Cloud 콘솔에서 IAM 및 관리자 > 서비스 계정으로 이동합니다.
- 서비스 계정 만들기를 클릭합니다.
- 다음 구성 세부정보를 제공합니다.
- 서비스 계정 이름:
netskope-log-streaming을 입력합니다. - 서비스 계정 설명:
Service account for Netskope Log Streaming to push WebTx logs to GCS을 입력합니다.
- 서비스 계정 이름:
- 만들고 계속하기를 클릭합니다.
- 이 서비스 계정에 프로젝트에 대한 액세스 권한 부여 섹션에서 다음을 수행합니다.
- 역할 선택을 클릭합니다.
- 스토리지 객체 생성자를 검색하여 선택합니다.
- 계속을 클릭합니다.
- 완료를 클릭합니다.
JSON 키 생성
- Google Cloud 콘솔에서 IAM 및 관리자 > 서비스 계정으로 이동하여 서비스 계정
netskope-log-streaming을 클릭합니다. - 키 탭을 선택합니다.
- 키 추가 > 새 키 만들기를 클릭합니다.
- 키 유형으로 JSON을 선택합니다.
- 만들기를 클릭합니다.
JSON 키 파일이 자동으로 다운로드됩니다. 이 파일을 안전하게 저장합니다. 다음 섹션에서 이 파일의 전체 콘텐츠를 Netskope에 붙여넣습니다.
Cloud Storage 버킷에 쓰기 권한 부여
- Google Cloud 콘솔에서 Cloud Storage > 버킷으로 이동합니다.
- 버킷 이름(예:
netskope-webtx-logs)을 클릭합니다. - 권한 탭으로 이동합니다.
- 액세스 권한 부여를 클릭합니다.
- 다음 구성 세부정보를 제공합니다.
- 주 구성원 추가: 서비스 계정 이메일(예:
netskope-log-streaming@YOUR_PROJECT_ID.iam.gserviceaccount.com)을 입력합니다. - 역할 할당: 스토리지 객체 생성자를 선택합니다.
- 주 구성원 추가: 서비스 계정 이메일(예:
저장을 클릭합니다.
로그 스트림 만들기
- 관리자 사용자 인증 정보로 Netskope 테넌트에 로그인합니다.
- 설정 > 도구 > 로그 스트리밍으로 이동합니다.
- 스트림 만들기를 클릭합니다.
- 이름 필드에 인간이 읽을 수 있는 스트림 이름을 입력합니다. 예를 들면
Google SecOps WebTx GCS입니다. - 대상 유형으로 GCP Cloud Storage를 선택합니다.
다음 구성 세부정보를 제공합니다.
버킷: Cloud Storage 버킷의 이름을 입력합니다(예:
netskope-webtx-logs).- 경로(선택사항): 로그가 저장될 버킷 내 폴더 경로를 입력합니다(예: `netskope/webtx/{%Y}`).
비공개 키: 이전 섹션에서 생성된 JSON 키 파일의 전체 콘텐츠를
{로 시작하고}로 끝나는 단일 JSON 객체로 붙여넣습니다. 여기에는type,project_id,private_key_id,private_key,client_email,client_id필드가 포함됩니다.
전송 옵션을 검토합니다. 푸시 빈도는 240초입니다.
저장(또는 만들기)을 클릭하여 스트림을 활성화합니다. Netskope는
netskope-test-file.txt라는 테스트 객체를 버킷에 작성하여 사용자 인증 정보를 검증합니다.
Cloud Storage에서 Netskope WebTx 로그를 수집하도록 Google SecOps에서 피드 구성
Google SecOps 피드를 만들고 IAM 권한을 부여하려면 다음 단계를 따르세요.
Google SecOps 서비스 계정 가져오기
Google SecOps는 고유한 서비스 계정을 사용하여 Cloud Storage 버킷에서 데이터를 읽습니다. 이 서비스 계정에 버킷에 대한 액세스 권한을 부여해야 합니다.
- 설정 > 데이터 관리 > 피드로 이동합니다. SIEM 전용 플랫폼을 사용하는 경우 설정 > 피드로 이동합니다.
- 새 피드 추가를 클릭합니다.
- 단일 피드 구성을 클릭합니다.
- 피드 이름 필드에 피드 이름을 입력합니다(예:
Netskope WebTx Logs). - 소스 유형으로 Google Cloud Storage V2를 선택합니다.
- 로그 유형으로 Netskope 웹 프록시를 선택합니다.
- 서비스 계정 가져오기를 클릭합니다.
고유한 서비스 계정 이메일이 표시됩니다. 예를 들면 다음과 같습니다.
chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com다음 단계에서 사용할 수 있도록 이 이메일 주소를 복사합니다.
다음을 클릭합니다.
다음 입력 파라미터의 값을 지정합니다.
스토리지 버킷 URL: 프리픽스 경로가 있는 Cloud Storage 버킷 URI를 입력합니다.
gs://netskope-webtx-logs/netskope/webtx/- 다음과 같이 바꿉니다.
netskope-webtx-logs: Cloud Storage 버킷 이름입니다.netskope/webtx/: Netskope 로그 스트리밍에 구성된 경로 프리픽스입니다(루트의 경우 비워 둠).
- 다음과 같이 바꿉니다.
소스 삭제 옵션: 환경설정에 따라 삭제 옵션을 선택합니다.
- 파일 삭제 안함: 소스에서 파일을 삭제하지 않습니다(테스트에 권장).
- 전송된 파일 및 빈 디렉터리 삭제: 가져오기가 완료된 후 소스에서 파일과 빈 디렉터리를 삭제합니다.
최대 파일 기간: 지난 며칠 동안 수정된 파일을 포함합니다(기본값은 180일).
애셋 네임스페이스: 애셋 네임스페이스
수집 라벨: 이 피드의 이벤트에 적용할 라벨입니다.
다음을 클릭합니다.
확정 화면에서 새 피드 구성을 검토한 다음 제출을 클릭합니다.
Google SecOps 서비스 계정에 IAM 권한 부여
Google SecOps 서비스 계정에는 Cloud Storage 버킷에 대한 두 가지 역할이 필요합니다. 로그 객체를 읽기 위한 스토리지 객체 뷰어와 버킷 메타데이터를 읽기 위한 버킷 수준 역할입니다.
- Cloud Storage > 버킷으로 이동합니다.
- 버킷 이름(예:
netskope-webtx-logs)을 클릭합니다. - 권한 탭으로 이동합니다.
- 액세스 권한 부여를 클릭합니다.
- 다음 구성 세부정보를 제공합니다.
- 주 구성원 추가: Google SecOps 서비스 계정 이메일(예:
chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com)을 붙여넣습니다. - 역할 할당: 다음을 모두 선택합니다.
- 스토리지 객체 뷰어: 로그 객체를 읽습니다.
- 스토리지 기존 버킷 리더: 버킷 메타데이터를 읽습니다. 전송된 파일 및 빈 디렉터리 삭제 삭제 옵션을 선택한 경우 대신 스토리지 기존 버킷 작성자를 선택합니다. 이 역할은 삭제 권한도 부여합니다.
- 주 구성원 추가: Google SecOps 서비스 계정 이메일(예:
- 저장을 클릭합니다.
옵션 2: Netskope Cloud Exchange Log Shipper를 Cloud Storage로 사용
Netskope Cloud Exchange 플랫폼이 Log Shipper 모듈과 함께 배포된 경우 이 옵션을 사용하세요. 로그 배송업체는 Netskope 테넌트에서 WebTx 로그를 가져와 압축된 .gzip 파일로 Cloud Storage 버킷에 푸시하고, Google SecOps는 Cloud Storage V2 피드를 통해 이를 읽습니다.
시작하기 전에(Cloud Exchange)
이 옵션에 대한 다음 추가 기본 요건이 충족되었는지 확인합니다.
- 테넌트 플러그인과 로그 배송업체 모듈이 이미 구성된 Netskope Cloud Exchange 테넌트
- Log Shipper에 구성된 Netskope CLS 소스 플러그인(Netskope 테넌트에서 데이터를 가져옴)
- WebTx 로그를 저장하기 위해 생성된 Cloud Storage 버킷입니다. 버킷을 만들지 않은 경우 Cloud Storage 버킷 만들기의 단계를 따르세요.
- Cloud Storage 버킷에 대한 쓰기 액세스 권한이 있는 Google Cloud 서비스 계정 아직 만들지 않았다면 Google Cloud 서비스 계정 만들기, JSON 키 생성, Cloud Storage 버킷에 쓰기 권한 부여의 단계를 따르세요.
Cloud Storage 대상 플러그인 구성
- Cloud Exchange에서 설정 > 플러그인 스토어로 이동합니다.
- Google Cloud SCC(Google GCS) 플러그인을 검색하고 선택합니다.
- 새 플러그인 구성을 클릭하거나 새 플러그인 구성을 추가합니다.
- 다음 구성 세부정보를 제공합니다.
- 구성 이름: 설명이 포함된 이름(예:
GCS WebTx Destination)을 입력합니다. - 매핑: 매핑 파일을 선택합니다. 원본
.gzip파일로 푸시되는 WebTx 로그에는 매핑 변환이 적용되지 않습니다. - 버킷: Cloud Storage 버킷의 이름을 입력합니다(예:
netskope-webtx-logs). - 경로(선택사항): 폴더 경로를 입력합니다(예:
netskope/webtx/). - 키 파일:
private_key값뿐만 아니라 서비스 계정 JSON 키 파일의 전체 콘텐츠를 붙여넣습니다.
- 구성 이름: 설명이 포함된 이름(예:
- 저장을 클릭합니다.
- 새 플러그인 구성이 로그 배송 도구 > 플러그인 페이지에 표시됩니다.
비즈니스 규칙 구성(선택사항)
기본적으로 모두 비즈니스 규칙은 모든 알림과 이벤트를 필터링합니다. WebTx 로그를 구체적으로 필터링하려면 새 비즈니스 규칙을 만듭니다.
- 로그 전송 도구에서 비즈니스 규칙로 이동합니다.
- 새 규칙 만들기를 클릭합니다.
- 규칙 이름을 입력합니다(예:
WebTx Only). - WebTx 데이터만 포함하도록 필터를 구성합니다.
- 저장을 클릭합니다.
로그 전송 구성
- 로그 전송기에서 로그 전송으로 이동합니다.
- 로그 전송 구성 추가를 클릭합니다.
- 다음 구성 세부정보를 제공합니다.
- 소스 구성: Netskope CLS 소스 플러그인(예:
WebTxCLS또는Netskope CLS)을 선택합니다. - 대상 구성: 구성한 Cloud Storage 대상 플러그인을 선택합니다(예:
GCS WebTx Destination). - 비즈니스 규칙: 비즈니스 규칙을 선택합니다(예:
All또는WebTx Only).
- 소스 구성: Netskope CLS 소스 플러그인(예:
저장을 클릭합니다.
추가 이전 데이터를 가져오려면 로그 전송 작업에서 이전 데이터 가져오기 아이콘을 클릭합니다.
Historical From(이력 시작일) 및 To(종료일) 기간을 선택하고 Pull(가져오기)을 클릭합니다.
Cloud Storage에서 Netskope WebTx 로그를 수집하도록 Google SecOps에서 피드 구성
Netskope 로그 스트리밍 옵션과 동일한 단계에 따라 Google SecOps 피드를 만들고 IAM 권한을 부여합니다.
- Google SecOps 서비스 계정 검색 — Google Cloud Storage V2를 소스 유형으로, Netskope 웹 프록시를 로그 유형으로 사용하여 피드를 만듭니다.
- Google SecOps 서비스 계정에 IAM 권한 부여 — Cloud Storage 버킷에 대한 스토리지 객체 뷰어 및 스토리지 기존 버킷 리더 역할(삭제 옵션을 사용하는 경우 스토리지 기존 버킷 작성자 사용)을 Google SecOps 서비스 계정에 부여합니다.
로그 전송 확인
WebTx 로그가 Cloud Storage 버킷으로 전송되는지 확인하려면 다음 안내를 따르세요.
- Cloud Exchange에서 로그 전송기 > 로그 전송으로 이동합니다.
- 외부 수신자에게 전송된 총 로그/WebTx 및 스토리지 버킷으로 전송된 총 WebTx 열을 확인하여 데이터가 대상으로 푸시되고 있는지 확인합니다.
- GCS 버킷에서 로그 전송기에 의해
.gzip파일이 작성되고 있는지 확인합니다.
로그 발송자 전역 설정 구성(선택사항)
관리자만 로그 전달자 전역 설정을 변경할 수 있습니다. 가다 설정 > 통나무 운송업자. 일반 및 매핑이라는 두 개의 탭이 있습니다.
일반 탭에서 로그 전송의 재시도 전략을 구성할 수 있습니다.
- 기본값(3회 재시도): 로그 전송에 실패하면 로그 전송 도구에서 로그를 대상으로 푸시하는 시도를 3회 시작합니다. 3번의 재시도가 모두 실패하면 해당 로그 배치가 삭제됩니다.
전송 성공 시까지 재시도: 로그가 전송될 때까지 무제한으로 재시도합니다.
알림, 이벤트, WebTx에 UTF-8 인코딩을 사용 설정하여 UTF-8 인코딩 데이터를 원활하게 처리할 수도 있습니다. 기본적으로 이 기능은 사용 중지되어 있습니다.
UDM 매핑 테이블
| 로그 필드 | UDM 매핑 | 로직 |
|---|---|---|
| applicationType | security_result.detection_fields[].key: "applicationType", security_result.detection_fields[].value: applicationType | 해당 CEF 필드에서 직접 매핑됨 |
| appcategory | security_result.category_details[]: appcategory | 해당 CEF 필드에서 직접 매핑됨 |
| browser | security_result.detection_fields[].key: "browser", security_result.detection_fields[].value: browser | 해당 CEF 필드에서 직접 매핑됨 |
| c-ip | principal.asset.ip[]: c-ip, principal.ip[]: c-ip | 해당 JSON 필드에서 직접 매핑됨 |
| cci | security_result.detection_fields[].key: "cci", security_result.detection_fields[].value: cci | 해당 CEF 필드에서 직접 매핑됨 |
| ccl | security_result.confidence: 파생 값, security_result.confidence_details: ccl | security_result.confidence는 ccl 값에 따라 파생됩니다. 'excellent' 또는 'high'는 HIGH_CONFIDENCE에 매핑되고, 'medium'은 MEDIUM_CONFIDENCE에 매핑되고, 'low' 또는 'poor'는 LOW_CONFIDENCE에 매핑되고, 'unknown' 또는 'not_defined'는 UNKNOWN_CONFIDENCE에 매핑됩니다. security_result.confidence_details는 ccl에서 직접 매핑됩니다. |
| clientBytes | network.sent_bytes: clientBytes | 해당 CEF 필드에서 직접 매핑됨 |
| cs-access-method | additional.fields[].key: "accessMethod", additional.fields[].value.string_value: cs-access-method | 해당 JSON 필드에서 직접 매핑됨 |
| cs-app | additional.fields[].key: "x-cs-app", additional.fields[].value.string_value: cs-app, principal.application: cs-app | 해당 JSON 필드에서 직접 매핑됨 |
| cs-app-activity | additional.fields[].key: "x-cs-app-activity", additional.fields[].value.string_value: cs-app-activity | 해당 JSON 필드에서 직접 매핑됨 |
| cs-app-category | additional.fields[].key: "x-cs-app-category", additional.fields[].value.string_value: cs-app-category | 해당 JSON 필드에서 직접 매핑됨 |
| cs-app-cci | additional.fields[].key: "x-cs-app-cci", additional.fields[].value.string_value: cs-app-cci | 해당 JSON 필드에서 직접 매핑됨 |
| cs-app-ccl | additional.fields[].key: "x-cs-app-ccl", additional.fields[].value.string_value: cs-app-ccl | 해당 JSON 필드에서 직접 매핑됨 |
| cs-app-from-user | additional.fields[].key: "x-cs-app-from-user", additional.fields[].value.string_value: cs-app-from-user, principal.user.email_addresses[]: cs-app-from-user | 해당 JSON 필드에서 직접 매핑됨 |
| cs-app-instance-id | additional.fields[].key: "x-cs-app-instance-id", additional.fields[].value.string_value: cs-app-instance-id | 해당 JSON 필드에서 직접 매핑됨 |
| cs-app-object-name | additional.fields[].key: "x-cs-app-object-name", additional.fields[].value.string_value: cs-app-object-name | 해당 JSON 필드에서 직접 매핑됨 |
| cs-app-object-type | additional.fields[].key: 'x-cs-app-object-type', additional.fields[].value.string_value: cs-app-object-type | 해당 JSON 필드에서 직접 매핑됨 |
| cs-app-suite | additional.fields[].key: "x-cs-app-suite", additional.fields[].value.string_value: cs-app-suite | 해당 JSON 필드에서 직접 매핑됨 |
| cs-app-tags | additional.fields[].key: 'x-cs-app-tags', additional.fields[].value.string_value: cs-app-tags | 해당 JSON 필드에서 직접 매핑됨 |
| cs-bytes | network.sent_bytes: cs-bytes | 해당 JSON 필드에서 직접 매핑됨 |
| cs-content-type | additional.fields[].key: "sc-content-type", additional.fields[].value.string_value: cs-content-type | 해당 JSON 필드에서 직접 매핑됨 |
| cs-dns | target.asset.hostname[]: cs-dns, target.hostname: cs-dns | 해당 JSON 필드에서 직접 매핑됨 |
| cs-host | target.asset.hostname[]: cs-host, target.hostname: cs-host | 해당 JSON 필드에서 직접 매핑됨 |
| cs-method | network.http.method: cs-method | 해당 JSON 필드에서 직접 매핑됨 |
| cs-referer | network.http.referral_url: cs-referer | 해당 JSON 필드에서 직접 매핑됨 |
| cs-uri | additional.fields[].key: "cs-uri", additional.fields[].value.string_value: cs-uri | 해당 JSON 필드에서 직접 매핑됨 |
| cs-uri-path | additional.fields[].key: "x-cs-uri-path", additional.fields[].value.string_value: cs-uri-path | 해당 JSON 필드에서 직접 매핑됨 |
| cs-uri-port | additional.fields[].key: "cs-uri-port", additional.fields[].value.string_value: cs-uri-port | 해당 JSON 필드에서 직접 매핑됨 |
| cs-uri-scheme | network.application_protocol: cs-uri-scheme | 대문자로 변환한 후 해당 JSON 필드에서 직접 매핑됨 |
| cs-user-agent | network.http.parsed_user_agent: 파싱된 사용자 에이전트, network.http.user_agent: cs-user-agent | network.http.parsed_user_agent는 'parseduseragent' 필터를 사용하여 cs-user-agent 필드를 파싱하여 파생됩니다. |
| cs-username | principal.user.userid: cs-username | 해당 JSON 필드에서 직접 매핑됨 |
| 날짜 | metadata.event_timestamp.seconds: 날짜 및 시간 필드의 에포크 초, metadata.event_timestamp.nanos: 0 | 날짜와 시간이 결합되어 에포크 초 및 나노초로 변환됩니다. 나노초는 0으로 설정됩니다. |
| device | intermediary.hostname: device | 해당 CEF 필드에서 직접 매핑됨 |
| dst | target.ip[]: dst | 해당 CEF 필드에서 직접 매핑됨 |
| dst_country | target.location.country_or_region: dst_country | 해당 grok 필드에서 직접 매핑됨 |
| dst_ip | target.asset.ip[]: dst_ip, target.ip[]: dst_ip | 해당 grok 필드에서 직접 매핑됨 |
| dst_location | target.location.city: dst_location | 해당 grok 필드에서 직접 매핑됨 |
| dst_region | target.location.state: dst_region | 해당 grok 필드에서 직접 매핑됨 |
| dst_zip | 매핑되지 않음 | 이 필드는 UDM에 매핑되지 않습니다. |
| duser | target.user.email_addresses[]: duser, target.user.user_display_name: duser | 해당 CEF 필드에서 직접 매핑됨 |
| dvchost | about.hostname: dvchost, target.asset.hostname[]: dvchost, target.hostname: dvchost | 해당 CEF 필드에서 직접 매핑됨 |
| event_timestamp | metadata.event_timestamp.seconds: event_timestamp | 해당 grok 필드에서 직접 매핑됨 |
| 호스트 이름 | target.asset.hostname[]: hostname, target.hostname: hostname | 해당 CEF 필드에서 직접 매핑됨 |
| 문제 ID | security_result.detection_fields[].key: "IncidentID", security_result.detection_fields[].value: IncidentID | 해당 CEF 필드에서 직접 매핑됨 |
| intermediary | intermediary: intermediary | 해당 CEF 필드에서 직접 매핑됨 |
| md5 | target.file.md5: md5 | 해당 CEF 필드에서 직접 매핑됨 |
| 메시지 | 다양한 UDM 필드 | 메시지 필드는 'CEF'가 포함되어 있는지 여부에 따라 파싱됩니다. 일치하는 경우 CEF 로그로 처리됩니다. 그렇지 않으면 공백으로 구분된 문자열 또는 JSON으로 파싱됩니다. |
| mwDetectionEngine | additional.fields[].key: "mwDetectionEngine", additional.fields[].value.string_value: mwDetectionEngine | 해당 CEF 필드에서 직접 매핑됨 |
| mwType | metadata.description: mwType | 해당 CEF 필드에서 직접 매핑됨 |
| os | principal.platform: 파생 값 | 플랫폼은 os 필드에서 파생됩니다. 'Windows'는 WINDOWS에 매핑되고 'MAC'은 MAC에 매핑되며 'LINUX'는 LINUX에 매핑됩니다. |
| 페이지 | network.http.referral_url: page | 해당 CEF 필드에서 직접 매핑됨 |
| 리퍼러 | network.http.referral_url: referer | 해당 CEF 필드에서 직접 매핑됨 |
| requestClientApplication | network.http.parsed_user_agent: 파싱된 사용자 에이전트, network.http.user_agent: requestClientApplication | network.http.parsed_user_agent는 'parseduseragent' 필터를 사용하여 requestClientApplication 필드를 파싱하여 파생됩니다. |
| request_method | network.http.method: request_method | 해당 grok 필드에서 직접 매핑됨 |
| rs-status | additional.fields[].key: 'rs-status', additional.fields[].value.string_value: rs-status, network.http.response_code: rs-status | 해당 JSON 필드에서 직접 매핑됨 |
| s-ip | target.asset.ip[]: s-ip, target.ip[]: s-ip | 해당 JSON 필드에서 직접 매핑됨 |
| sc-bytes | network.received_bytes: sc-bytes | 해당 JSON 필드에서 직접 매핑됨 |
| sc-content-type | additional.fields[].key: "sc-content-type", additional.fields[].value.string_value: sc-content-type | 해당 JSON 필드에서 직접 매핑됨 |
| sc-status | network.http.response_code: sc-status | 해당 JSON 필드에서 직접 매핑됨 |
| serverBytes | network.received_bytes: serverBytes | 해당 CEF 필드에서 직접 매핑됨 |
| sha256 | target.file.sha256: sha256 | 해당 CEF 필드에서 직접 매핑됨 |
| src | principal.ip[]: src | 해당 CEF 필드에서 직접 매핑됨 |
| src_country | principal.location.country_or_region: src_country | 해당 grok 필드에서 직접 매핑됨 |
| src_ip | principal.asset.ip[]: src_ip, principal.ip[]: src_ip | 해당 grok 필드에서 직접 매핑됨 |
| src_location | principal.location.city: src_location | 해당 grok 필드에서 직접 매핑됨 |
| src_region | principal.location.state: src_region | 해당 grok 필드에서 직접 매핑됨 |
| src_latitude | 매핑되지 않음 | 이 필드는 UDM에 매핑되지 않습니다. |
| src_longitude | 매핑되지 않음 | 이 필드는 UDM에 매핑되지 않습니다. |
| src_zip | 매핑되지 않음 | 이 필드는 UDM에 매핑되지 않습니다. |
| suser | principal.user.user_display_name: suser | 해당 CEF 필드에서 직접 매핑됨 |
| target_host | target.asset.hostname[]: target_host, target.hostname: target_host | 해당 grok 필드에서 직접 매핑됨 |
| 시간 | metadata.event_timestamp.seconds: 날짜 및 시간 필드의 에포크 초, metadata.event_timestamp.nanos: 0 | 날짜와 시간이 결합되어 에포크 초 및 나노초로 변환됩니다. 나노초는 0으로 설정됩니다. |
| 타임스탬프 | metadata.event_timestamp.seconds: timestamp | 해당 CEF 필드에서 직접 매핑됨 |
| ts | metadata.event_timestamp.seconds: ts의 에포크 초, metadata.event_timestamp.nanos: 0 | 타임스탬프는 에포크 초 및 나노초로 변환됩니다. 나노초는 0으로 설정됩니다. |
| url | target.url: url | 해당 CEF 필드에서 직접 매핑됨 |
| user_agent | network.http.parsed_user_agent: 파싱된 사용자 에이전트, network.http.user_agent: user_agent | network.http.parsed_user_agent는 'parseduseragent' 필터를 사용하여 user_agent 필드를 파싱하여 파생됩니다. |
| user_key | principal.user.email_addresses[]: user_key | 해당 grok 필드에서 직접 매핑됨 |
| 버전 | 매핑되지 않음 | 이 필드는 UDM에 매핑되지 않습니다. |
| x-c-browser | additional.fields[].key: "x-c-browser", additional.fields[].value.string_value: x-c-browser | 해당 JSON 필드에서 직접 매핑됨 |
| x-c-browser-version | additional.fields[].key: "x-c-browser-version", additional.fields[].value.string_value: x-c-browser-version | 해당 JSON 필드에서 직접 매핑됨 |
| x-c-country | principal.location.country_or_region: x-c-country | 해당 JSON 필드에서 직접 매핑됨 |
| x-c-device | additional.fields[].key: "x-c-device", additional.fields[].value.string_value: x-c-device | 해당 JSON 필드에서 직접 매핑됨 |
| x-c-latitude | principal.location.region_coordinates.latitude: x-c-latitude | 해당 JSON 필드에서 직접 매핑됨 |
| x-c-local-time | security_result.detection_fields[].key: "x-c-local-time", security_result.detection_fields[].value: x-c-local-time | 해당 JSON 필드에서 직접 매핑됨 |
| x-c-location | principal.location.name: x-c-location | 해당 JSON 필드에서 직접 매핑됨 |
| x-c-longitude | principal.location.region_coordinates.longitude: x-c-longitude | 해당 JSON 필드에서 직접 매핑됨 |
| x-c-os | principal.platform: 파생 값 | 플랫폼은 x-c-os 필드에서 파생됩니다. 'Windows'는 WINDOWS에 매핑되고 'MAC'은 MAC에 매핑되며 'LINUX'는 LINUX에 매핑됩니다. |
| x-c-region | principal.location.state: x-c-region | 해당 JSON 필드에서 직접 매핑됨 |
| x-c-zipcode | additional.fields[].key: "x-c-zipcode", additional.fields[].value.string_value: x-c-zipcode | 해당 JSON 필드에서 직접 매핑됨 |
| x-category | additional.fields[].key: "x-category", additional.fields[].value.string_value: x-category | 해당 JSON 필드에서 직접 매핑됨 |
| x-category-id | additional.fields[].key: "x-category-id", additional.fields[].value.string_value: x-category-id | 해당 JSON 필드에서 직접 매핑됨 |
| x-cs-access-method | additional.fields[].key: "accessMethod", additional.fields[].value.string_value: x-cs-access-method | 해당 JSON 필드에서 직접 매핑됨 |
| x-cs-app | principal.application: x-cs-app, additional.fields[].key: 'x-cs-app', additional.fields[].value.string_value: x-cs-app | 해당 JSON 필드에서 직접 매핑됨 |
| x-cs-app-activity | additional.fields[].key: "x-cs-app-activity", additional.fields[].value.string_value: x-cs-app-activity | 해당 JSON 필드에서 직접 매핑됨 |
| x-cs-app-category | additional.fields[].key: "x-cs-app-category", additional.fields[].value.string_value: x-cs-app-category | 해당 JSON 필드에서 직접 매핑됨 |
| x-cs-app-cci | additional.fields[].key: "x-cs-app-cci", additional.fields[].value.string_value: x-cs-app-cci | 해당 JSON 필드에서 직접 매핑됨 |
| x-cs-app-from-user | additional.fields[].key: "x-cs-app-from-user", additional.fields[].value.string_value: x-cs-app-from-user | 해당 JSON 필드에서 직접 매핑됨 |
| x-cs-app-object-id | additional.fields[].key: "x-cs-app-object-id", additional.fields[].value.string_value: x-cs-app-object-id | 해당 JSON 필드에서 직접 매핑됨 |
| x-cs-app-object-name | additional.fields[].key: "x-cs-app-object-name", additional.fields[].value.string_value: x-cs-app-object-name | 해당 JSON 필드에서 직접 매핑됨 |
| x-cs-app-object-type | additional.fields[].key: 'x-cs-app-object-type', additional.fields[].value.string_value: x-cs-app-object-type | 해당 JSON 필드에서 직접 매핑됨 |
| x-cs-app-suite | additional.fields[].key: "x-cs-app-suite", additional.fields[].value.string_value: x-cs-app-suite | 해당 JSON 필드에서 직접 매핑됨 |
| x-cs-app-tags | additional.fields[].key: "x-cs-app-tags", additional.fields[].value.string_value: x-cs-app-tags | 해당 JSON 필드에서 직접 매핑됨 |
| x-cs-app-to-user | additional.fields[].key: "x-cs-app-to-user", additional.fields[].value.string_value: x-cs-app-to-user | 해당 JSON 필드에서 직접 매핑됨 |
| x-cs-dst-ip | security_result.detection_fields[].key: "x-cs-dst-ip", security_result.detection_fields[].value: x-cs-dst-ip, target.asset.ip[]: x-cs-dst-ip, target.ip[]: x-cs-dst-ip | 해당 JSON 필드에서 직접 매핑됨 |
| x-cs-dst-port | security_result.detection_fields[].key: "x-cs-dst-port", security_result.detection_fields[].value: x-cs-dst-port, target.port: x-cs-dst-port | 해당 JSON 필드에서 직접 매핑됨 |
| x-cs-http-version | security_result.detection_fields[].key: "x-cs-http-version", security_result.detection_fields[].value: x-cs-http-version | 해당 JSON 필드에서 직접 매핑됨 |
| x-cs-page-id | additional.fields[].key: "x-cs-page-id", additional.fields[].value.string_value: x-cs-page-id | 해당 JSON 필드에서 직접 매핑됨 |
| x-cs-session-id | network.session_id: x-cs-session-id | 해당 JSON 필드에서 직접 매핑됨 |
| x-cs-site | additional.fields[].key: "x-cs-site", additional.fields[].value.string_value: x-cs-site | 해당 JSON 필드에서 직접 매핑됨 |
| x-cs-sni | network.tls.client.server_name: x-cs-sni | 해당 JSON 필드에서 직접 매핑됨 |
| x-cs-src-ip | principal.asset.ip[]: x-cs-src-ip, principal.ip[]: x-cs-src-ip, security_result.detection_fields[].key: "x-cs-src-ip", security_result.detection_fields[].value: x-cs-src-ip | 해당 JSON 필드에서 직접 매핑됨 |
| x-cs-src-ip-egress | principal.asset.ip[]: x-cs-src-ip-egress, principal.ip[]: x-cs-src-ip-egress, security_result.detection_fields[].key: "x-cs-src-ip-egress", security_result.detection_fields[].value: x-cs-src-ip-egress | 해당 JSON 필드에서 직접 매핑됨 |
| x-cs-src-port | principal.port: x-cs-src-port, security_result.detection_fields[].key: "x-cs-src-port", security_result.detection_fields[].value: x-cs-src-port | 해당 JSON 필드에서 직접 매핑됨 |
| x-cs-ssl-cipher | network.tls.cipher: x-cs-ssl-cipher | 해당 JSON 필드에서 직접 매핑됨 |
| x-cs-ssl-fronting-error | security_result.detection_fields[].key: "x-cs-ssl-fronting-error", security_result.detection_fields[].value: x-cs-ssl-fronting-error | 해당 JSON 필드에서 직접 매핑됨 |
| x-cs-ssl-handshake-error | security_result.detection_fields[].key: "x-cs-ssl-handshake-error", security_result.detection_fields[].value: x-cs-ssl-handshake-error | 해당 JSON 필드에서 직접 매핑됨 |
| x-cs-ssl-ja3 | network.tls.client.ja3: x-cs-ssl-ja3 | 해당 JSON 필드에서 직접 매핑됨 |
| x-cs-ssl-version | network.tls.version: x-cs-ssl-version | 해당 JSON 필드에서 직접 매핑됨 |
| x-cs-timestamp | metadata.event_timestamp.seconds: x-cs-timestamp | 해당 JSON 필드에서 직접 매핑됨 |
| x-cs-traffic-type | additional.fields[].key: "trafficType", additional.fields[].value.string_value: x-cs-traffic-type | 해당 JSON 필드에서 직접 매핑됨 |
| x-cs-tunnel-src-ip | security_result.detection_fields[].key: "x-cs-tunnel-src-ip", security_result.detection_fields[].value: x-cs-tunnel-src-ip | 해당 JSON 필드에서 직접 매핑됨 |
| x-cs-uri-path | additional.fields[].key: "x-cs-uri-path", additional.fields[].value.string_value: x-cs-uri-path | 해당 JSON 필드에서 직접 매핑됨 |
| x-cs-url | target.url: x-cs-url | 해당 JSON 필드에서 직접 매핑됨 |
| x-cs-userip | security_result.detection_fields[].key: "x-cs-userip", security_result.detection_fields[].value: x-cs-userip | 해당 JSON 필드에서 직접 매핑됨 |
| x-other-category | security_result.category_details[]: x-other-category | 해당 JSON 필드에서 직접 매핑됨 |
| x-other-category-id | security_result.detection_fields[].key: "x-other-category-id", security_result.detection_fields[].value: x-other-category-id | 해당 JSON 필드에서 직접 매핑됨 |
| x-policy-action | security_result.action: 파생 값, security_result.action_details: x-policy-action | security_result.action은 x-policy-action을 대문자로 변환하여 파생됩니다. 대문자 값이 'ALLOW' 또는 'BLOCK'인 경우 직접 사용됩니다. 그렇지 않으면 매핑되지 않습니다. security_result.action_details는 x-policy-action에서 직접 매핑됩니다. |
| x-policy-dst-host | security_result.detection_fields[].key: "x-policy-dst-host", security_result.detection_fields[].value: x-policy-dst-host | 해당 JSON 필드에서 직접 매핑됨 |
| x-policy-dst-host-source | security_result.detection_fields[].key: "x-policy-dst-host-source", security_result.detection_fields[].value: x-policy-dst-host-source | 해당 JSON 필드에서 직접 매핑됨 |
| x-policy-dst-ip | security_result.detection_fields[].key: "x-policy-dst-ip", security_result.detection_fields[].value: x-policy-dst-ip | 해당 JSON 필드에서 직접 매핑됨 |
| x-policy-name | security_result.rule_name: x-policy-name | 해당 JSON 필드에서 직접 매핑됨 |
| x-policy-src-ip | security_result.detection_fields[].key: "x-policy-src-ip", security_result.detection_fields[].value: x-policy-src-ip | 해당 JSON 필드에서 직접 매핑됨 |
| x-r-cert-enddate | network.tls.server.certificate.not_after.seconds: x-r-cert-enddate의 에포크 초 | 날짜가 에포크 초로 변환됩니다. |
| x-r-cert-expired | additional.fields[].key: "x-r-cert-expired", additional.fields[].value.string_value: x-r-cert-expired | 해당 JSON 필드에서 직접 매핑됨 |
| x-r-cert-incomplete-chain | additional.fields[].key: "x-r-cert-incomplete-chain", additional.fields[].value.string_value: x-r-cert-incomplete-chain | 해당 JSON 필드에서 직접 매핑됨 |
| x-r-cert-issuer-cn | network.tls.server.certificate.issuer: x-r-cert-issuer-cn | 해당 JSON 필드에서 직접 매핑됨 |
| x-r-cert-mismatch | additional.fields[].key: "x-r-cert-mismatch", additional.fields[].value.string_value: x-r-cert-mismatch | 해당 JSON 필드에서 직접 매핑됨 |
| x-r-cert-revoked | additional.fields[].key: "x-r-cert-revoked", additional.fields[].value.string_value: x-r-cert-revoked | 해당 JSON 필드에서 직접 매핑됨 |
| x-r-cert-self-signed | additional.fields[].key: 'x-r-cert-self-signed', additional.fields[].value.string_value: x-r-cert-self-signed | 해당 JSON 필드에서 직접 매핑됨 |
| x-r-cert-startdate | network.tls.server.certificate.not_before.seconds: x-r-cert-startdate의 에포크 초 | 날짜가 에포크 초로 변환됩니다. |
| x-r-cert-subject-cn | network.tls.server.certificate.subject: x-r-cert-subject-cn | 해당 JSON 필드에서 직접 매핑됨 |
| x-r-cert-untrusted-root | additional.fields[].key: "x-r-cert-untrusted-root", additional.fields[].value.string_value: x-r-cert-untrusted-root | 해당 JSON 필드에서 직접 매핑됨 |
| x-r-cert-valid | additional.fields[].key: "x-r-cert-valid", additional.fields[].value.string_value: x-r-cert-valid | 해당 JSON 필드에서 직접 매핑됨 |
| x-request-id | additional.fields[].key: "requestId", additional.fields[].value.string_value: x-request-id | 해당 JSON 필드에서 직접 매핑됨 |
| x-rs-file-category | additional.fields[].key: "x-rs-file-category", additional.fields[].value.string_value: x-rs-file-category | 해당 JSON 필드에서 직접 매핑됨 |
| x-rs-file-type | additional.fields[].key: "x-rs-file-type", additional.fields[].value.string_value: x-rs-file-type | 해당 JSON 필드에서 직접 매핑됨 |
| x-s-country | target.location.country_or_region: x-s-country | 해당 JSON 필드에서 직접 매핑됨 |
| x-s-dp-name | additional.fields[].key: "x-s-dp-name", additional.fields[].value.string_value: x-s-dp-name | 해당 JSON 필드에서 직접 매핑됨 |
| x-s-latitude | target.location.region_coordinates.latitude: x-s-latitude | 해당 JSON 필드에서 직접 매핑됨 |
| x-s-location | target.location.name: x-s-location | 해당 JSON 필드에서 직접 매핑됨 |
| x-s-longitude | target.location.region_coordinates.longitude: x-s-longitude | 해당 JSON 필드에서 직접 매핑됨 |
| x-s-region | target.location.state: x-s-region | 해당 JSON 필드에서 직접 매핑됨 |
| x-s-zipcode | additional.fields[].key: "x-s-zipcode", additional.fields[].value.string_value: x-s-zipcode | 해당 JSON 필드에서 직접 매핑됨 |
| x-sr-ssl-cipher | security_result.detection_fields[].key: "x-sr-ssl-cipher", security_result.detection_fields[].value: x-sr-ssl-cipher | 해당 JSON 필드에서 직접 매핑됨 |
| x-sr-ssl-client-certificate-error | security_result.detection_fields[].key: "x-sr-ssl-client-certificate-error", security_result.detection_fields[].value: x-sr-ssl-client-certificate-error | 해당 JSON 필드에서 직접 매핑됨 |
| x-sr-ssl-engine-action | security_result.detection_fields[].key: "x-sr-ssl-engine-action", security_result.detection_fields[].value: x-sr-ssl-engine-action | 해당 JSON 필드에서 직접 매핑됨 |
| x-sr-ssl-engine-action-reason | security_result.detection_fields[].key: "x-sr-ssl-engine-action-reason", security_result.detection_fields[].value: x-sr-ssl-engine-action-reason | 해당 JSON 필드에서 직접 매핑됨 |
| x-sr-ssl-handshake-error | security_result.detection_fields[].key: "x-sr-ssl-handshake-error", security_result.detection_fields[].value: x-sr-ssl-handshake-error | 해당 JSON 필드에서 직접 매핑됨 |
| x-sr-ssl-ja3s | network.tls.server.ja3s: x-sr-ssl-ja3s | 해당 JSON 필드에서 직접 매핑됨 |
| x-sr-ssl-malformed-ssl | security_result.detection_fields[].key: "x-sr-ssl-malformed-ssl", security_result.detection_fields[].value: x-sr-ssl-malformed-ssl | 해당 JSON 필드에서 직접 매핑됨 |
| x-sr-ssl-version | security_result.detection_fields[].key: "x-sr-ssl-version", security_result.detection_fields[].value: x-sr-ssl-version | 해당 JSON 필드에서 직접 매핑됨 |
| x-s-custom-signing-ca-error | security_result.detection_fields[].key: "x-s-custom-signing-ca-error", security_result.detection_fields[].value: x-s-custom-signing-ca-error | 해당 JSON 필드에서 직접 매핑됨 |
| x-ssl-bypass | security_result.detection_fields[].key: 'SSL BYPASS', security_result.detection_fields[].value: x-ssl-bypass 또는 x-ssl-bypass-reason | x-ssl-bypass가 'Yes'이고 x-ssl-bypass-reason이 있는 경우 x-ssl-bypass-reason 값이 사용됩니다. 그렇지 않으면 x-ssl-bypass 값이 사용됩니다. |
| x-ssl-policy-action | security_result.detection_fields[].key: "x-ssl-policy-action", security_result.detection_fields[].value: x-ssl-policy-action | 해당 JSON 필드에서 직접 매핑됨 |
| x-ssl-policy-categories | security_result.category_details[]: x-ssl-policy-categories | 해당 JSON 필드에서 직접 매핑됨 |
| x-ssl-policy-dst-host | security_result.detection_fields[].key: "x-ssl-policy-dst-host", security_result.detection_fields[].value: x-ssl-policy-dst-host | 해당 JSON 필드에서 직접 매핑됨 |
| x-ssl-policy-dst-host-source | security_result.detection_fields[].key: "x-ssl-policy-dst-host-source", security_result.detection_fields[].value: x-ssl-policy-dst-host-source | 해당 JSON 필드에서 직접 매핑됨 |
| x-ssl-policy-dst-ip | security_result.detection_fields[].key: "x-ssl-policy-dst-ip", security_result.detection_fields[].value: x-ssl-policy-dst-ip | 해당 JSON 필드에서 직접 매핑됨 |
| x-ssl-policy-name | security_result.rule_name: x-ssl-policy-name | 해당 JSON 필드에서 직접 매핑됨 |
| x-ssl-policy-src-ip | security_result.detection_fields[].key: "x-ssl-policy-src-ip", security_result.detection_fields[].value: x-ssl-policy-src-ip | 해당 JSON 필드에서 직접 매핑됨 |
| x-sr-dst-ip | security_result.detection_fields[].key: "x-sr-dst-ip", security_result.detection_fields[].value: x-sr-dst-ip | 해당 JSON 필드에서 직접 매핑됨 |
| x-sr-dst-port | security_result.detection_fields[].key: "x-sr-dst-port", security_result.detection_fields[].value: x-sr-dst-port | 해당 JSON 필드에서 직접 매핑됨 |
| x-type | additional.fields[].key: "xType", additional.fields[].value.string_value: x-type | 해당 JSON 필드에서 직접 매핑됨 |
| x-transaction-id | additional.fields[].key: "transactionId", additional.fields[].value.string_value: x-transaction-id | 해당 JSON 필드에서 직접 매핑됨 |
| metadata.vendor_name | 'Netskope'로 설정 | |
| metadata.product_name | 아직 없는 경우 'Netskope Webproxy'로 설정합니다. | |
| metadata.log_type | 'NETSKOPE_WEBPROXY'로 설정합니다. |
변경 로그
도움이 더 필요하신가요? 커뮤니티 회원 및 Google SecOps 전문가에게 문의하여 답변을 받으세요.