Collecter les journaux d'audit GitHub
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 :
- Accédez à Paramètres SIEM > Flux.
- Cliquez sur Add New Feed (Ajouter un flux).
- Sur la page suivante, cliquez sur Configurer un seul flux.
- 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 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
.
- Délimiteur de fractionnement : délimiteur utilisé pour séparer les lignes de journaux, tel que
- Cliquez sur Suivant.
- Vérifiez la configuration du flux sur 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 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.
- 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
Accédez à la consoleGoogle Cloud > Identifiants.
Cliquez sur Créer des identifiants, puis sélectionnez Clé API.
Restreignez l'accès à 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 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.
- 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 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.
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.Assurez-vous que la case à cocher Actif est sélectionnée.
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.