Collecter les journaux Gmail
Version de l'analyseur : 7.0
Ce document explique comment ingérer des journaux Gmail dans Google Security Operations à l'aide de Google Cloud Storage V2.
Gmail est le service de messagerie de Google Workspace. Il offre une messagerie sécurisée et intelligente avec une protection intégrée contre le spam et l'hameçonnage. Les journaux Gmail capturent des informations détaillées sur la distribution des e-mails, les événements liés à la sécurité et le flux de messages dans l'infrastructure Gmail.
Avant de commencer
Assurez-vous de remplir les conditions préalables suivantes :
- Une instance Google SecOps
- Projet GCP pour lequel l'API Cloud Storage et l'API BigQuery sont activées
- Compte Google Workspace avec l'édition appropriée (Enterprise Standard, Enterprise Plus, Education Standard ou Education Plus)
- Accès super-administrateur à la console d'administration Google Workspace
- Autorisations de créer et de gérer des buckets GCS
- Autorisations permettant de gérer les stratégies IAM sur les buckets GCS
- Autorisations pour créer des requêtes planifiées BigQuery
- Le compte de service gapps-reports@system.gserviceaccount.com doit disposer du rôle d'éditeur sur le projet BigQuery
Créer un bucket Google Cloud Storage
Utiliser la console Google Cloud
- Accédez à la console Google Cloud.
- Sélectionnez votre projet ou créez-en un.
- Dans le menu de navigation, accédez à Cloud Storage > Buckets.
- Cliquez sur Créer un bucket.
Fournissez les informations de configuration suivantes :
Paramètre Valeur Attribuez un nom au bucket Saisissez un nom unique (par exemple, gmail-logs-export).Type d'emplacement Choisissez en fonction de vos besoins (région, birégion, multirégion). Emplacement Sélectionnez l'emplacement (par exemple, us-central1).Classe de stockage Standard (recommandé pour les journaux auxquels vous accédez fréquemment) Access control (Contrôle des accès) Uniforme (recommandé) Outils de protection Facultatif : Activez la gestion des versions d'objets ou la règle de conservation Cliquez sur Créer.
Utiliser l'outil de ligne de commande gcloud
Vous pouvez également créer un bucket à l'aide de la commande
gcloud:gcloud storage buckets create gs://gmail-logs-export \ --location=us-central1 \ --default-storage-class=STANDARD- Remplacez :
gmail-logs-export: nom de bucket de votre choix (unique au niveau mondial).us-central1: région de votre choix (par exemple,us-central1,europe-west1).
- Remplacez :
Configurer Google Workspace pour exporter des journaux vers BigQuery
Les journaux Google Workspace, y compris les journaux Gmail, sont exportés vers BigQuery via la fonctionnalité unifiée des journaux et rapports Workspace.
Activer l'exportation BigQuery pour les journaux Workspace
- Connectez-vous à la console d'administration Google avec un compte super-administrateur.
- Accédez à Menu > Reporting > Intégrations de données.
- Pointez sur la fiche BigQuery Export, puis cliquez sur Modifier.
- Cochez la case Activer l'exportation des données Google Workspace vers Google BigQuery.
- Sous ID de projet BigQuery, sélectionnez le projet dans lequel vous souhaitez stocker les journaux.
- Sous Nouvel ensemble de données dans le projet, saisissez le nom de l'ensemble de données à utiliser pour stocker les journaux (par exemple,
workspace_logs). - Facultatif : Cochez la case Restreindre l'ensemble de données à un emplacement géographique spécifique, puis sélectionnez l'emplacement dans le menu.
Cliquez sur Enregistrer.
Une fois l'exportation activée, les événements des journaux d'activité sont généralement disponibles sous 10 minutes. Les données sont exportées vers des tables nommées activity_YYYYMMDD dans l'ensemble de données spécifié.
Créer une requête planifiée pour exporter des données de BigQuery vers GCS
Pour exporter automatiquement les journaux Gmail de BigQuery vers Cloud Storage de manière récurrente, créez une requête programmée à l'aide de l'instruction EXPORT DATA.
Utiliser la console BigQuery
- Dans la console Google Cloud, accédez à BigQuery.
- Dans le volet de navigation de gauche, cliquez sur Requêtes programmées.
- Cliquez sur Créer une requête programmée.
Dans l'éditeur de requête, saisissez le code SQL suivant :
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))- Remplacez :
gmail-logs-export: nom de votre bucket GCSPROJECT_ID: ID de votre projet GCPworkspace_logs: nom de votre ensemble de données BigQuery.
- Remplacez :
Dans la section Schedule options (Options de programmation) :
- Répéter : sélectionnez Heures.
- Tous les : saisissez
1. - Date de début et heure d'exécution : sélectionnez la date et l'heure actuelles.
Dans la section Destination des résultats de la requête :
- Ensemble de données : sélectionnez un ensemble de données pour les métadonnées de requête (et non les données exportées).
Cliquez sur Enregistrer.
Utiliser l'outil de ligne de commande bq
Vous pouvez également créer une requête programmée à l'aide de la commande
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" }'- Remplacez :
PROJECT_ID: ID de votre projet GCPgmail-logs-export: nom de votre bucket GCSworkspace_logs: nom de votre ensemble de données BigQuery.
- Remplacez :
Récupérer le compte de service Google SecOps
Google SecOps utilise un compte de service unique pour lire les données de votre bucket GCS. Vous devez accorder à ce compte de service l'accès à votre bucket.
Configurer un flux dans Google SecOps pour ingérer les journaux Gmail
- Accédez à Paramètres SIEM> Flux.
- Cliquez sur Ajouter un flux.
- Cliquez sur Configurer un flux unique.
- Dans le champ Nom du flux, saisissez un nom pour le flux (par exemple,
Gmail Logs). - Sélectionnez Google Cloud Storage V2 comme Type de source.
Sélectionnez Journaux GMAIL comme Type de journal.
Cliquez sur Get Service Account (Obtenir un compte de service). Une adresse e-mail de compte de service unique s'affiche, par exemple :
chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.comCopiez cette adresse e-mail pour l'utiliser à l'étape suivante.
Cliquez sur Suivant.
Spécifiez les valeurs des paramètres d'entrée suivants :
URL du bucket de stockage : saisissez l'URI du bucket GCS avec le chemin d'accès au préfixe :
gs://gmail-logs-export/gmail-logs/- Remplacez :
gmail-logs-export: nom de votre bucket GCSgmail-logs: préfixe/chemin d'accès au dossier où les journaux sont stockés
- Remplacez :
Option de suppression de la source : sélectionnez l'option de suppression de votre choix :
- Jamais : ne supprime jamais aucun fichier après les transferts (recommandé pour les tests).
- Supprimer les fichiers transférés : supprime les fichiers une fois le transfert réussi.
Supprimer les fichiers transférés et les répertoires vides : supprime les fichiers et les répertoires vides une fois le transfert réussi.
Âge maximal du fichier : incluez les fichiers modifiés au cours des derniers jours. La valeur par défaut est de 180 jours.
Espace de noms de l'élément : espace de noms de l'élément.
Libellés d'ingestion : libellé à appliquer aux événements de ce flux.
Cliquez sur Suivant.
Vérifiez la configuration de votre nouveau flux d'actualités sur l'écran Finaliser, puis cliquez sur Envoyer.
Accorder des autorisations IAM au compte de service Google SecOps
Le compte de service Google SecOps a besoin du rôle Lecteur des objets Storage sur votre bucket GCS.
Utiliser la console Google Cloud
- Accédez à Cloud Storage > Buckets.
- Cliquez sur le nom de votre bucket.
- Accédez à l'onglet Autorisations.
- Cliquez sur Accorder l'accès.
- Fournissez les informations de configuration suivantes :
- Ajouter des comptes principaux : collez l'adresse e-mail du compte de service Google SecOps.
- Attribuer des rôles : sélectionnez Lecteur d'objets Storage.
- Cliquez sur Enregistrer.
Utiliser l'outil de ligne de commande gcloud
Vous pouvez également accorder des autorisations à l'aide de la commande
gcloud:gcloud storage buckets add-iam-policy-binding gs://gmail-logs-export \ --member="serviceAccount:SECOPS_SERVICE_ACCOUNT_EMAIL" \ --role="roles/storage.objectViewer"- Remplacez :
gmail-logs-export: nom de votre bucket.SECOPS_SERVICE_ACCOUNT_EMAIL: adresse e-mail du compte de service Google SecOps.
- Remplacez :
Utiliser l'outil de ligne de commande gsutil (ancien)
Accordez au compte de service SecOps l'accès Lecteur des objets au bucket d'exportation des journaux Gmail.
gsutil iam ch serviceAccount:SECOPS_SERVICE_ACCOUNT_EMAIL:objectViewer \ gs://gmail-logs-export
Vérifier les autorisations
Pour vérifier que les autorisations ont bien été accordées :
gcloud storage buckets get-iam-policy gs://gmail-logs-export \ --flatten="bindings[].members" \ --filter="bindings.role:roles/storage.objectViewer"
Vous devriez voir l'adresse e-mail du compte de service Google SecOps dans le résultat.
Table de mappage UDM
| Champ de journal | Mappage UDM | Logique |
|---|---|---|
| attachment.file_extension_type, attachment.sha256, attachment.file_name, domains | à propos de | Fusionné avec les détails des pièces jointes et les domaines de liens |
| 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 | Fusionné avec divers champs de métadonnées supplémentaires |
| action_type, description, rule_id | metadata.description | Définissez des descriptions spécifiques en fonction des valeurs action_type, ou à partir de la description, ou sur "Contenu choquant" si rule_id == 7 |
| metadata.event_type | Défini sur "EMAIL_TRANSACTION" | |
| event_name | metadata.product_event_type | Valeur copiée directement |
| metadata.product_name | Défini sur "GMAIL" | |
| metadata.vendor_name | Défini sur "Google" | |
| __incoming_message, __outcoming_message | network.direction | Définissez sur "INBOUND" si un message entrant est détecté, ou sur "OUTBOUND" si un message sortant est détecté. |
| destination.address | network.email.cc | Fusionné à partir des adresses de destination où l'index est supérieur à 0 |
| message_info.source.from_header_address, message_info.source.address | network.email.from | Valeur issue de from_header_address si elle n'est pas vide, sinon issue de source.address |
| message_info.rfc2822_message_id, gmail.message_info.rfc2822_message_id | network.email.mail_id | Extrait de rfc2822_message_id, en supprimant < >, à l'aide de grok |
| message_info.subject, gmail.message_info.subject | network.email.subject | Valeur de message_info.subject si elle n'est pas vide, sinon gmail.message_info.subject |
| destination.address | network.email.to | Fusionné à partir de la première adresse de destination |
| network.ip_protocol | Définissez cette option sur "TCP". | |
| _payload_size | network.received_bytes | Définie sur _payload_size si le message entrant |
| _payload_size | network.sent_bytes | Définie sur _payload_size si le message est sortant |
| token.app_name, message_info.source.service, message_info.source.selector, gmail.message_info.source.service, gmail.message_info.source.selector | principal.application | Valeur de token.app_name si elle n'est pas vide, sinon concaténée à partir de source.service et source.selector |
| message_info.connection_info.client_host_zone, gmail.message_info.connection_info.client_host_zone | principal.asset.hostname | Valeur issue de client_host_zone |
| client_ip | principal.asset.ip | Valeur copiée directement |
| message_info.connection_info.client_host_zone, gmail.message_info.connection_info.client_host_zone | principal.hostname | Valeur issue de client_host_zone |
| client_ip | principal.ip | Valeur copiée directement |
| message_info.connection_info.ip_geo_country, gmail.message_info.connection_info.ip_geo_country | principal.location.country_or_region | Valeur issue de ip_geo_country |
| email, source_address | principal.user.email_addresses | Fusionné à partir de email_address et source_address |
| token.client_id | principal.user.group_identifiers | Valeur copiée directement |
| message_info.source.from_header_displayname, gmail.message_info.source.from_header_displayname | principal.user.user_display_name | Valeur issue de from_header_displayname |
| source_address | principal.user.userid | Valeur copiée directement |
| action | security_result.action | Valeur copiée directement |
| catégorie | security_result.category | Valeur copiée directement |
| category_details | security_result.category_details | Valeur copiée directement |
| message_info.connection_info.smtp_response_reason, gmail.message_info.connection_info.smtp_response_reason, rule_description, reason | security_result.description | Définissez cette option sur le motif de la réponse SMTP, la description de la règle ou le motif de la classification. |
| stringMatch.predefined_detector_name, stringMatch.matched_string, stringMatch.match_expression, stringMatch.source, stringMatch.type | security_result.detection_fields | Fusionné avec les objets du champ de détection |
| rule_id | security_result.rule_id | Valeur copiée directement |
| rule_name | security_result.rule_name | Valeur copiée directement |
| _err_summary, rule_id, description | security_result.summary | Définissez-le sur le récapitulatif des erreurs, sur le récapitulatif spécifique à la règle ou sur la description. |
| _target_host | target.administrative_domain | Valeur copiée directement |
| message_info.destination.0.service, message_info.destination.0.selector, gmail.message_info.destination.0.service, gmail.message_info.destination.0.selector | target.application | Concaténé à partir du service et du sélecteur |
gmail.message_info.link_domain |
about.labels |
Mappé à partir du journal des modifications |
gmail.message_info.description |
metadata.description |
Mappé à partir du journal des modifications |
gmail.message_info.attachment.sha256 |
about.file.sha256 |
Mappé à partir du journal des modifications |
gmail.message_info.destination.address |
network.email.to |
Mappé à partir du journal des modifications |
gmail.message_info.attachment.file_name |
about.file.full_path |
Mappé à partir du journal des modifications |
gmail.message_info.source.from_header_address |
network.email.from |
Mappé à partir du journal des modifications |
gmail.message_info.attachment.file_extension_type |
about.file.mime_type |
Mappé à partir du journal des modifications |
gmail.message_info.triggered_rule_info.rule_type |
security_result.rule_id |
Mappé à partir du journal des modifications |
gmail.message_info.triggered_rule_info.rule_name |
security_result.rule_name |
Mappé à partir du journal des modifications |
gmail.message_info.source.service", "gmail.message_info.source.selector |
principal.application |
Mappé à partir du journal des modifications |
gmail.message_info.payload_size |
network.sent_bytes |
Mappé à partir du journal des modifications |
gmail.message_info.payload_size |
network.received_bytes |
Mappé à partir du journal des modifications |
gmail.message_info.destination.0.service", "gmail.message_info.destination.0.selector |
target.application |
Mappé à partir du journal des modifications |
gmail.message_info.post_delivery_info.action_type", "gmail.message_info.num_message_attachments", and "gmail.event_info.mail_event_type |
additional.fields |
Mappé à partir du journal des modifications |
event_info.success |
security_result.action |
Mappé à partir du journal des modifications |
attachment.file_name |
about.file.full_path |
Mappé à partir du journal des modifications |
message_info.post_delivery_info.action_type", "message_info.post_delivery_info.interaction.link_url", "event_info.mail_event_type |
additional.fields |
Mappé à partir du journal des modifications |
Journal des modifications
Afficher le journal des modifications de cet analyseur
Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.