Collecter les journaux d'audit GitHub
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
- Accédez à Paramètres du SIEM > Flux.
- Cliquez sur Ajouter.
- Dans le champ Nom du flux, saisissez un nom pour le flux (par exemple, Journaux GitHub).
- Sélectionnez Webhook comme type de source.
- Sélectionnez GitHub comme Type de journal.
- Cliquez sur Suivant.
- 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.
- Délimiteur de fractionnement: délimiteur utilisé pour séparer les lignes de journal, par exemple
- Cliquez sur Suivant.
- Vérifiez la configuration du flux dans l'écran Finaliser, puis cliquez sur Envoyer.
- 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 cette action rend la clé secrète précédente obsolète.
- 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.
- Cliquez sur OK.
Créer une clé API pour le flux webhook
Accédez à la console Google Cloud > Identifiants.
Cliquez sur Créer des identifiants, puis sélectionnez Clé API.
Limitez l'accès de la clé API à l'API Google Security Operations.
Spécifier l'URL du point de terminaison
- Dans votre application cliente, spécifiez l'URL du point de terminaison HTTPS fournie dans le flux de webhook.
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.
- Accédez à votre dépôt GitHub.
- Accédez à Paramètres.
- Cliquez sur Webhooks.
- Cliquez sur Add webhook (Ajouter un Webhook).
- Dans le champ URL de la charge utile, saisissez l'URL du point de terminaison de l'API Google SecOps.
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.
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énementpush
).Assurez-vous que la case Active est cochée.
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.