Collecter les journaux d'audit GitHub

Compatible avec:

Présentation

Cet analyseur gère les journaux d'audit GitHub au format JSON. Il nettoie l'entrée en supprimant de nombreux champs, effectue plusieurs opérations grok et clé-valeur en fonction du champ process_type pour extraire les informations pertinentes, met en correspondance les champs extraits avec l'UDM et structure la sortie pour l'ingestion Google SecOps. Il gère également des cas particuliers spécifiques et effectue des transformations de données pour différents sous-types de journaux dans les journaux d'audit GitHub.

Avant de commencer

  • Assurez-vous de disposer d'une instance Google SecOps.
  • Assurez-vous de disposer d'un accès privilégié aux dépôts GitHub.

Configurer un flux dans Google SecOps pour ingérer les journaux GitHub

  1. Accédez à Paramètres du SIEM > Flux.
  2. Cliquez sur Ajouter.
  3. Dans le champ Nom du flux, saisissez un nom pour le flux (par exemple, Journaux GitHub).
  4. Sélectionnez Webhook comme type de source.
  5. Sélectionnez GitHub comme Type de journal.
  6. Cliquez sur Suivant.
  7. Facultatif: spécifiez des valeurs pour les paramètres d'entrée suivants :
    • Délimiteur de fractionnement: délimiteur utilisé pour séparer les lignes de journal, par exemple \n.
    • Espace de noms des éléments: espace de noms des éléments.
    • Libellés d'ingestion: libellé appliqué aux événements de ce flux.
  8. Cliquez sur Suivant.
  9. Vérifiez la configuration du flux dans l'écran Finaliser, puis cliquez sur Envoyer.
  10. Cliquez sur Générer une clé secrète pour générer une clé secrète permettant d'authentifier ce flux.
  11. Copiez et stockez la clé secrète. Vous ne pourrez plus afficher cette clé secrète. Si nécessaire, vous pouvez générer une nouvelle clé secrète, mais cette action rend la clé secrète précédente obsolète.
  12. Dans l'onglet Détails, copiez l'URL du point de terminaison du flux dans le champ Informations sur le point de terminaison. Vous devez spécifier cette URL de point de terminaison dans votre application cliente.
  13. Cliquez sur OK.

Créer une clé API pour le flux webhook

  1. Accédez à la console Google Cloud > Identifiants.

    Accéder à "Identifiants"

  2. Cliquez sur Créer des identifiants, puis sélectionnez Clé API.

  3. Limitez l'accès de la clé API à l'API Google Security Operations.

Spécifier l'URL du point de terminaison

  1. Dans votre application cliente, spécifiez l'URL du point de terminaison HTTPS fournie dans le flux de webhook.
  2. Activez l'authentification en spécifiant la clé API et la clé secrète dans l'en-tête personnalisé au format suivant:

    X-goog-api-key = API_KEY
    X-Webhook-Access-Key = SECRET
    

    Recommandation: Spécifiez la clé API en tant qu'en-tête plutôt que dans l'URL. Si votre client webhook n'est pas compatible avec les en-têtes personnalisés, vous pouvez spécifier la clé API et la clé secrète à l'aide de paramètres de requête au format suivant:

    ENDPOINT_URL?key=API_KEY&secret=SECRET
    

Remplacez les éléments suivants :

  • ENDPOINT_URL: URL du point de terminaison du flux.
  • API_KEY: clé API permettant de s'authentifier auprès de Google Security Operations.
  • SECRET: clé secrète que vous avez générée pour authentifier le flux.

Créer un webhook sur GitHub

