Digital Guardian EDR 로그 수집
이 문서에서는 Cloud Run 함수를 통해 Google Cloud Storage V2를 사용하여 Digital Guardian EDR 로그를 Google Security Operations에 수집하는 방법을 설명합니다.
Fortra의 Digital Guardian (이전 명칭: Digital Guardian)은 엔드포인트, 네트워크, 클라우드 애플리케이션 전반에서 시스템, 사용자, 데이터 이벤트를 파악할 수 있는 포괄적인 데이터 손실 방지 및 엔드포인트 탐지 및 대응 플랫폼입니다. Analytics & Reporting Cloud (ARC) 서비스는 전체적인 데이터 보호를 위한 고급 분석, 워크플로, 보고 기능을 제공합니다. Cloud Run 함수는 OAuth 2.0을 사용하여 ARC 내보내기 API에 인증하고, 내보내기 데이터를 가져오고, 북마크를 승인하여 다음 청크로 진행하고, 결과를 NDJSON으로 GCS 버킷에 쓰고, Google SecOps는 GCS V2 피드를 통해 이를 수집합니다.
시작하기 전에
다음 기본 요건이 충족되었는지 확인합니다.
- Google SecOps 인스턴스
- 다음 API가 사용 설정된 Google Cloud 프로젝트
- Cloud Storage
- Cloud Run Functions
- Cloud Scheduler
- Pub/Sub
- Cloud Build
- Cloud Storage 버킷, Cloud Run 함수, Pub/Sub 주제, Cloud Scheduler 작업을 만들고 관리할 수 있는 권한
- Digital Guardian Management Console (DGMC)에 대한 액세스 권한
- Digital Guardian Analytics & Reporting Cloud (ARC) 테넌트 설정에 대한 액세스
- DGMC에서 클라우드 서비스를 구성할 수 있는 관리자 권한
- 유효한 GUID가 있는 DGMC에서 생성된 내보내기 프로필
Google Cloud Storage 버킷 만들기
- Google Cloud 콘솔로 이동합니다.
- 프로젝트를 선택하거나 새 프로젝트를 만듭니다.
- 탐색 메뉴에서 Cloud Storage> 버킷으로 이동합니다.
- 버킷 만들기를 클릭합니다.
다음 구성 세부정보를 제공합니다.
설정 값 버킷 이름 지정 전역적으로 고유한 이름 (예: digitalguardian-edr-logs)을 입력합니다.위치 유형 필요에 따라 선택 (리전, 이중 리전, 멀티 리전) 위치 Google SecOps 인스턴스에 가장 가까운 위치를 선택합니다 (예: us-central1).스토리지 클래스 Standard (자주 액세스하는 로그에 권장) 액세스 제어 균일 (권장) 보호 도구 선택사항: 객체 버전 관리 또는 보관 정책 사용 설정 만들기를 클릭합니다.
Digital Guardian API 사용자 인증 정보 수집
Cloud Run 함수가 Digital Guardian ARC에서 내보내기 데이터를 가져오도록 하려면 API 사용자 인증 정보를 획득하고 내보내기 프로필을 구성해야 합니다.
DGMC에서 API 사용자 인증 정보 가져오기
- Digital Guardian Management Console (DGMC)에 로그인합니다.
- 시스템 > 구성 > 클라우드 서비스로 이동합니다.
API 액세스 섹션에서 다음 값을 찾아 기록합니다.
- API 액세스 ID: OAuth 2.0 인증을 위한 클라이언트 ID입니다.
- API 액세스 보안 비밀번호: OAuth 2.0 인증을 위한 클라이언트 보안 비밀번호입니다.
- 액세스 게이트웨이 기준 URL: API 게이트웨이 엔드포인트 (예:
https://accessgw-usw.msp.digitalguardian.com)입니다. - 인증 서버 URL: OAuth 2.0 토큰 엔드포인트 (예:
https://authsrv.msp.digitalguardian.com/as/token.oauth2)입니다.
내보내기 프로필 만들기 및 구성
- Digital Guardian Management Console (DGMC)에서 Admin > Reports > Export Profiles로 이동합니다.
- 내보내기 프로필 만들기를 클릭하거나 기존 내보내기 프로필을 선택합니다.
- 다음 설정으로 내보내기 프로필을 구성합니다.
- 프로필 이름: 설명이 포함된 이름을 입력합니다 (예:
Google SecOps SIEM Integration). - 데이터 소스: 내보낼 데이터에 따라 이벤트 또는 알림을 선택합니다.
- 내보내기 형식: JSON 병합 테이블을 선택합니다 (SIEM 통합에 권장됨).
- 필드: 내보내기에 포함할 필드를 선택합니다.
- 필터: 내보낸 데이터를 제한하는 필터를 구성합니다 (선택사항).
- 프로필 이름: 설명이 포함된 이름을 입력합니다 (예:
- 저장을 클릭하여 내보내기 프로필을 만듭니다.
저장한 후 목록에서 내보내기 프로필을 찾아 내보내기 프로필 URL 또는 세부정보 페이지에서 GUID를 복사합니다.
사용자 인증 정보 요약 기록
Cloud Run 함수 환경 변수를 구성하기 위해 다음 정보를 저장합니다.
- 클라이언트 ID (API 액세스 ID): DGMC Cloud Services에서 가져옴
- 클라이언트 보안 비밀번호 (API 액세스 보안 비밀번호): DGMC Cloud Services에서 제공
- 승인 서버 URL: 예:
https://authsrv.msp.digitalguardian.com/as/token.oauth2 - 액세스 게이트웨이 기본 URL: 예:
https://accessgw-usw.msp.digitalguardian.com - 내보내기 프로필 GUID: DGMC에서 생성된 내보내기 프로필
API 액세스 테스트
다음 명령어를 실행하여 사용자 인증 정보가 유효한지 확인합니다.
# Step 1: Obtain OAuth 2.0 access token curl -s -X POST \ -d "grant_type=client_credentials&client_id=YOUR_CLIENT_ID&client_secret=YOUR_CLIENT_SECRET&scope=client" \ "https://authsrv.msp.digitalguardian.com/as/token.oauth2"# Step 2: Test export endpoint with the access token curl -s -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ "https://accessgw-usw.msp.digitalguardian.com/rest/1.0/export/YOUR_EXPORT_PROFILE_GUID"성공적인 응답은 내보내기 데이터가 포함된 JSON 문서를 반환합니다. 인증 오류가 표시되면 DGMC Cloud Services에서 API 액세스 ID와 비밀번호를 확인합니다.
Cloud Run 함수의 서비스 계정 만들기
- Google Cloud 콘솔에서 IAM 및 관리자 > 서비스 계정으로 이동합니다.
- 서비스 계정 만들기를 클릭합니다.
- 다음 구성 세부정보를 제공합니다.
- 서비스 계정 이름:
digitalguardian-ingestion(또는 설명이 포함된 이름)을 입력합니다. - 서비스 계정 설명:
Service account for Digital Guardian EDR Cloud Run function to write logs to GCS을 입력합니다.
- 서비스 계정 이름:
- 만들고 계속하기를 클릭합니다.
- 이 서비스 계정에 프로젝트에 대한 액세스 권한 부여 섹션에서 다음 역할을 추가합니다.
- 스토리지 객체 관리자 (Cloud Storage 버킷에서 객체를 읽고 씀)
- Cloud Run 호출자 (Cloud Scheduler가 함수를 호출하도록 허용)
- 계속을 클릭합니다.
완료를 클릭합니다.
Pub/Sub 주제 만들기
Cloud Scheduler가 Pub/Sub 주제를 통해 Cloud Run 함수를 트리거합니다.
- Google Cloud 콘솔에서 Pub/Sub > 주제로 이동합니다.
- 주제 만들기를 클릭합니다.
- 주제 ID 입력란에
digitalguardian-edr-trigger을 입력합니다. - 기본 설정을 그대로 둡니다.
만들기를 클릭합니다.
Cloud Run 함수 만들기
OAuth 2.0 클라이언트 사용자 인증 정보를 사용하여 Digital Guardian ARC에 인증하고, 내보내기 데이터를 가져오고, 북마크를 승인하여 다음 청크로 이동하고, 결과를 NDJSON으로 GCS에 쓰는 Cloud Run 함수를 만듭니다.
함수 소스 파일 준비
Cloud Run 함수 배포를 위해 다음 두 파일을 만듭니다.
requirements.txt
functions-framework==3.* google-cloud-storage==2.* urllib3==2.*main.py
"""Cloud Run function to ingest Digital Guardian EDR logs into GCS.""" import json import os import time import urllib.parse from datetime import datetime, timezone import functions_framework import urllib3 from google.cloud import storage GCS_BUCKET = os.environ["GCS_BUCKET"] GCS_PREFIX = os.environ.get("GCS_PREFIX", "digitalguardian_edr") STATE_KEY = os.environ.get("STATE_KEY", "digitalguardian_edr_state.json") AUTH_SERVER_URL = os.environ["AUTH_SERVER_URL"] ARC_SERVER_URL = os.environ["ARC_SERVER_URL"] CLIENT_ID = os.environ["CLIENT_ID"] CLIENT_SECRET = os.environ["CLIENT_SECRET"] EXPORT_PROFILE_GUID = os.environ["EXPORT_PROFILE_GUID"] MAX_RECORDS = int(os.environ.get("MAX_RECORDS", "10000")) http = urllib3.PoolManager() gcs = storage.Client() def _get_access_token() -> str: """Obtain an OAuth 2.0 access token using client credentials grant.""" body = urllib.parse.urlencode({ "grant_type": "client_credentials", "client_id": CLIENT_ID, "client_secret": CLIENT_SECRET, "scope": "client", }) resp = http.request( "POST", AUTH_SERVER_URL, body=body, headers={"Content-Type": "application/x-www-form-urlencoded"}, ) if resp.status != 200: raise RuntimeError( f"OAuth token request failed: {resp.status} — " f"{resp.data.decode('utf-8')}" ) token_data = json.loads(resp.data.decode("utf-8")) return token_data["access_token"] def _arc_get(token: str, path: str, retries: int = 5) -> dict: """Execute a GET request against the ARC API with retry on 429.""" url = f"{ARC_SERVER_URL}{path}" headers = { "Authorization": f"Bearer {token}", "Accept": "application/json", } backoff = 2 for attempt in range(retries): resp = http.request("GET", url, headers=headers) if resp.status == 200: return json.loads(resp.data.decode("utf-8")) if resp.status == 429: wait = backoff * (2 ** attempt) print( f"Rate limited (429). Retrying in {wait}s " f"(attempt {attempt + 1}/{retries})." ) time.sleep(wait) continue raise RuntimeError( f"ARC API error: {resp.status} — {resp.data.decode('utf-8')}" ) raise RuntimeError( "ARC API rate limit exceeded after maximum retries." ) def _arc_acknowledge(token: str) -> None: """POST to the acknowledge endpoint to advance the export bookmark.""" url = ( f"{ARC_SERVER_URL}/rest/1.0/export/" f"{EXPORT_PROFILE_GUID}/acknowledge" ) headers = { "Authorization": f"Bearer {token}", "Accept": "application/json", } resp = http.request("POST", url, headers=headers) if resp.status not in (200, 204): raise RuntimeError( f"ARC acknowledge failed: {resp.status} — " f"{resp.data.decode('utf-8')}" ) print("Export bookmark acknowledged successfully.") def _load_state() -> dict: """Load the last run state from GCS.""" bucket = gcs.bugcs.bucketUCKET) blob = bucket.blob(f"{GCS_PREFIX}/{STATE_KEY}") if blob.exists(): return json.loads(blob.downlodownload_as_text return {} def _save_state(state: dict) -> None: """Persist run state to GCS.""" bucket = gcs.bugcs.bucketUCKET) blob = bucket.blob(f"{GCS_PREFIX}/{STATE_KEY}") blob.uploadupload_from_string json.dumps(state), content_type="application/json" ) def _fetch_export(token: str) -> list: """Fetch export data from the ARC Export API.""" path = f"/rest/1.0/export/{EXPORT_PROFILE_GUID}" data = _arc_get(token, path) records = data if isinstance(data, list) else data.get("data", []) return records[:MAX_RECORDS] def _write_ndjson(records: list, run_ts: str) -> str: """Write records as NDJSON to GCS and return the blob path.""" bucket = gcs.bugcs.bucketUCKET) blob_path = ( f"{GCS_PREFIX}/year={run_ts[:4]}/month={run_ts[5:7]}/" f"day={run_ts[8:10]}/{run_ts}_export.ndjson" ) blob = bucket.blob(blob_path) ndjson = "\n".join( json.dumps(r, separators=(",", ":")) for r in records ) blob.uploadupload_from_stringn, content_type="application/x-ndjson") return blob_path @functions_framework.cloud_event def main(cloud_event): """Entry point triggered by Pub/Sub via Cloud Scheduler.""" state = _load_state() now = datetime.now(timezone.utc) print("Authenticating to Digital Guardian ARC.") token = _get_access_token() print( f"Fetching export data for profile {EXPORT_PROFILE_GUID}." ) records = _fetch_export(token) if not records: print("No new export data found.") return "OK" run_ts = now.strftime("%Y-%m-%dT%H%M%SZ") blob_path = _write_ndjson(records, run_ts) print( f"Wrote {len(records)} records to " f"gs://{GCS_BUCKET}/{blob_path}." ) _arc_acknowledge(token) state["last_run"] = now.isoformat() state["records_written"] = len(records) _save_state(state) print(f"State updated. last_run={now.isoformat()}.") return "OK"
Cloud Run 함수 배포
- 두 파일 (
main.py및requirements.txt)을 로컬 디렉터리 (예:digitalguardian-function/)에 저장합니다. - Cloud Shell을 열거나
gcloudCLI가 설치된 터미널을 엽니다. 다음 명령어를 실행하여 함수를 배포합니다.
gcloud functions deploy digitalguardian-edr-to-gcs \ --gen2 \ --region=us-central1 \ --runtime=python312 \ --trigger-topic=digitalguardian-edr-trigger \ --entry-point=main \ --memory=512MB \ --timeout=540s \ --service-account=digitalguardian-ingestion@PROJECT_ID.iam.gserviceaccount.com \ --set-env-vars=\ "GCS_BUCKET=digitalguardian-edr-logs",\ "GCS_PREFIX=digitalguardian_edr",\ "STATE_KEY=digitalguardian_edr_state.json",\ "AUTH_SERVER_URL=https://authsrv.msp.digitalguardian.com/as/token.oauth2",\ "ARC_SERVER_URL=https://accessgw-usw.msp.digitalguardian.com",\ "CLIENT_ID=YOUR_CLIENT_ID",\ "CLIENT_SECRET=YOUR_CLIENT_SECRET",\ "EXPORT_PROFILE_GUID=YOUR_EXPORT_PROFILE_GUID",\ "MAX_RECORDS=10000"다음 자리표시자 값을 바꿉니다.
PROJECT_ID: Google Cloud 프로젝트 ID입니다.digitalguardian-edr-logs: GCS 버킷 이름입니다.YOUR_CLIENT_ID: Digital Guardian API 액세스 ID입니다.YOUR_CLIENT_SECRET: Digital Guardian API 액세스 보안 비밀번호입니다.YOUR_EXPORT_PROFILE_GUID: DGMC의 내보내기 프로필 GUID입니다.
함수 상태를 확인하여 배포를 확인합니다.
gcloud functions describe digitalguardian-edr-to-gcs --region=us-central1 --gen2
환경 변수 참조
| 변수 | 필수 | 기본값 | 설명 |
|---|---|---|---|
GCS_BUCKET |
예 | NDJSON 출력을 저장할 GCS 버킷 이름 | |
GCS_PREFIX |
아니요 | digitalguardian_edr |
버킷 내 객체 접두사 (폴더 경로) |
STATE_KEY |
아니요 | digitalguardian_edr_state.json |
프리픽스 내 상태 파일의 BLOB 이름 |
AUTH_SERVER_URL |
예 | OAuth 2.0 승인 서버 URL | |
ARC_SERVER_URL |
예 | ARC 액세스 게이트웨이 기본 URL | |
CLIENT_ID |
예 | DGMC의 API 액세스 ID | |
CLIENT_SECRET |
예 | DGMC의 API 액세스 보안 비밀 | |
EXPORT_PROFILE_GUID |
예 | DGMC에서 프로필 GUID 내보내기 | |
MAX_RECORDS |
아니요 | 10000 |
실행당 쓸 최대 레코드 수 |
Cloud Scheduler 작업 만들기
Cloud Scheduler는 Pub/Sub 주제를 통해 일정한 간격으로 Cloud Run 함수를 트리거합니다.
- Google Cloud 콘솔에서 Cloud Scheduler로 이동합니다.
- 작업 만들기를 클릭합니다.
다음 구성 세부정보를 제공합니다.
- 이름:
digitalguardian-edr-ingestion-schedule를 입력합니다. - 리전: Cloud Run 함수와 동일한 리전을 선택합니다 (예:
us-central1). 빈도:
*/5 * * * *(5분마다)를 입력합니다.시간대: 선호하는 시간대를 선택합니다 (예:
UTC).
- 이름:
계속을 클릭합니다.
실행 구성 섹션에서 다음을 수행합니다.
- 대상 유형: Pub/Sub를 선택합니다.
- 주제:
digitalguardian-edr-trigger를 선택합니다. - 메시지 본문:
{"run": true}를 입력합니다.
계속을 클릭합니다.
선택사항 설정 구성 섹션에서 다음을 수행합니다.
- 최대 재시도 횟수:
3를 입력합니다. - 최소 백오프 지속 시간:
5s을 입력합니다. - 최대 백오프 지속 시간:
60s을 입력합니다.
- 최대 재시도 횟수:
만들기를 클릭합니다.
즉시 테스트를 실행하려면 작업 이름 옆에 있는 점 3개 (...)를 클릭하고 강제 실행을 선택합니다.
Google SecOps 서비스 계정을 가져오고 피드 구성
Google SecOps는 고유한 서비스 계정을 사용하여 GCS 버킷에서 데이터를 읽습니다. 이 서비스 계정에 버킷에 대한 액세스 권한을 부여해야 합니다.
서비스 계정 이메일 가져오기
- SIEM 설정> 피드로 이동합니다.
- 새 피드 추가를 클릭합니다.
- 단일 피드 구성을 클릭합니다.
- 피드 이름 필드에 피드 이름을 입력합니다(예:
Digital Guardian EDR Logs). - 소스 유형으로 Google Cloud Storage V2를 선택합니다.
- 로그 유형으로 Digital Guardian EDR을 선택합니다.
서비스 계정 가져오기를 클릭합니다. 고유한 서비스 계정 이메일이 표시됩니다. 예를 들면 다음과 같습니다.
chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com다음 단계에서 사용할 수 있도록 이 이메일 주소를 복사합니다.
다음을 클릭합니다.
다음 입력 매개변수의 값을 지정합니다.
스토리지 버킷 URL: GCS 버킷 URI를 입력합니다.
gs://digitalguardian-edr-logs/digitalguardian_edr/digitalguardian-edr-logs을 GCS 버킷 이름으로 바꿉니다.digitalguardian_edr을 구성된GCS_PREFIX값으로 바꿉니다.
소스 삭제 옵션: 환경설정에 따라 삭제 옵션을 선택합니다.
- 삭제 안함: 전송 후 파일을 삭제하지 않습니다 (테스트에 권장).
- 전송된 파일 삭제: 전송이 완료되면 파일을 삭제합니다.
전송된 파일 및 빈 디렉터리 삭제: 전송이 완료되면 파일과 빈 디렉터리를 삭제합니다.
최대 파일 기간: 지난 일수 동안 수정된 파일을 포함합니다 (기본값은 180일).
애셋 네임스페이스: 애셋 네임스페이스입니다.
수집 라벨: 이 피드의 이벤트에 적용할 라벨입니다.
다음을 클릭합니다.
확정 화면에서 새 피드 구성을 검토한 다음 제출을 클릭합니다.
Google SecOps 서비스 계정에 IAM 권한 부여
Google SecOps 서비스 계정에는 Cloud Storage 버킷에 대한 스토리지 객체 뷰어 역할이 필요합니다.
- Cloud Storage> 버킷으로 이동합니다.
- 버킷 이름 (예:
digitalguardian-edr-logs)을 클릭합니다. - 권한 탭으로 이동합니다.
- 액세스 권한 부여를 클릭합니다.
- 다음 구성 세부정보를 제공합니다.
- 주 구성원 추가: Google SecOps 서비스 계정 이메일 (예:
chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com)을 붙여넣습니다. - 역할 할당: 스토리지 객체 뷰어를 선택합니다.
- 주 구성원 추가: Google SecOps 서비스 계정 이메일 (예:
저장을 클릭합니다.
UDM 매핑 테이블
| 로그 필드 | UDM 매핑 | 논리 |
|---|---|---|
| 애플리케이션 | target.application | 값이 직접 복사됨 |
| 애플리케이션 | target.process.command_line | 규칙이 Printer와 일치하는 경우 %{Application}으로 설정됩니다. |
| Bytes_Written | network.sent_bytes | 값이 직접 복사되고 uinteger로 변환됨 |
| 카테고리, Computer_Name, Detail | metadata.description | Category == 'Policies'이고 Computer_Name이 비어 있으면 %{Detail}로 설정하고, 그렇지 않으면 grok_parse_failure에서 %{message}로 설정합니다. |
| Command_Line, Command_Line1 | principal.process.command_line | 비어 있지 않은 경우 후행 따옴표를 삭제한 후 Command_Line의 값, 그렇지 않은 경우 후행 따옴표를 삭제한 후 Command_Line1의 값 |
| Computer_Name, source | principal.hostname | 비어 있지 않으면 computerName의 값, 비어 있으면 %{source}로 설정 |
| Destination_Device_Serial_Number, Destination_Device_Serial_Number1 | 따옴표 처리를 위한 grok 패턴을 사용하여 추출됨 | |
| Destination_Directory, Destination_File | target.file.full_path | Destination_Directory와 Destination_File이 모두 비어 있지 않은 경우 연결됨 |
| Destination_Drive_Type | security_result.detection_fields | destination_drive_type_label (키: Destination_Drive_Type, 값: %{Destination_Drive_Type})과 병합됨 |
| Destination_File | target.file.names | Destination_File에서 병합됨 |
| Destination_File_Extension | target.file.mime_type | 값이 직접 복사됨 |
| Dll_SHA1_Hash | target.process.file.sha1 | 소문자로 변환한 후 바로 복사된 값 |
| Email_Address | principal.user.email_addresses | Email_Address에서 병합됨 |
| Email_Sender, Email_Subject | network.email.from | 비어 있지 않은 경우 %{Email_Sender}로 설정 |
| Email_Sender, Email_Subject | network.email.subject | Email_Sender가 비어 있지 않은 경우 제목 (%{Email_Subject})에서 병합됨 |
| File_Extension | principal.process.file.mime_type | 값이 직접 복사됨 |
| IP_Address, source_ip | principal.ip | 비어 있지 않은 경우 source_ip에서 병합되고, 그렇지 않은 경우 IP_Address에서 병합됩니다. |
| Local_Port, source_port | principal.port | 비어 있지 않고 정수로 변환된 경우 source_port의 값, 그렇지 않은 경우 Local_Port의 값(정수로 변환됨) |
| MD5_Checksum | target.process.file.md5 | 소문자로 변환한 후 바로 복사된 값 |
| Network_Direction | network.direction | True인 경우 INBOUND로 설정하고 False인 경우 OUTBOUND로 설정합니다. |
| Process_PID | principal.process.pid | 값이 직접 복사됨 |
| Process_SHA256_Hash | target.process.file.sha256 | 소문자로 변환한 후 바로 복사된 값 |
| Product_Version | metadata.product_version | 값이 직접 복사됨 |
| 프로토콜 | network.ip_protocol | '1'인 경우 ICMP로 설정 |
| Remote_Port | target.port | 값이 직접 복사되고 정수로 변환됨 |
| 규칙 | security_result.rule_name | 값이 직접 복사됨 |
| 규칙 | metadata.event_type | Printer와 일치하면 PROCESS_UNCATEGORIZED로 설정하고, DLP.*와 일치하면 FILE_MOVE로 설정합니다. |
| 심각도 | security_result.severity | 정수로 변환한 후 값이 3 이하이면 LOW, 6 이하이면 MEDIUM, 8 이하이면 HIGH, 10 이하이면 CRITICAL로 설정합니다. |
| 심각도 | security_result.severity_details | 값이 직접 복사됨 |
| Source_Directory, Source_File | src.file.full_path | Source_Directory와 Source_File이 모두 비어 있지 않은 경우 연결됨 |
| Source_Drive_Type | security_result.detection_fields | source_drive_type_label (키: Source_Drive_Type, 값: %{Source_Drive_Type})과 병합됨 |
| Source_File | src.file.names | Source_File에서 병합됨 |
| Source_File_Extension | src.file.mime_type | 값이 직접 복사됨 |
| URL_Path, http_url | target.url | 비어 있지 않으면 http_url의 값, 비어 있으면 URL_Path의 값 |
| User_Name | principal.user.userid | grok 추출 후 userName의 값 |
| User_Name | principal.administrative_domain | grok 추출 후 domainName의 값 |
| Was_Removable | security_result.detection_fields | was_removable_label (키: Was_Removable, 값: %{Was_Removable})과 병합됨 |
| Was_Source_Removable | security_result.detection_fields | was_source_removable_label (키: Was_Source_Removable, 값: %{Was_Source_Removable})과 병합됨 |
| computerName, destination_ip, protocol, source_ip, IP_Address, destination, userName, Process_PID, Category, Computer_Name | metadata.event_type | 처음에는 GENERIC_EVENT로 설정됩니다. 프로토콜이 HTTPS이고 (destination_ip 또는 computerName)인 경우 NETWORK_HTTP, (source_ip 또는 IP_Address) 및 destination_ip인 경우 NETWORK_CONNECTION, userName이 비어 있지 않은 경우 USER_UNCATEGORIZED, Process_PID가 비어 있지 않은 경우 SCAN_PROCESS로 설정됩니다. |
| destination_ip | target.ip | destination_ip에서 병합됨 |
| incidents_url, matched_policies_by_severity | security_result | _sr과 병합됨 (rule_name: %{matched_policies_by_severity}, url_back_to_product: %{incidents_url}) |
| 프로토콜 | network.application_protocol | 프로토콜이 HTTP 또는 HTTPS인 경우 HTTPS로 설정 |
| security_action | security_result.action | security_action에서 병합됨 |
| metadata.product_name | 'Enterprise DLP Platform'으로 설정 | |
| metadata.vendor_name | 'DigitalGuardian'으로 설정 |
도움이 더 필요하신가요? 커뮤니티 회원 및 Google SecOps 전문가에게 문의하여 답변을 받으세요.