Netskope 웹 프록시 로그 수집
이 문서에서는 Google Cloud Storage V2를 사용하여 Netskope 웹 프록시 로그를 Google Security Operations로 수집하는 방법을 설명합니다.
Netskope는 웹 트래픽을 실시간으로 검사하고 제어하는 클라우드 네이티브 보안 웹 게이트웨이를 제공합니다. 웹 트랜잭션 (WebTx) 로그는 사용자 ID, 애플리케이션, URL 카테고리, 위협 및 DLP 평결, 네트워크 메타데이터를 비롯하여 Netskope 프록시에서 처리한 모든 HTTP 및 HTTPS 세션의 상세 레코드를 캡처합니다.
시작하기 전에
다음 기본 요건이 충족되었는지 확인합니다.
- Google SecOps 인스턴스
- Cloud Storage API가 사용 설정된 GCP 프로젝트
- GCS 버킷을 만들고 관리할 수 있는 권한
- GCS 버킷의 IAM 정책을 관리할 수 있는 권한
- 관리자 사용자 인증 정보가 있는 Netskope 테넌트에 대한 권한 액세스
옵션 - Google Cloud Storage로 Netskope 로그 스트리밍
테넌트에서 Netskope 로그 스트리밍 구독이 사용 설정된 경우 이 옵션을 사용하세요. Netskope 로그 스트리밍은 WebTx 로그 파일을 240초의 고정된 간격으로 압축된 .gzip 파일로 GCS 버킷에 직접 푸시합니다.
Google Cloud Storage 버킷 만들기
- Google Cloud Console로 이동합니다.
- 프로젝트를 선택하거나 새 프로젝트를 만듭니다.
- 탐색 메뉴에서 Cloud Storage> 버킷으로 이동합니다.
- 버킷 만들기를 클릭합니다.
다음 구성 세부정보를 제공합니다.
설정 값 버킷 이름 지정 전역적으로 고유한 이름 (예: netskope-webtx-logs)을 입력합니다.위치 유형 필요에 따라 선택 (리전, 이중 리전, 멀티 리전) 위치 조직과 가장 가까운 위치를 선택합니다 (예: us-central1).스토리지 클래스 Standard (자주 액세스하는 로그에 권장) 액세스 제어 균일 (권장) 보호 도구 선택사항: 객체 버전 관리 또는 보관 정책 사용 설정 만들기를 클릭합니다.
GCP 서비스 계정 만들기
Netskope 로그 스트리밍에는 GCS 버킷에 대한 쓰기 권한이 있는 GCP 서비스 계정이 필요합니다. 이 서비스 계정의 비공개 키는 로그 파일을 푸시할 때 Netskope에서 인증하는 데 사용됩니다.
- GCP 콘솔에서 IAM 및 관리자 > 서비스 계정으로 이동합니다.
- 서비스 계정 만들기를 클릭합니다.
- 다음 구성 세부정보를 제공합니다.
- 서비스 계정 이름:
netskope-log-streaming을 입력합니다. - 서비스 계정 설명:
Service account for Netskope Log Streaming to push WebTx logs to GCS를 입력합니다.
- 서비스 계정 이름:
- 만들고 계속하기를 클릭합니다.
- 이 서비스 계정에 프로젝트에 대한 액세스 권한 부여 섹션에서 다음 단계를 따르세요.
- 역할 선택을 클릭합니다.
- 스토리지 객체 생성자를 검색하여 선택합니다.
- 계속을 클릭합니다.
- 완료를 클릭합니다.
JSON 키 생성
- IAM 및 관리자 > 서비스 계정에서 서비스 계정
netskope-log-streaming을 클릭합니다. - 키 탭을 선택합니다.
- 키 추가 > 새 키 만들기를 클릭합니다.
- 키 유형으로 JSON을 선택합니다.
- 만들기를 클릭합니다.
- JSON 키 파일이 자동으로 다운로드됩니다. 이 파일을 안전하게 저장하세요.
- 텍스트 편집기에서 JSON 키 파일을 열고
private_key필드를 찾습니다. 다음 섹션에서 이 값이 필요합니다.
GCS 버킷에 대한 쓰기 권한 부여
- Cloud Storage> 버킷으로 이동합니다.
- 버킷 이름 (예:
netskope-webtx-logs)을 클릭합니다. - 권한 탭으로 이동합니다.
- 액세스 권한 부여를 클릭합니다.
- 다음 구성 세부정보를 제공합니다.
- 주 구성원 추가: 서비스 계정 이메일 (예:
netskope-log-streaming@YOUR_PROJECT_ID.iam.gserviceaccount.com)을 입력합니다. - 역할 할당: 스토리지 객체 생성자를 선택합니다.
- 주 구성원 추가: 서비스 계정 이메일 (예:
- 저장을 클릭합니다.
로그 스트림 만들기
- 관리자 사용자 인증 정보로 Netskope 테넌트에 로그인합니다.
- 설정 > 도구 > 로그 스트리밍으로 이동합니다.
- 스트림 만들기를 클릭합니다.
- 이름 필드에 스트림의 사람이 읽을 수 있는 이름을 입력합니다 (예:
Chronicle WebTx GCS). - 대상 유형으로 GCP Cloud Storage를 선택합니다.
다음 구성 세부정보를 제공합니다.
버킷: GCS 버킷의 이름 (예:
netskope-webtx-logs)을 입력합니다.경로 (선택사항): 로그가 저장될 버킷 내 폴더 경로를 입력합니다 (예:
netskope/webtx/{%Y}).비공개 키: 이전 섹션에서 생성된 JSON 키 파일의
private_key값을 입력합니다. 줄바꿈 (\n) 기호와 함께 PEM 형식으로 키를 입력합니다.-----BEGIN PRIVATE KEY-----\nprivate_key_content\n-----END PRIVATE KEY-----\n
전송 옵션을 검토합니다. 푸시 빈도는 240초로 계속됩니다.
저장 (또는 만들기)를 클릭하여 스트림을 활성화합니다.
GCS에서 Netskope WebTx 로그를 수집하도록 Google SecOps에서 피드 구성
Google SecOps 서비스 계정 가져오기
Google SecOps는 고유한 서비스 계정을 사용하여 GCS 버킷에서 데이터를 읽습니다. 이 서비스 계정에 버킷에 대한 액세스 권한을 부여해야 합니다.
- SIEM 설정> 피드로 이동합니다.
- 새 피드 추가를 클릭합니다.
- 단일 피드 구성을 클릭합니다.
- 피드 이름 필드에 피드 이름을 입력합니다(예:
Netskope WebTx Logs). - 소스 유형으로 Google Cloud Storage V2를 선택합니다.
- 로그 유형으로 Netskope 웹 프록시를 선택합니다.
서비스 계정 가져오기를 클릭합니다. 고유한 서비스 계정 이메일이 표시됩니다. 예를 들면 다음과 같습니다.
chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com다음 단계에서 사용할 수 있도록 이 이메일 주소를 복사합니다.
다음을 클릭합니다.
다음 입력 매개변수의 값을 지정합니다.
스토리지 버킷 URL: 다음 접두사 경로를 사용하여 GCS 버킷 URI를 입력합니다.
gs://netskope-webtx-logs/netskope/webtx/- 다음과 같이 바꿉니다.
netskope-webtx-logs: GCS 버킷 이름입니다.netskope/webtx/: Netskope 로그 스트리밍에서 구성된 경로 접두사입니다 (루트의 경우 비워 둠).
- 다음과 같이 바꿉니다.
소스 삭제 옵션: 환경설정에 따라 삭제 옵션을 선택합니다.
- 삭제 안함: 전송 후 파일을 삭제하지 않습니다 (테스트에 권장).
- 전송된 파일 삭제: 전송이 완료되면 파일을 삭제합니다.
전송된 파일 및 빈 디렉터리 삭제: 전송이 완료되면 파일과 빈 디렉터리를 삭제합니다.
최대 파일 기간: 지난 일수 동안 수정된 파일을 포함합니다 (기본값은 180일).
애셋 네임스페이스: 애셋 네임스페이스
수집 라벨: 이 피드의 이벤트에 적용할 라벨입니다.
다음을 클릭합니다.
확정 화면에서 새 피드 구성을 검토한 다음 제출을 클릭합니다.
Google SecOps 서비스 계정에 IAM 권한 부여
Google SecOps 서비스 계정에는 GCS 버킷에 대한 스토리지 객체 뷰어 역할이 필요합니다.
- Cloud Storage> 버킷으로 이동합니다.
- 버킷 이름 (예:
netskope-webtx-logs)을 클릭합니다. - 권한 탭으로 이동합니다.
- 액세스 권한 부여를 클릭합니다.
- 다음 구성 세부정보를 제공합니다.
- 주 구성원 추가: Google SecOps 서비스 계정 이메일 (예:
chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com)을 붙여넣습니다. - 역할 할당: 스토리지 객체 뷰어 선택
- 주 구성원 추가: Google SecOps 서비스 계정 이메일 (예:
- 저장을 클릭합니다.
옵션 - Cloud Exchange Log Shipper를 Google Cloud Storage로
로그 시퍼 모듈이 구성된 Netskope Cloud Exchange 플랫폼이 배포된 경우 이 옵션을 사용합니다. 로그 시퍼는 Netskope 테넌트에서 WebTx 로그를 가져와 압축된 .gzip 파일로 GCS 버킷에 푸시합니다. 그러면 Google SecOps가 Google Cloud Storage V2 피드를 통해 이를 읽습니다.
시작하기 전에 (Cloud Exchange)
이 옵션에 필요한 다음 추가 기본 요건이 충족되었는지 확인합니다.
- 테넌트 플러그인과 로그 시퍼 모듈이 이미 구성된 Netskope Cloud Exchange 테넌트
- 로그 시퍼에 구성된 Netskope CLS 소스 플러그인 (Netskope 테넌트에서 데이터를 가져옴)
- WebTx 로그를 저장하기 위해 생성된 GCS 버킷입니다. 아직 만들지 않았다면 Google Cloud Storage 버킷 만들기의 단계를 따르세요.
- GCS 버킷에 대한 쓰기 액세스 권한이 있는 GCP 서비스 계정 아직 만들지 않은 경우 GCP 서비스 계정 만들기, JSON 키 생성, GCS 버킷에 쓰기 권한 부여의 단계를 따르세요.
GCS 대상 플러그인 구성
- Cloud Exchange에서 Settings > Plugin Store로 이동합니다.
- Google Cloud SCC (Google GCS) 플러그인 상자를 검색하여 선택합니다.
- Configure New Plugin (새 플러그인 구성)을 클릭하거나 새 플러그인 구성을 추가합니다.
- 다음 구성 세부정보를 제공합니다.
- 구성 이름: 설명이 포함된 이름 (예:
GCS WebTx Destination)을 입력합니다. - 매핑: 매핑 파일을 선택합니다. 원본
.gzip파일로 푸시되는 WebTx 로그에는 매핑 변환이 적용되지 않습니다. - 버킷: GCS 버킷의 이름 (예:
netskope-webtx-logs)을 입력합니다. - 경로 (선택사항): 폴더 경로 (예:
netskope/webtx/)를 입력합니다. - 비공개 키: 서비스 계정의 JSON 키 파일에서
private_key값을 입력합니다.
- 구성 이름: 설명이 포함된 이름 (예:
- 저장을 클릭합니다.
- 새 플러그인 구성이 로그 시퍼 > 플러그인 페이지에 표시됩니다.
비즈니스 규칙 구성 (선택사항)
기본적으로 모두 비즈니스 규칙은 모든 알림과 이벤트를 필터링합니다. WebTx 로그만 필터링하려면 새 비즈니스 규칙을 만드세요.
- 로그 시퍼에서 비즈니스 규칙으로 이동합니다.
- 새 규칙 만들기를 클릭합니다.
- 규칙 이름 (예:
WebTx Only)을 입력합니다. - WebTx 데이터만 포함하도록 원하는 필터를 구성합니다.
- 저장을 클릭합니다.
로그 전송 구성
- 로그 시퍼에서 로그 전송으로 이동합니다.
- 로그 전송 구성 추가를 클릭합니다.
- 다음 구성 세부정보를 제공합니다.
- 소스 구성: Netskope CLS 소스 플러그인 (예:
WebTxCLS또는Netskope CLS)을 선택합니다. - 대상 구성: 구성한 GCS 대상 플러그인을 선택합니다 (예:
GCS WebTx Destination). - 비즈니스 규칙: 비즈니스 규칙 (예:
All또는WebTx Only)을 선택합니다.
- 소스 구성: Netskope CLS 소스 플러그인 (예:
저장을 클릭합니다.
이전 데이터를 추가로 가져오려면 로그 전송 작업에서 이전 데이터 가져오기 아이콘을 클릭합니다.
시작 및 종료 기간을 선택하고 가져오기를 클릭합니다.
GCS에서 Netskope WebTx 로그를 수집하도록 Google SecOps에서 피드 구성
Netskope 로그 스트리밍 옵션과 동일한 단계에 따라 Google SecOps 피드를 만들고 IAM 권한을 부여합니다.
- Google SecOps 서비스 계정 가져오기: Google Cloud Storage V2를 소스 유형으로, Netskope 웹 프록시를 로그 유형으로 사용하여 피드를 만듭니다.
- Google SecOps 서비스 계정에 IAM 권한 부여 - Google SecOps 서비스 계정에 GCS 버킷에 대한 스토리지 객체 뷰어 역할 (삭제 옵션을 사용하는 경우 스토리지 객체 관리자)을 부여합니다.
로그 전송 확인
WebTx 로그가 GCS 버킷에 전송되고 있는지 확인하려면 다음 단계를 따르세요.
- Cloud Exchange에서 Log Shipper > Log Delivery로 이동합니다.
- Total Logs/WebTx Sent to External Receiver(외부 수신자에게 전송된 총 로그/WebTx) 및 Total WebTx Sent to Storage Bucket(스토리지 버킷에 전송된 총 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 | 파악된 해당 필드에서 직접 매핑됨 |
| dst_ip | target.asset.ip[]: dst_ip, target.ip[]: dst_ip | 파악된 해당 필드에서 직접 매핑됨 |
| dst_location | target.location.city: dst_location | 파악된 해당 필드에서 직접 매핑됨 |
| dst_region | target.location.state: dst_region | 파악된 해당 필드에서 직접 매핑됨 |
| 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 | 파악된 해당 필드에서 직접 매핑됨 |
| 호스트 이름 | 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 | 파악된 해당 필드에서 직접 매핑됨 |
| 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 | 파악된 해당 필드에서 직접 매핑됨 |
| src_ip | principal.asset.ip[]: src_ip, principal.ip[]: src_ip | 파악된 해당 필드에서 직접 매핑됨 |
| src_location | principal.location.city: src_location | 파악된 해당 필드에서 직접 매핑됨 |
| src_region | principal.location.state: src_region | 파악된 해당 필드에서 직접 매핑됨 |
| 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 | 파악된 해당 필드에서 직접 매핑됨 |
| 시간 | 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 | 파악된 해당 필드에서 직접 매핑됨 |
| version | 매핑되지 않음 | 이 필드는 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 전문가에게 문의하여 답변을 받으세요.