Ce guide fournit des instructions détaillées pour créer un webhook sur GitHub afin d'envoyer des données à Google SecOps.

  1. Accédez à votre dépôt GitHub.
  2. Accédez à Paramètres.
  3. Cliquez sur Webhooks.
  4. Cliquez sur Add webhook (Ajouter un Webhook).
  5. Dans le champ URL de la charge utile, saisissez l'URL du point de terminaison de l'API Google SecOps.
  6. Sélectionnez application/json comme type de contenu.

    Facultatif: Pour une sécurité renforcée, définissez un secret. Cela génère une signature pour les charges utiles de webhook, ce qui vous permet de vérifier leur authenticité du côté de Google SecOps. Si vous utilisez un secret, configurez-le également dans votre flux Google SecOps.

  7. Choisissez les événements qui déclenchent le webhook. Pour une journalisation complète, sélectionnez M'autoriser à sélectionner des événements individuels, puis cochez les événements pertinents (par exemple, Push, Pull request ou Problème). En cas de doute, commencez par Just the push event (Uniquement l'événement push).

  8. Assurez-vous que la case Active est cochée.

  9. Cliquez sur Ajouter un webhook pour enregistrer votre configuration.

Tableau de mappage UDM

Champ de journal Mappage UDM Logique
_document_id read_only_udm.additional.fields.[].key, read_only_udm.additional.fields.[].value.string_value Le _document_id du journal brut est mappé sur une paire clé-valeur dans le tableau additional.fields de l'UDM.
action read_only_udm.metadata.product_event_type, read_only_udm.security_result.summary Le champ action est mappé sur product_event_type dans les métadonnées et sur summary dans le security_result.
actor read_only_udm.principal.user.userid Le champ actor, qui représente l'utilisateur effectuant l'action, est mappé sur principal.user.userid.
actor_id read_only_udm.principal.user.attribute.labels.[].key, read_only_udm.principal.user.attribute.labels.[].value actor_id est mappé en tant que libellé dans le tableau principal.user.attribute.labels.
actor_ip read_only_udm.principal.ip L'adresse IP de l'acteur est mappée sur principal.ip.
actor_location.country_code read_only_udm.principal.location.country_or_region Le code pays de l'acteur est mappé sur principal.location.country_or_region.
application_name read_only_udm.target.application Le nom de l'application est mappé sur target.application.
business read_only_udm.target.user.company_name, read_only_udm.additional.fields.[].key, read_only_udm.additional.fields.[].value.string_value Le nom de l'établissement est mappé sur target.user.company_name et en tant que paire clé-valeur dans additional.fields.
business_id read_only_udm.target.resource.attribute.labels.[].key, read_only_udm.target.resource.attribute.labels.[].value L'ID de l'établissement est mappé en tant que libellé dans le tableau target.resource.attribute.labels.
config.url read_only_udm.target.url L'URL de configuration est mappée sur target.url.
created_at read_only_udm.metadata.event_timestamp L'horodatage created_at est converti au format approprié et mappé sur metadata.event_timestamp.
data.cancelled_at read_only_udm.extensions.vulns.vulnerabilities.scan_end_time Le code temporel data.cancelled_at est converti et mappé sur extensions.vulns.vulnerabilities.scan_end_time.
data.email read_only_udm.target.email L'adresse e-mail du champ de données est mappée sur target.email.
data.event read_only_udm.security_result.about.labels.[].key, read_only_udm.security_result.about.labels.[].value L'événement du champ de données est mappé en tant que libellé dans le tableau security_result.about.labels.
data.events read_only_udm.security_result.about.labels.[].key, read_only_udm.security_result.about.labels.[].value Les événements du champ de données sont mappés en tant que libellés dans le tableau security_result.about.labels.
data.head_branch read_only_udm.security_result.about.labels.[].key, read_only_udm.security_result.about.labels.[].value La branche principale du champ de données est mappée en tant que libellé dans le tableau security_result.about.labels.
data.head_sha read_only_udm.target.file.sha256 La valeur SHA de tête du champ de données est mappée sur target.file.sha256.
data.hook_id read_only_udm.target.resource.attribute.labels.[].key, read_only_udm.target.resource.attribute.labels.[].value L'ID du crochet du champ de données est mappé en tant que libellé dans le tableau target.resource.attribute.labels.
data.started_at read_only_udm.extensions.vulns.vulnerabilities.scan_start_time Le code temporel data.started_at est converti et mappé sur extensions.vulns.vulnerabilities.scan_start_time.
data.team read_only_udm.target.user.group_identifiers L'équipe du champ de données est mappée sur target.user.group_identifiers.
data.trigger_id read_only_udm.security_result.about.labels.[].key, read_only_udm.security_result.about.labels.[].value L'ID du déclencheur du champ de données est mappé en tant que libellé dans le tableau security_result.about.labels.
data.workflow_id read_only_udm.security_result.about.labels.[].key, read_only_udm.security_result.about.labels.[].value L'ID de workflow du champ de données est mappé en tant que libellé dans le tableau security_result.about.labels.
data.workflow_run_id read_only_udm.security_result.about.labels.[].key, read_only_udm.security_result.about.labels.[].value L'ID d'exécution du workflow du champ de données est mappé en tant que libellé dans le tableau security_result.about.labels.
enterprise.name read_only_udm.additional.fields.[].key, read_only_udm.additional.fields.[].value.string_value Le nom de l'entreprise est mappé en tant que paire clé-valeur dans additional.fields.
external_identity_nameid read_only_udm.target.user.userid, read_only_udm.target.user.email_addresses Si external_identity_nameid est une adresse e-mail, la partie du nom d'utilisateur est extraite et mappée sur target.user.userid, et l'adresse e-mail complète est ajoutée à target.user.email_addresses. Sinon, l'ensemble de la valeur est mappé sur target.user.userid.
external_identity_username read_only_udm.target.user.user_display_name Le nom d'utilisateur de l'identité externe est mappé sur target.user.user_display_name.
hashed_token read_only_udm.network.session_id Le jeton haché est mappé sur network.session_id.
org read_only_udm.target.administrative_domain L'organisation est mappée sur target.administrative_domain.
org_id read_only_udm.additional.fields.[].key, read_only_udm.additional.fields.[].value.string_value L'ID de l'organisation est mappé en tant que paire clé-valeur dans additional.fields.
programmatic_access_type read_only_udm.additional.fields.[].key, read_only_udm.additional.fields.[].value.string_value Le type d'accès programmatique est mappé en tant que paire clé-valeur dans additional.fields.
public_repo read_only_udm.additional.fields.[].key, read_only_udm.additional.fields.[].value.string_value, read_only_udm.target.location.name La valeur public_repo détermine la valeur mappée sur une paire clé-valeur dans additional.fields et target.location.name. "false" est mappé sur "PRIVATE", et les autres valeurs sur "PUBLIC".
query_string read_only_udm.additional.fields.[].key, read_only_udm.additional.fields.[].value.string_value La chaîne de requête est mappée en tant que paire clé-valeur dans additional.fields.
rate_limit_remaining read_only_udm.additional.fields.[].key, read_only_udm.additional.fields.[].value.string_value La limite de débit restante est mappée en tant que paire clé-valeur dans additional.fields.
repo read_only_udm.target.resource.name Le dépôt est mappé sur target.resource.name.
repo_id read_only_udm.additional.fields.[].key, read_only_udm.additional.fields.[].value.string_value L'ID du dépôt est mappé sous la forme d'une paire clé-valeur dans additional.fields.
repository_public read_only_udm.additional.fields.[].key, read_only_udm.additional.fields.[].value.string_value L'indicateur public du dépôt est mappé en tant que paire clé-valeur dans additional.fields.
request_body read_only_udm.additional.fields.[].key, read_only_udm.additional.fields.[].value.string_value Le corps de la requête est mappé en tant que paire clé-valeur dans additional.fields.
request_method read_only_udm.network.http.method La méthode de requête est convertie en majuscules et mappée sur network.http.method.
route read_only_udm.additional.fields.[].key, read_only_udm.additional.fields.[].value.string_value L'itinéraire est mappé sous la forme d'une paire clé-valeur dans additional.fields.
status_code read_only_udm.network.http.response_code Le code d'état est converti en entier et mappé sur network.http.response_code.
token_id read_only_udm.additional.fields.[].key, read_only_udm.additional.fields.[].value.string_value L'ID de jeton est mappé en tant que paire clé-valeur dans additional.fields.
token_scopes read_only_udm.additional.fields.[].key, read_only_udm.additional.fields.[].value.string_value Les portées de jeton sont mappées en tant que paire clé-valeur dans additional.fields.
transport_protocol_name read_only_udm.network.application_protocol Le nom du protocole de transport est converti en majuscules et mappé sur network.application_protocol.
url_path read_only_udm.target.url Le chemin d'URL est mappé sur target.url.
user read_only_udm.target.user.user_display_name L'utilisateur est mappé sur target.user.user_display_name.
user_agent read_only_udm.network.http.user_agent, read_only_udm.network.http.parsed_user_agent L'user-agent est mappé sur network.http.user_agent, et sa version analysée est mappée sur network.http.parsed_user_agent.
user_id read_only_udm.target.user.userid L'ID utilisateur est mappé sur target.user.userid.
workflow.name read_only_udm.security_result.about.labels.[].key, read_only_udm.security_result.about.labels.[].value Le nom du workflow est mappé en tant que libellé dans le tableau security_result.about.labels.
workflow_run.event read_only_udm.additional.fields.[].key, read_only_udm.additional.fields.[].value.string_value L'événement d'exécution du workflow est mappé en tant que paire clé-valeur dans additional.fields.
workflow_run.head_branch read_only_udm.security_result.about.labels.[].key, read_only_udm.security_result.about.labels.[].value La branche de tête de l'exécution du workflow est mappée en tant que libellé dans le tableau security_result.about.labels.
workflow_run.head_sha read_only_udm.target.file.sha256 La valeur SHA de l'en-tête d'exécution du workflow est mappée sur target.file.sha256.
workflow_run.id read_only_udm.target.resource.attribute.labels.[].key, read_only_udm.target.resource.attribute.labels.[].value L'ID d'exécution du workflow est mappé en tant que libellé dans le tableau target.resource.attribute.labels.
workflow_run.workflow_id read_only_udm.security_result.about.labels.[].key, read_only_udm.security_result.about.labels.[].value L'ID de l'exécution du workflow est mappé en tant que libellé dans le tableau security_result.about.labels.
(Logique de l'analyseur) read_only_udm.metadata.event_type Le type d'événement est déterminé par l'analyseur en fonction de la présence et des valeurs d'autres champs, tels que data.team, action et actor. La valeur par défaut est USER_RESOURCE_ACCESS si aucune autre condition spécifique n'est remplie.
(Logique de l'analyseur) read_only_udm.metadata.log_type Le type de journal est défini en dur sur "GITHUB".
(Logique de l'analyseur) read_only_udm.metadata.product_name Le nom du produit est codé en dur sur "GITHUB".
(Logique de l'analyseur) read_only_udm.metadata.vendor_name Le nom du fournisseur est codé en dur sur "GITHUB".
(Logique de l'analyseur) read_only_udm.target.resource.resource_type Le type de ressource est défini sur STORAGE_OBJECT lorsque le champ repo est présent.
(Logique de l'analyseur) read_only_udm.target.resource.type Le type de ressource est dérivé du champ action.
(Logique de l'analyseur) read_only_udm.security_result.action L'action de sécurité (ALLOW/BLOCK) est dérivée des champs at ou raw.at s'ils sont présents et égaux à "success" ou non.
(Logique de l'analyseur) read_only_udm.security_result.severity La gravité de la sécurité est dérivée des champs level ou SeverityText, le cas échéant. "INFO" est mappé sur "INFORMATIONAL", "WARN" sur "MEDIUM", et les autres valeurs sont mappées directement. Pour les journaux git-daemon, "fatal" est mappé sur "CRITICAL".
(Logique de l'analyseur) read_only_udm.network.application_protocol Le protocole d'application est dérivé des champs protocol, proto, babeld_proto, transport_protocol_name ou raw.protocol, convertis en majuscules et vérifiant la présence de "HTTP", "HTTPS" et "SSH".
(Logique de l'analyseur) read_only_udm.network.application_protocol_version La version du protocole d'application est dérivée du champ http_version, le cas échéant.
(Logique de l'analyseur) read_only_udm.network.http.parsed_user_agent L'agent utilisateur analysé est dérivé des champs user_agent, column5, http_ua ou content, le cas échéant.
(Logique de l'analyseur) read_only_udm.network.received_bytes Les octets reçus sont dérivés des champs column3, read_bytes, fs_recv ou uploaded_bytes, le cas échéant, et convertis en entier non signé.
(Logique de l'analyseur) read_only_udm.network.received_packets Les paquets reçus sont dérivés du champ client_recv, le cas échéant, et convertis en entier.
(Logique de l'analyseur) read_only_udm.network.response_code Le code de réponse est dérivé des champs column2, status, status_code ou http_status, le cas échéant, et converti en entier.
(Logique de l'analyseur) read_only_udm.network.sent_bytes Les octets envoyés sont dérivés du champ client_sent, le cas échéant, et convertis en entier sans signature.
(Logique de l'analyseur) read_only_udm.network.sent_packets Les paquets envoyés sont dérivés du champ fs_sent, le cas échéant, et convertis en entier.
(Logique de l'analyseur) read_only_udm.network.session_duration.seconds La durée de la session en secondes est dérivée du champ time_duration, le cas échéant, et convertie en entier.
(Logique de l'analyseur) read_only_udm.target.file.full_path Le chemin d'accès complet du fichier cible est dérivé des champs path, git_dir ou dir, le cas échéant.
(Logique de l'analyseur) read_only_udm.target.file.sha1 Le SHA1 du fichier cible est dérivé du champ sha, le cas échéant.
(Logique de l'analyseur) read_only_udm.target.hostname Le nom d'hôte cible est dérivé du champ client_hostname, le cas échéant.
(Logique de l'analyseur) read_only_udm.target.ip L'adresse IP cible est dérivée des champs x_real_ip, remote_address, client_ip ou remote_addr, le cas échéant.
(Logique de l'analyseur) read_only_udm.target.location.name Le nom de l'emplacement cible est dérivé des champs datacenter ou public_repo, le cas échéant.
(Logique de l'analyseur) read_only_udm.target.port Le port cible est dérivé des champs client_port, dstp ou remote_port, le cas échéant, et converti en entier.
(Logique de l'analyseur) read_only_udm.target.process.command_line La ligne de commande du processus cible est dérivée des champs command, ssh_cmd, cmdline ou cmd, le cas échéant.
(Logique de l'analyseur) read_only_udm.target.process.parent_process.pid L'ID du processus parent du processus cible est dérivé du champ ppid, le cas échéant, et converti en chaîne.
(Logique de l'analyseur) read_only_udm.target.process.pid L'ID de processus cible est dérivé du champ pid, le cas échéant, et converti en chaîne.
(Logique de l'analyseur) read_only_udm.target.url L'URL cible est dérivée des champs url, http_url, request_url, http_request, dest_url, config.url ou url_path, le cas échéant. Il peut également être construit à partir de path_info et query_string.
(Logique de l'analyseur) read_only_udm.target.user.attribute.roles.[].name Les rôles utilisateur cibles sont dérivés des champs actor_type ou user_type, le cas échéant.
(Logique de l'analyseur) read_only_udm.target.user.email_addresses Les adresses e-mail des utilisateurs cibles sont dérivées du champ external_identity_nameid s'il s'agit d'une adresse e-mail.
(Logique de l'analyseur) read_only_udm.target.user.group_identifiers Les identifiants des groupes d'utilisateurs cibles sont dérivés du champ data.team, le cas échéant.
(Logique de l'analyseur) read_only_udm.target.user.userid L'ID utilisateur cible est dérivé des champs userid, external_identity_nameid, current_user, member, user_id, actor_id ou raw.user_id, le cas échéant.
(Logique de l'analyseur) read_only_udm.target.user.user_display_name Le nom à afficher de l'utilisateur cible est dérivé des champs login, user, external_identity_username, user_login ou raw.login, le cas échéant.
(Logique de l'analyseur) read_only_udm.principal.asset.asset_id L'ID de l'asset principal est dérivé du champ guid, avec le préfixe "GUID: ".
(Logique de l'analyseur) read_only_udm.principal.hostname Le nom d'hôte principal est dérivé des champs hostname, request_host, host ou principal_hostname, le cas échéant.
(Logique de l'analyseur) read_only_udm.principal.ip L'adresse IP principale est dérivée des champs column6, ip, x_real_ip, remote_address, raw.ip, actor_ip ou log:source:ip, le cas échéant.
(Logique de l'analyseur) read_only_udm.principal.location.country_or_region Le pays ou la région de l'emplacement principal est dérivé du champ actor_location.country_code, le cas échéant.
(Logique de l'analyseur) read_only_udm.principal.port Le port principal est dérivé des champs srcp ou log:source:port, le cas échéant, et converti en entier.
(Logique de l'analyseur) read_only_udm.principal.resource.name Le nom de la ressource principale est dérivé du champ service.name, le cas échéant.
(Logique de l'analyseur) read_only_udm.principal.resource.product_object_id L'ID de l'objet produit de la ressource principale est dérivé des champs service.instance.id ou subject_id, le cas échéant.
(Logique de l'analyseur) read_only_udm.principal.url L'URL principale est dérivée du champ repo, le cas échéant.
(Logique de l'analyseur) read_only_udm.principal.user.userid L'ID utilisateur principal est dérivé du champ repository_owner_id, le cas échéant, et converti en chaîne.
(Logique de l'analyseur) read_only_udm.principal.user.user_display_name Le nom à afficher de l'utilisateur principal est dérivé du champ repo_name, le cas échéant.
(Logique de l'analyseur) read_only_udm.intermediary.hostname Le nom d'hôte intermédiaire est dérivé du champ hostname, le cas échéant.
(Logique de l'analyseur) read_only_udm.intermediary.ip L'adresse IP intermédiaire est dérivée des champs x_forwarded_for ou xff_ip, le cas échéant.
(Logique de l'analyseur) read_only_udm.metadata.description La description des métadonnées est dérivée des champs content, at ou raw.message, le cas échéant.
(Logique de l'analyseur) read_only_udm.metadata.product_event_type Le type d'événement produit est dérivé des champs process_type ou action, le cas échéant.
(Logique de l'analyseur) read_only_udm.metadata.product_log_id L'ID de journal du produit est dérivé des champs github_request_id, id, request_id ou raw.request_id, le cas échéant.
(Logique de l'analyseur) read_only_udm.metadata.product_version La version du produit est dérivée du champ version, le cas échéant.
(Logique de l'analyseur) read_only_udm.security_result.about.labels.[].key, read_only_udm.security_result.about.labels.[].value Différents libellés sont ajoutés au tableau security_result.about.labels en fonction de la présence et des valeurs de champs tels que data.events, data.workflow_id, workflow.name, data.head_branch, data.trigger_id, data.workflow_run_id et data.event.
(Logique de l'analyseur) read_only_udm.security_result.description La description du résultat de sécurité est dérivée des champs auth_status, data_msg, msg, Body, desc ou content, le cas échéant.
(Logique de l'analyseur) read_only_udm.security_result.severity_details Les détails sur la gravité des résultats de sécurité sont dérivés du champ userid, le cas échéant.
(Logique de l'analyseur) read_only_udm.security_result.summary Le résumé des résultats de sécurité est dérivé des champs creason, action ou reason, le cas échéant.
(Logique de l'analyseur) read_only_udm.network.http.referral_url L'URL de référence HTTP est dérivée des champs column4 ou referer, le cas échéant.
(Logique de l'analyseur) read_only_udm.network.http.user_agent L'user-agent HTTP est dérivé des champs column5, http_ua ou user_agent, le cas échéant.
(Logique de l'analyseur) read_only_udm.network.sent_bytes Les octets envoyés par le réseau sont dérivés des champs client_sent ou fs_sent, le cas échéant, et convertis en entier non signé.
(Logique de l'analyseur) read_only_udm.additional.fields.[].key, read_only_udm.additional.fields.[].value.string_value De nombreux champs sont mappés de manière conditionnelle en tant que paires clé-valeur dans le tableau additional.fields, y compris auth_fingerprint, controller, oauth_access_id, oauth_application_id, oauth_scopes, route, worker_request_count, repo, repo_visibility, auth, content_length, elapsed, catalog_service, action, method, failure_type, failure_reason, hashed_token, token_type, gitauth_version, enterprise.name, programmatic_access_type, token_id, token_scopes, integration, query_string, rate_limit_remaining, request_body, org_id, repo_id, repository_public, raw.method, raw.failure_type, raw.failure_reason, raw.from, raw.raw_login, device_cookie, operation, operation_type, category_type, business, note, read, pre_perform_allocation_count, backend, queue, class, success, env, job_id et job. La logique spécifique de chaque champ est détaillée dans le code de l'analyseur.
(Logique de l'analyseur) read_only_udm.security_result.detection_fields.[].key, read_only_udm.security_result.detection_fields.[].value Les champs controller_action, two_factor, delay_time, queued_time, delivery_build, delivery_send et stages sont mappés de manière conditionnelle au tableau security_result.detection_fields.
(Logique de l'analyseur) read_only_udm.target.resource.attribute.labels.[].key, read_only_udm.target.resource.attribute.labels.[].value Les champs hook_id, job_name, job_workflow_ref, runner_group_id, runner_group_name, runner_name, runner_id, workflow_run_id et business_id sont mappés de manière conditionnelle en tant qu'étiquettes dans le tableau target.resource.attribute.labels.
(Logique de l'analyseur) read_only_udm.metadata.event_timestamp Si le code temporel n'est pas directement disponible dans un format compatible, l'analyseur tente de l'extraire et de le convertir à partir de divers champs, y compris ts, now, created_at, Timestamp, time et raw.now.
(Logique de l'analyseur) read_only_udm.network.http.method La méthode HTTP est dérivée des champs method, column1, request_method, http_method ou raw.method, qui sont convertis en majuscules.
(Logique de l'analyseur) read_only_udm.target.application L'application cible est dérivée des champs process, program ou app, le cas échéant.

Modifications

2023-12-18

  • Correction de bug:
  • Si "process_type" est "github_production", ajout d'un modèle Grok pour extraire "kv_data".
  • Si "process_type" est "github_production", mappez "user" sur "target.user.user_display_name".
  • Si "process_type" est "github_production", mappez "user_id" sur "target.user.userid".
  • Mappage de "referrer" sur "network.http.referral_url".
  • Mappage de "user_session_id" sur "network.session_id".
  • Mappage de "ip" sur "principal.ip".
  • "from" a été mappé sur "additional.fields".
  • "request_category" a été mappé sur "additional.fields".
  • Mappage de "device_cookie" sur "additional.fields".
  • "operation_type" a été mappé sur "additional.fields".
  • "category_type" a été mappé sur "additional.fields".
  • Mappage de "note" sur "additional.fields".
  • Mappage de "read" sur "additional.fields".
  • Mappage de "pre_perform_allocation_count" sur "additional.fields".
  • Mappage de "backend" sur "additional.fields".
  • Mappage de "queue" sur "additional.fields".
  • Mappage de "class" sur "additional.fields".
  • Mappage de "success" sur "additional.fields".
  • Mappage de "controller_action" sur "security_result.detection_fields".
  • Mappage de "two_factor" sur "security_result.detection_fields".

2023-10-25

  • Lorsque "public_repo" est défini sur "false", définissez "target.location.name" sur "PRIVATE", sinon sur "PUBLIC".

2023-10-11

  • Mappage de "user_agent" sur "network.http.user_agent" et "network.http.parsed_user_agent".
  • Mappage de "request_method" sur "network.http.method".
  • "application_name" a été mappé sur "target.application".
  • "status_code" a été mappé sur "network.http.response_code".
  • Mappage de "url_path" sur "target.url".
  • Mappage de "user_id" sur "target.userid".
  • "transport_protocol_name" a été mappé sur "network.application_protocol".
  • Mappage de "raw.now" sur "metadata.event_timestamp".
  • Mappage de "raw.ip" sur "principal.ip".
  • "raw.request_id" a été mappé sur "metadata.product_log_id".
  • Mappage de "raw.repo" sur "target.url".
  • Mappage de "raw.action" sur "security_result.summary".
  • Mappage de "raw.protocol" sur "network.application_protocol".
  • Mappage de "raw.message" sur "metadata.description".
  • Mappage de "raw.at" sur "security_result.action".
  • "raw.login" a été mappé sur "target.user_display_name".
  • Mappage de "raw.user_id" sur "target.userid".
  • Mappage de "raw.failure_reason", "raw.failure_type", "raw.raw_login" et "raw.from" sur "additional.fields".
  • "programmatic_access_type", "actor_id", "token_id", "token_scopes", "integration", "query_string", "rate_limit_remaining", "request_body", "route", "business", "org_id", "repo_id", "public_repo", "_document_id", "operation_type", "repository_public" mappés sur "additional.fields".

2023-07-31

  • Correction de bug:
  • Ajout de "on_error" aux modèles Grok.
  • "workflow_run.id" a été mappé sur "target.resource.attribute.labels".
  • Mappage de "workflow_run.event" sur "additional.fields".
  • Mappage de "workflow_run.actor.login" sur "principal.user.userid".
  • Mappage de "workflow_run.head_branch" sur "security_result.about.labels".
  • "workflow_run.head_sha" a été mappé sur "target.file.sha256".
  • "enterprise.name" a été mappé sur "additional.fields".
  • "workflow.name" a été mappé sur "security_result.about.labels".
  • "workflow_run.workflow_id" a été mappé sur "security_result.about.labels".

2023-06-22

  • Prise en charge des formats de journal syslog "github_auth", "haproxy", "github_access", "github_unicorn", "github_production", "hookshot-go", "babeld", "github_gitauth", "babeld2hydro", "authzd", "gitrpcd", "agent", "git-daemon", "github_resqued", "sudo", "systemd" et "github_audit".

2023-06-09

  • Amélioration :
  • "external_identity_nameid" a été mappé sur "target.user.email_addresses" s'il est au format d'adresse e-mail.
  • Récupérez le nom d'utilisateur à partir de "external_identity_nameid" et mappez-le sur "target.user.userid".

2023-01-13

  • Amélioration :
  • Mappage de "actor_ip" sur "principal.ip".
  • Mappage de "hashed_token" sur "network.session_id".
  • Mappage de "external_identity_nameid" sur "target.user.userid "
  • "external_identity_username" a été mappé sur "target.user.user_display_name".

2022-11-28

  • Amélioration : mappage de "config.url" sur "target.url".

2022-07-07

  • Amélioration : les journaux au format JSON nouvellement ingérés avec l'action "git.clone","git.push" et "workflows.prepared_workflow_job" ont été gérés et analysés.
  • "job_name" mappé sur "target.resource.attribute.labels".
  • "job_workflow_ref" mappé sur "target.resource.attribute.labels".
  • "runner_group_id" mappé sur "target.resource.attribute.labels".
  • "runner_group_name" mappé sur "target.resource.attribute.labels".
  • "runner_name" mappé sur "target.resource.attribute.labels".
  • "runner_id" mappé sur "target.resource.attribute.labels".
  • "workflow_run_id" mappé sur "target.resource.attribute.labels".
  • "actor_location.country_code" mappé sur "principal.location.country_or_region".

Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.