Gmail 로그 수집
파서 버전: 7.0
이 문서에서는 Google Cloud Storage V2를 사용하여 Gmail 로그를 Google Security Operations로 수집하는 방법을 설명합니다.
Gmail은 스팸 및 피싱 차단 기능이 내장된 안전하고 지능적인 이메일을 제공하는 Google Workspace의 이메일 서비스입니다. Gmail 로그는 Gmail 인프라를 통한 이메일 전송, 보안 관련 활동, 메일 흐름에 관한 자세한 정보를 캡처합니다.
시작하기 전에
다음 기본 요건을 충족하는지 확인합니다.
- Google SecOps 인스턴스
- Cloud Storage API 및 BigQuery API가 사용 설정된 GCP 프로젝트
- 적절한 버전(Enterprise Standard, Enterprise Plus, Education Standard 또는 Education Plus)의 Google Workspace 계정
- Google Workspace 관리 콘솔에 대한 최고 관리자 액세스 권한
- GCS 버킷을 만들고 관리할 수 있는 권한
- GCS 버킷에서 IAM 정책을 관리할 수 있는 권한
- BigQuery 예약된 쿼리를 만들 수 있는 권한
- gapps-reports@system.gserviceaccount.com 서비스 계정에 BigQuery 프로젝트의 편집자 역할이 있어야 합니다.
Google Cloud Storage 버킷 만들기
Google Cloud 콘솔 사용
- Google Cloud 콘솔로 이동하세요.
- 프로젝트를 선택하거나 새 프로젝트를 만듭니다.
- 탐색 메뉴에서 Cloud Storage > 버킷으로 이동합니다.
- 버킷 만들기를 클릭합니다.
다음 구성 세부정보를 제공합니다.
설정 값 버킷 이름 지정 전역적으로 고유한 이름(예: gmail-logs-export)을 입력합니다.위치 유형 필요에 따라 선택(리전, 이중 리전, 멀티 리전) 위치 위치를 선택합니다(예: us-central1).스토리지 클래스 표준(자주 액세스하는 로그에 권장) 액세스 제어 균일(권장) 보호 도구 선택사항: 객체 버전 관리 또는 보관 정책 사용 설정 만들기를 클릭합니다.
gcloud 명령줄 도구 사용
또는
gcloud명령어를 사용하여 버킷을 만듭니다.gcloud storage buckets create gs://gmail-logs-export \ --location=us-central1 \ --default-storage-class=STANDARD- 다음과 같이 바꿉니다.
gmail-logs-export: 원하는 버킷 이름(전역적으로 고유함)입니다.us-central1: 선호하는 리전(예:us-central1,europe-west1)
- 다음과 같이 바꿉니다.
BigQuery로 로그를 내보내도록 Google Workspace 구성
Gmail 로그를 포함한 Google Workspace 로그는 통합된 Workspace 로그 및 보고서 기능을 통해 BigQuery로 내보내집니다.
Workspace 로그에 BigQuery Export 사용 설정
- 최고 관리자 계정으로 Google 관리 콘솔에 로그인합니다.
- 메뉴 > 보고 > 데이터 통합으로 이동합니다.
- BigQuery Export 카드를 가리킨 다음 수정을 클릭합니다.
- Google BigQuery로 Google Workspace 데이터 내보내기 사용 설정 체크박스를 선택합니다.
- BigQuery 프로젝트 ID에서 로그를 저장할 프로젝트를 선택합니다.
- 프로젝트 내 새 데이터 세트에서 로그 저장에 사용할 데이터 세트 이름을 입력합니다(예:
workspace_logs). - 선택사항: 데이터 세트를 특정 지리적 위치로 제한 체크박스를 선택하고 메뉴에서 위치를 선택합니다.
저장을 클릭합니다.
내보내기를 사용 설정하면 일반적으로 10분 이내에 활동 로그 이벤트를 사용할 수 있습니다. 데이터는 지정된 데이터 세트의 activity_YYYYMMDD라는 테이블로 내보내집니다.
BigQuery에서 GCS로 내보내는 예약된 쿼리 만들기
반복 일정에 따라 BigQuery에서 Cloud Storage로 Gmail 로그를 자동으로 내보내려면 EXPORT DATA 문을 사용하여 예약된 쿼리를 만듭니다.
BigQuery 콘솔 사용
- Google Cloud 콘솔에서 BigQuery로 이동합니다.
- 왼쪽 탐색 메뉴에서 예약된 쿼리를 클릭합니다.
- 예약된 쿼리 만들기를 클릭합니다.
쿼리 편집기에서 다음 SQL을 입력합니다.
EXPORT DATA OPTIONS( uri='gs://gmail-logs-export/gmail-logs/*.json', format='JSON', overwrite=false ) AS SELECT * FROM `PROJECT_ID.workspace_logs.activity_*` WHERE record_type = 'gmail' AND _TABLE_SUFFIX = FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY))- 다음과 같이 바꿉니다.
gmail-logs-export: GCS 버킷 이름PROJECT_ID: GCP 프로젝트 ID입니다.workspace_logs: BigQuery 데이터 세트 이름
- 다음과 같이 바꿉니다.
일정 옵션 섹션에서 다음을 수행합니다.
- 반복: 시간을 선택합니다.
- 간격:
1를 입력합니다. - 시작일 및 실행 시간: 현재 날짜 및 시간을 선택합니다.
쿼리 결과를 저장할 대상 섹션에서 다음을 수행합니다.
- 데이터 세트: 쿼리 메타데이터의 데이터 세트를 선택합니다(내보낸 데이터 아님).
저장을 클릭합니다.
bq 명령줄 도구 사용
또는
bq명령어를 사용하여 예약된 쿼리를 만듭니다.bq mk \ --transfer_config \ --project_id=PROJECT_ID \ --data_source=scheduled_query \ --display_name='Gmail Logs Export to GCS' \ --schedule='every 1 hours' \ --params='{ "query":"EXPORT DATA OPTIONS(uri=\"gs://gmail-logs-export/gmail-logs/*.json\", format=\"JSON\", overwrite=false) AS SELECT * FROM `PROJECT_ID.workspace_logs.activity_*` WHERE record_type = \"gmail\" AND _TABLE_SUFFIX = FORMAT_DATE(\"%Y%m%d\", DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY))", "destination_table_name_template":"gmail_export_metadata", "write_disposition":"WRITE_TRUNCATE" }'- 다음과 같이 바꿉니다.
PROJECT_ID: GCP 프로젝트 ID입니다.gmail-logs-export: GCS 버킷 이름workspace_logs: BigQuery 데이터 세트 이름
- 다음과 같이 바꿉니다.
Google SecOps 서비스 계정 가져오기
Google SecOps는 고유한 서비스 계정을 사용하여 GCS 버킷에서 데이터를 읽습니다. 이 서비스 계정에 버킷에 대한 액세스 권한을 부여해야 합니다.
Gmail 로그를 수집하도록 Google SecOps에서 피드 구성
- 설정 > 데이터 관리 > 피드로 이동합니다. SIEM 전용 플랫폼을 사용하는 경우 설정 > 피드로 이동합니다.
- 새 피드 추가를 클릭합니다.
- 단일 피드 구성을 클릭합니다.
- 피드 이름 필드에 피드 이름을 입력합니다(예:
Gmail Logs). - 소스 유형으로 Google Cloud Storage V2를 선택합니다.
로그 유형으로 GMAIL 로그를 선택합니다.
서비스 계정 가져오기를 클릭합니다. 고유한 서비스 계정 이메일이 표시됩니다. 예를 들면 다음과 같습니다.
chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com다음 단계에서 사용할 수 있도록 이 이메일 주소를 복사합니다.
다음을 클릭합니다.
다음 입력 파라미터의 값을 지정합니다.
스토리지 버킷 URL: 프리픽스 경로가 있는 GCS 버킷 URI를 입력합니다.
gs://gmail-logs-export/gmail-logs/- 다음과 같이 바꿉니다.
gmail-logs-export: GCS 버킷 이름gmail-logs: 로그가 저장되는 프리픽스/폴더 경로
- 다음과 같이 바꿉니다.
소스 삭제 옵션: 환경설정에 따라 삭제 옵션을 선택합니다.
- 삭제 안함: 전송 후 파일을 삭제하지 않습니다(테스트에 권장).
- 전송된 파일 삭제: 전송이 완료된 후 파일을 삭제합니다.
전송된 파일 및 빈 디렉터리 삭제: 전송이 완료된 후 파일과 빈 디렉터리를 삭제합니다.
최대 파일 기간: 최근 며칠 동안 수정된 파일을 포함합니다. 기본값은 180일입니다.
애셋 네임스페이스: 애셋 네임스페이스입니다.
수집 라벨: 이 피드의 이벤트에 적용할 라벨입니다.
다음을 클릭합니다.
확정 화면에서 새 피드 구성을 검토한 다음 제출을 클릭합니다.
Google SecOps 서비스 계정에 IAM 권한 부여
Google SecOps 서비스 계정에는 GCS 버킷에 대한 스토리지 객체 뷰어 역할이 필요합니다.
Google Cloud 콘솔 사용
- Cloud Storage > 버킷으로 이동합니다.
- 버킷 이름을 클릭합니다.
- 권한 탭으로 이동합니다.
- 액세스 권한 부여를 클릭합니다.
- 다음 구성 세부정보를 제공합니다.
- 주 구성원 추가: Google SecOps 서비스 계정 이메일을 붙여넣습니다.
- 역할 할당: 스토리지 객체 뷰어를 선택합니다.
- 저장을 클릭합니다.
gcloud 명령줄 도구 사용
또는
gcloud명령어를 사용하여 권한을 부여합니다.gcloud storage buckets add-iam-policy-binding gs://gmail-logs-export \ --member="serviceAccount:SECOPS_SERVICE_ACCOUNT_EMAIL" \ --role="roles/storage.objectViewer"- 다음과 같이 바꿉니다.
gmail-logs-export: 버킷 이름입니다.SECOPS_SERVICE_ACCOUNT_EMAIL: Google SecOps 서비스 계정 이메일입니다.
- 다음과 같이 바꿉니다.
gsutil 명령줄 도구 사용(기존)
SecOps 서비스 계정에 Gmail 로그 내보내기 버킷에 대한 객체 뷰어 액세스 권한을 부여합니다.
gsutil iam ch serviceAccount:SECOPS_SERVICE_ACCOUNT_EMAIL:objectViewer \ gs://gmail-logs-export
권한 확인
권한이 올바르게 부여되었는지 확인하려면 다음 단계를 따르세요.
gcloud storage buckets get-iam-policy gs://gmail-logs-export \ --flatten="bindings[].members" \ --filter="bindings.role:roles/storage.objectViewer"
출력에 Google SecOps 서비스 계정 이메일이 표시됩니다.
UDM 매핑 테이블
| 로그 필드 | UDM 매핑 | 로직 |
|---|---|---|
| attachment.file_extension_type, attachment.sha256, attachment.file_name, domains | 정보 | 첨부파일 세부정보 및 링크 도메인과 병합됨 |
| message_info.post_delivery_info.action_type, gmail.message_info.post_delivery_info.action_type, event_info.mail_event_type, gmail.event_info.mail_event_type, tok.product_bucket, tok.scope_name, record_type, token.client_type, message_info.num_message_attachments, gmail.message_info.num_message_attachments | additional.fields | 다양한 추가 메타데이터 필드와 병합됨 |
| action_type, description, rule_id | metadata.description | action_type 값, 설명 또는 '불쾌감을 주는 콘텐츠'(rule_id == 7인 경우)를 기반으로 특정 설명으로 설정합니다. |
| metadata.event_type | "EMAIL_TRANSACTION"으로 설정하세요. | |
| event_name | metadata.product_event_type | 값이 직접 복사됨 |
| metadata.product_name | 'GMAIL'로 설정합니다. | |
| metadata.vendor_name | 'Google'로 설정 | |
| __incoming_message, __outcoming_message | network.direction | 수신 메시지가 감지되면 'INBOUND'로 설정되고 발신 메시지가 감지되면 'OUTBOUND'로 설정됩니다. |
| destination.address | network.email.cc | 색인이 0보다 큰 대상 주소에서 병합됨 |
| message_info.source.from_header_address, message_info.source.address | network.email.from | 비어 있지 않은 경우 from_header_address의 값, 그렇지 않으면 source.address의 값 |
| message_info.rfc2822_message_id, gmail.message_info.rfc2822_message_id | network.email.mail_id | grok을 사용하여 < >를 삭제하고 rfc2822_message_id에서 추출됨 |
| message_info.subject, gmail.message_info.subject | network.email.subject | message_info.subject의 값(비어 있지 않은 경우), 그렇지 않으면 gmail.message_info.subject |
| destination.address | network.email.to | 첫 번째 목적지 주소에서 병합됨 |
| network.ip_protocol | 'TCP'로 설정 | |
| _payload_size | network.received_bytes | 수신 메시지가 있는 경우 _payload_size로 설정 |
| _payload_size | network.sent_bytes | 발신 메시지인 경우 _payload_size로 설정 |
| token.app_name, message_info.source.service, message_info.source.selector, gmail.message_info.source.service, gmail.message_info.source.selector | principal.application | 비어 있지 않은 경우 token.app_name의 값이고, 비어 있는 경우 source.service 및 source.selector에서 연결됩니다. |
| message_info.connection_info.client_host_zone, gmail.message_info.connection_info.client_host_zone | principal.asset.hostname | client_host_zone의 값입니다. |
| client_ip | principal.asset.ip | 값이 직접 복사됨 |
| message_info.connection_info.client_host_zone, gmail.message_info.connection_info.client_host_zone | principal.hostname | client_host_zone의 값입니다. |
| client_ip | principal.ip | 값이 직접 복사됨 |
| message_info.connection_info.ip_geo_country, gmail.message_info.connection_info.ip_geo_country | principal.location.country_or_region | ip_geo_country의 값입니다. |
| email, source_address | principal.user.email_addresses | email_address 및 source_address에서 병합됨 |
| token.client_id | principal.user.group_identifiers | 값이 직접 복사됨 |
| message_info.source.from_header_displayname, gmail.message_info.source.from_header_displayname | principal.user.user_display_name | from_header_displayname의 값입니다. |
| source_address | principal.user.userid | 값이 직접 복사됨 |
| action | security_result.action | 값이 직접 복사됨 |
| 카테고리 | security_result.category | 값이 직접 복사됨 |
| category_details | security_result.category_details | 값이 직접 복사됨 |
| message_info.connection_info.smtp_response_reason, gmail.message_info.connection_info.smtp_response_reason, rule_description, reason | security_result.description | SMTP 응답 이유, 규칙 설명 또는 분류 이유로 설정 |
| stringMatch.predefined_detector_name, stringMatch.matched_string, stringMatch.match_expression, stringMatch.source, stringMatch.type | security_result.detection_fields | 감지 필드 객체와 병합됨 |
| rule_id | security_result.rule_id | 값이 직접 복사됨 |
| rule_name | security_result.rule_name | 값이 직접 복사됨 |
| _err_summary, rule_id, description | security_result.summary | 오류 요약, 규칙별 요약 또는 설명으로 설정 |
| _target_host | target.administrative_domain | 값이 직접 복사됨 |
| message_info.destination.0.service, message_info.destination.0.selector, gmail.message_info.destination.0.service, gmail.message_info.destination.0.selector | target.application | 서비스 및 선택기에서 연결됨 |
gmail.message_info.link_domain |
about.labels |
변경 로그에서 매핑됨 |
gmail.message_info.description |
metadata.description |
변경 로그에서 매핑됨 |
gmail.message_info.attachment.sha256 |
about.file.sha256 |
변경 로그에서 매핑됨 |
gmail.message_info.destination.address |
network.email.to |
변경 로그에서 매핑됨 |
gmail.message_info.attachment.file_name |
about.file.full_path |
변경 로그에서 매핑됨 |
gmail.message_info.source.from_header_address |
network.email.from |
변경 로그에서 매핑됨 |
gmail.message_info.attachment.file_extension_type |
about.file.mime_type |
변경 로그에서 매핑됨 |
gmail.message_info.triggered_rule_info.rule_type |
security_result.rule_id |
변경 로그에서 매핑됨 |
gmail.message_info.triggered_rule_info.rule_name |
security_result.rule_name |
변경 로그에서 매핑됨 |
gmail.message_info.source.service", "gmail.message_info.source.selector |
principal.application |
변경 로그에서 매핑됨 |
gmail.message_info.payload_size |
network.sent_bytes |
변경 로그에서 매핑됨 |
gmail.message_info.payload_size |
network.received_bytes |
변경 로그에서 매핑됨 |
gmail.message_info.destination.0.service", "gmail.message_info.destination.0.selector |
target.application |
변경 로그에서 매핑됨 |
gmail.message_info.post_delivery_info.action_type", "gmail.message_info.num_message_attachments", and "gmail.event_info.mail_event_type |
additional.fields |
변경 로그에서 매핑됨 |
event_info.success |
security_result.action |
변경 로그에서 매핑됨 |
attachment.file_name |
about.file.full_path |
변경 로그에서 매핑됨 |
message_info.post_delivery_info.action_type", "message_info.post_delivery_info.interaction.link_url", "event_info.mail_event_type |
additional.fields |
변경 로그에서 매핑됨 |
변경 로그
도움이 더 필요하신가요? 커뮤니티 회원 및 Google SecOps 전문가에게 문의하여 답변을 받으세요.