Gmail 로그 수집

다음에서 지원:

이 문서에서는 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 콘솔 사용

  1. Google Cloud Console로 이동합니다.
  2. 프로젝트를 선택하거나 새 프로젝트를 만듭니다.
  3. 탐색 메뉴에서 Cloud Storage> 버킷으로 이동합니다.
  4. 버킷 만들기를 클릭합니다.
  5. 다음 구성 세부정보를 제공합니다.

    설정
    버킷 이름 지정 전역적으로 고유한 이름 (예: gmail-logs-export)을 입력합니다.
    위치 유형 필요에 따라 선택 (리전, 이중 리전, 멀티 리전)
    위치 위치를 선택합니다 (예: us-central1).
    스토리지 클래스 Standard (자주 액세스하는 로그에 권장)
    액세스 제어 균일 (권장)
    보호 도구 선택사항: 객체 버전 관리 또는 보관 정책 사용 설정
  6. 만들기를 클릭합니다.

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 내보내기 사용 설정

  1. 최고 관리자 계정으로 Google 관리 콘솔에 로그인합니다.
  2. 메뉴 > 보고 > 데이터 통합으로 이동합니다.
  3. BigQuery Export 카드를 가리킨 다음 수정을 클릭합니다.
  4. Google BigQuery로 Google Workspace 데이터 내보내기 사용 설정 체크박스를 선택합니다.
  5. BigQuery 프로젝트 ID에서 로그를 저장할 프로젝트를 선택합니다.
  6. 프로젝트 내 새 데이터 세트에서 로그 저장에 사용할 데이터 세트 이름을 입력합니다 (예: workspace_logs).
  7. 선택사항: 데이터 세트를 특정 지리적 위치로 제한 체크박스를 선택하고 메뉴에서 위치를 선택합니다.
  8. 저장을 클릭합니다.

내보내기를 사용 설정하면 일반적으로 10분 이내에 활동 로그 이벤트를 사용할 수 있습니다. 데이터는 지정된 데이터 세트의 activity_YYYYMMDD라는 테이블로 내보내집니다.

BigQuery에서 GCS로 내보내기 위한 예약 쿼리 만들기

BigQuery에서 Gmail 로그를 Cloud Storage로 반복적으로 자동 내보내려면 EXPORT DATA 문을 사용하여 예약된 쿼리를 만드세요.

BigQuery 콘솔 사용

  1. Google Cloud 콘솔에서 BigQuery로 이동합니다.
  2. 왼쪽 탐색 메뉴에서 예약된 쿼리를 클릭합니다.
  3. 예약된 쿼리 만들기를 클릭합니다.
  4. 쿼리 편집기에 다음 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 데이터 세트 이름
  5. 일정 옵션 섹션에서 다음을 수행합니다.

    • 반복: 시간을 선택합니다.
    • Every(매주): 1를 입력합니다.
    • 시작일 및 실행 시간: 현재 날짜와 시간을 선택합니다.
  6. 쿼리 결과의 대상 섹션에서 다음을 수행합니다.

    • 데이터 세트: 쿼리 메타데이터의 데이터 세트를 선택합니다 (내보낸 데이터 아님).
  7. 저장을 클릭합니다.

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에서 피드 구성

  1. SIEM 설정> 피드로 이동합니다.
  2. 새 피드 추가를 클릭합니다.
  3. 단일 피드 구성을 클릭합니다.
  4. 피드 이름 필드에 피드 이름을 입력합니다(예: Gmail Logs).
  5. 소스 유형으로 Google Cloud Storage V2를 선택합니다.
  6. 로그 유형으로 GMAIL 로그를 선택합니다.

  7. 서비스 계정 가져오기를 클릭합니다. 고유한 서비스 계정 이메일이 표시됩니다. 예를 들면 다음과 같습니다.

    chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com
    
  8. 다음 단계에서 사용할 수 있도록 이 이메일 주소를 복사합니다.

  9. 다음을 클릭합니다.

  10. 다음 입력 매개변수의 값을 지정합니다.

    • 스토리지 버킷 URL: 다음 접두사 경로를 사용하여 GCS 버킷 URI를 입력합니다.

       gs://gmail-logs-export/gmail-logs/
      
      • 다음과 같이 바꿉니다.
        • gmail-logs-export: GCS 버킷 이름
        • gmail-logs: 로그가 저장되는 접두사/폴더 경로
    • 소스 삭제 옵션: 환경설정에 따라 삭제 옵션을 선택합니다.

      • 삭제 안함: 전송 후 파일을 삭제하지 않습니다 (테스트에 권장).
      • 전송된 파일 삭제: 전송이 완료되면 파일을 삭제합니다.
      • 전송된 파일 및 빈 디렉터리 삭제: 전송이 완료되면 파일과 빈 디렉터리를 삭제합니다.

    • 최대 파일 기간: 지난 일수 동안 수정된 파일을 포함합니다. 기본값은 180일입니다.

    • 애셋 네임스페이스: 애셋 네임스페이스입니다.

    • 수집 라벨: 이 피드의 이벤트에 적용할 라벨입니다.

  11. 다음을 클릭합니다.

  12. 확정 화면에서 새 피드 구성을 검토한 다음 제출을 클릭합니다.

Google SecOps 서비스 계정에 IAM 권한 부여

Google SecOps 서비스 계정에는 GCS 버킷에 대한 스토리지 객체 뷰어 역할이 필요합니다.

Google Cloud 콘솔 사용

  1. Cloud Storage> 버킷으로 이동합니다.
  2. 버킷 이름을 클릭합니다.
  3. 권한 탭으로 이동합니다.
  4. 액세스 권한 부여를 클릭합니다.
  5. 다음 구성 세부정보를 제공합니다.
    • 주 구성원 추가: Google SecOps 서비스 계정 이메일을 붙여넣습니다.
    • 역할 할당: 스토리지 객체 뷰어를 선택합니다.
  6. 저장을 클릭합니다.

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 rfc2822_message_id에서 추출, < > 삭제, grok 사용
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 서비스와 선택기에서 연결됨

도움이 더 필요하신가요? 커뮤니티 회원 및 Google SecOps 전문가에게 문의하여 답변을 받으세요.