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 コンソールを使用する
- Google Cloud Console に移動します。
- プロジェクトを選択するか、新しいプロジェクトを作成します。
- ナビゲーション メニューで、[Cloud Storage > バケット] に移動します。
- [バケットを作成] をクリックします。
次の構成情報を提供してください。
設定 値 バケットに名前を付ける グローバルに一意の名前( gmail-logs-exportなど)を入力します。ロケーション タイプ ニーズに基づいて選択します(リージョン、デュアルリージョン、マルチリージョン)。 ロケーション ロケーションを選択します(例: us-central1)。ストレージ クラス Standard(頻繁にアクセスされるログにおすすめ) アクセス制御 均一(推奨) 保護ツール 省略可: オブジェクトのバージョニングまたは保持ポリシーを有効にする [作成] をクリックします。
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 エクスポートを有効にする
- 特権管理者アカウントで Google 管理コンソールにログインします。
- メニュー > [レポート] > [データ統合] に移動します。
- [BigQuery Export] カードにカーソルを合わせ、[編集] をクリックします。
- [Google BigQuery への Google Workspace データのエクスポートを有効にします] チェックボックスをオンにします。
- [BigQuery プロジェクト ID] で、ログを保存するプロジェクトを選択します。
- [プロジェクト内の新しいデータセット] に、ログの保存に使用するデータセットの名前を入力します(例:
workspace_logs)。 - 省略可: [データセットの地理的な保管場所を特定のロケーションに制限する] チェックボックスをオンにして、メニューからロケーションを選択します。
[保存] をクリックします。
エクスポートを有効にすると、通常は 10 分以内にアクティビティ ログイベントが利用可能になります。データは、指定されたデータセット内の activity_YYYYMMDD という名前のテーブルにエクスポートされます。
BigQuery から GCS にエクスポートするスケジュール設定されたクエリを作成する
Gmail のログを BigQuery から Cloud Storage に定期的に自動エクスポートするには、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 プロジェクト IDworkspace_logs: BigQuery データセット名
- 次のように置き換えます。
[スケジュール オプション] セクションで:
- Repeat: [Hours] を選択します。
- Every: 「
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 プロジェクト IDgmail-logs-export: GCS バケット名workspace_logs: BigQuery データセット名
- 次のように置き換えます。
Google SecOps サービス アカウントを取得する
Google SecOps は、一意のサービス アカウントを使用して GCS バケットからデータを読み取ります。このサービス アカウントにバケットへのアクセス権を付与する必要があります。
Gmail のログを取り込むように Google SecOps でフィードを構成する
- [SIEM 設定] > [フィード] に移動します。
- [Add New Feed] をクリックします。
- [単一フィードを設定] をクリックします。
- [フィード名] フィールドに、フィードの名前を入力します(例:
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: ログが保存される接頭辞/フォルダパス
- 次のように置き換えます。
Source deletion option: 必要に応じて削除オプションを選択します。
- なし: 転送後にファイルを削除しません(テストにおすすめ)。
- 転送されたファイルを削除する: 転送が完了した後にファイルを削除します。
転送されたファイルと空のディレクトリを削除する: 転送が完了した後にファイルと空のディレクトリを削除します。
ファイルの最大経過日数: 指定した日数以内に変更されたファイルを含めます。デフォルトは 180 日です。
アセットの名前空間: アセットの名前空間。
Ingestion labels: このフィードのイベントに適用されるラベル。
[次へ] をクリックします。
[Finalize] 画面で新しいフィードの設定を確認し、[送信] をクリックします。
Google SecOps サービス アカウントに IAM 権限を付与する
Google SecOps サービス アカウントには、GCS バケットに対する Storage オブジェクト閲覧者ロールが必要です。
Google Cloud コンソールを使用する
- [Cloud Storage] > [バケット] に移動します。
- バケット名をクリックします。
- [権限] タブに移動します。
- [アクセス権を付与] をクリックします。
- 次の構成の詳細を指定します。
- プリンシパルを追加: Google SecOps サービス アカウントのメールアドレスを貼り付けます。
- ロールを割り当てる: [Storage オブジェクト閲覧者] を選択します。
- [保存] をクリックします。
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 のプロフェッショナルから回答を得ることができます。