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-central1europe-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 にエクスポートするスケジュール設定されたクエリを作成する

Gmail のログを BigQuery から 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. [スケジュール オプション] セクションで:

    • Repeat: [Hours] を選択します。
    • 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. [Add New Feed] をクリックします。
  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: ログが保存される接頭辞/フォルダパス
    • Source deletion option: 必要に応じて削除オプションを選択します。

      • なし: 転送後にファイルを削除しません(テストにおすすめ)。
      • 転送されたファイルを削除する: 転送が完了した後にファイルを削除します。
      • 転送されたファイルと空のディレクトリを削除する: 転送が完了した後にファイルと空のディレクトリを削除します。

    • ファイルの最大経過日数: 指定した日数以内に変更されたファイルを含めます。デフォルトは 180 日です。

    • アセットの名前空間: アセットの名前空間

    • Ingestion labels: このフィードのイベントに適用されるラベル。

  11. [次へ] をクリックします。

  12. [Finalize] 画面で新しいフィードの設定を確認し、[送信] をクリックします。

Google SecOps サービス アカウントに IAM 権限を付与する

Google SecOps サービス アカウントには、GCS バケットに対する Storage オブジェクト閲覧者ロールが必要です。

Google Cloud コンソールを使用する

  1. [Cloud Storage] > [バケット] に移動します。
  2. バケット名をクリックします。
  3. [権限] タブに移動します。
  4. [アクセス権を付与] をクリックします。
  5. 次の構成の詳細を指定します。
    • プリンシパルを追加: Google SecOps サービス アカウントのメールアドレスを貼り付けます。
    • ロールを割り当てる: [Storage オブジェクト閲覧者] を選択します。
  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 about 添付ファイルの詳細とリンク ドメインと統合
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 の場合は「Objectionable content」に基づいて特定の説明に設定します。
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 値を直接コピー
アクション security_result.action 値を直接コピー
category 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 のプロフェッショナルから回答を得ることができます。