Collecter les journaux d'audit GitHub

Compatible avec :

Présentation

Ce parseur 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, mappe les champs extraits à l'UDM et structure la sortie pour l'ingestion Google SecOps. Il gère également des cas extrêmes 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 remplir les conditions préalables suivantes :

  • Instance Google SecOps.
  • Accès privilégié aux dépôts GitHub.

Configurer des flux

Il existe deux points d'entrée différents pour configurer les flux dans la plate-forme Google SecOps :

  • Paramètres SIEM> Flux
  • Plate-forme de contenu > Packs de contenu

Configurer des flux à partir de Paramètres SIEM > Flux

Pour configurer un flux, procédez comme suit :

  1. Accédez à Paramètres SIEM > Flux.
  2. Cliquez sur Add New Feed (Ajouter un flux).
  3. Sur la page suivante, cliquez sur Configurer un seul flux.
  4. Dans le champ Nom du flux, saisissez un nom pour le flux (par exemple, Journaux GitHub).
  5. Sélectionnez Webhook comme type de source.
  6. Sélectionnez GitHub comme type de journal.
  7. Cliquez sur Suivant.
  8. Facultatif : spécifiez les valeurs des paramètres d'entrée suivants :
    • Délimiteur de fractionnement : délimiteur utilisé pour séparer les lignes de journaux, tel que \n.
  9. Cliquez sur Suivant.
  10. Vérifiez la configuration du flux sur l'écran Finaliser, puis cliquez sur Envoyer.
  11. Cliquez sur Générer une clé secrète pour générer une clé secrète permettant d'authentifier ce flux.
  12. 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 l'ancienne deviendra obsolète.
  13. Dans l'onglet Détails, copiez l'URL du point de terminaison du flux à partir du champ Informations sur le point de terminaison. Vous devez spécifier cette URL de point de terminaison dans votre application cliente.
  14. Cliquez sur OK.

Configurer des flux depuis le Hub de contenu

Indiquez les valeurs des champs suivants :

  • Délimiteur de fractionnement : délimiteur utilisé pour séparer les lignes de journaux, tel que \n.

Options avancées

  • Nom du flux : valeur préremplie qui identifie le flux.
  • Type de source : méthode utilisée pour collecter les journaux dans Google SecOps.
  • Espace de noms de l'élément : espace de noms associé au flux.
  • Libellés d'ingestion : libellés appliqués à tous les événements de ce flux.

  • Cliquez sur Générer une clé secrète pour générer une clé secrète permettant d'authentifier ce flux.

  • 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 l'ancienne deviendra obsolète.

  • Dans l'onglet Détails, copiez l'URL du point de terminaison du flux à partir du champ Informations sur le point de terminaison. Vous devez spécifier cette URL de point de terminaison dans votre application cliente.

Créer une clé API pour le flux de webhook

  1. Accédez à la consoleGoogle Cloud > Identifiants.

    Accéder à "Identifiants"

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

  3. Restreignez l'accès à 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 au lieu de la spécifier dans l'URL. Si votre client de webhook n'accepte pas 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 pour 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 vous explique en détail comment créer un webhook sur GitHub pour 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 renforcer la sécurité, 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é côté Google SecOps. Si vous utilisez un code 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 Me laisser sélectionner des événements individuels et cochez les événements concernés (par exemple, Push, Pull Request, Issue). En cas de doute, commencez par L'événement push uniquement.

  8. Assurez-vous que la case à cocher Actif est sélectionnée.

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

Table 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é à 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 security_result.
actor read_only_udm.principal.user.userid Le champ actor, qui représente l'utilisateur effectuant l'action, est mappé à 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 sous forme de 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 d'entreprise 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 Le code temporel created_at est converti au format approprié et mappé à metadata.event_timestamp.
data.cancelled_at read_only_udm.extensions.vulns.vulnerabilities.scan_end_time L'horodatage 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 Le SHA de l'en-tête du champ de données est mappé 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 L'horodatage 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é sous forme de 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 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, la valeur entière est mappée 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é à 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é sous forme de 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 à une paire clé/valeur dans additional.fields et target.location.name. "false" correspond à "PRIVATE", et les autres valeurs correspondent à "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 sous forme de 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 forme de 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é sous forme de 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é sous forme de 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 La route est mappée sous forme de 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é à network.http.response_code.
token_id read_only_udm.additional.fields.[].key, read_only_udm.additional.fields.[].value.string_value L'ID du jeton est mappé sous forme de paire clé/valeur dans additional.fields.
token_scopes read_only_udm.additional.fields.[].key, read_only_udm.additional.fields.[].value.string_value Les niveaux d'accès du jeton sont mappés sous forme de 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 Le 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 associé à 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é sous forme de 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 principale 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 Le SHA de l'exécution du workflow est mappé 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 du workflow d'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 codé 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 faille de sécurité est dérivée des champs level ou SeverityText, s'ils sont présents. "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. Il est converti en majuscules et vérifie 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, s'il est présent, 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, s'ils sont présents, 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, s'il est présent, et convertis en entier non signé.
(Logique de l'analyseur) read_only_udm.network.sent_packets Les paquets envoyés sont dérivés du champ fs_sent, s'il est présent, 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 au 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, s'il est présent.
(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 la destination est dérivé des champs datacenter ou public_repo, s'ils sont présents.
(Logique de l'analyseur) read_only_udm.target.port Le port cible est dérivé des champs client_port, dstp ou remote_port, s'ils sont présents, 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, s'il est présent, et converti en chaîne.
(Logique de l'analyseur) read_only_udm.target.process.pid L'ID du processus cible est dérivé du champ pid, s'il est présent, 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 du groupe d'utilisateurs cible 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, préfixé par "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, s'il est présent.
(Logique de l'analyseur) read_only_udm.principal.port Le port principal est dérivé des champs srcp ou log:source:port, s'ils sont présents, et converti en entier.
(Logique de l'analyseur) read_only_udm.principal.resource.name Le nom de ressource principal 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 d'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 du compte principal 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, s'il est présent, 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, s'ils sont présents.
(Logique de l'analyseur) read_only_udm.metadata.product_log_id L'ID du journal de 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 extraite 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 le niveau de gravité des résultats de sécurité proviennent du champ userid, le cas échéant.
(Logique de l'analyseur) read_only_udm.security_result.summary Le récapitulatif 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 provenance 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, s'ils sont présents, 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 à chaque champ est détaillée dans le code du parseur.
(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 que libellés 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 différents 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, 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.

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