Collecter les journaux Atlassian Bitbucket
Présentation
Ce parseur extrait les champs des journaux JSON Atlassian Bitbucket et les mappe à l'UDM. Il gère différents formats de journaux et remplit les entités principales ou cibles en fonction des champs disponibles, tels que les adresses IP, les ID utilisateur et les informations sur les ressources. Il catégorise également les événements en fonction de l'activité réseau et utilisateur, et enrichit les données avec les conclusions de sécurité, le cas échéant. L'analyseur donne la priorité à agentRealtimeInfo
par rapport à agentDetectionInfo
lors du remplissage des champs.
Avant de commencer
Assurez-vous de remplir les conditions préalables suivantes :
- Instance Google SecOps.
- Accès privilégié à un dépôt.
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 Atlassian Bitbucket).
- Sélectionnez Webhook comme type de source.
- Sélectionnez Atlassian Bitbucket 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
. - Espace de noms de l'élément : espace de noms de l'élément.
- 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 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
- Espace de noms de l'élément : espace de noms de l'élément.
- Libellés d'ingestion : libellé appliqué aux événements de ce flux.
- Nom du flux : valeur préremplie qui identifie le flux.
Type de source : méthode utilisée pour collecter les journaux dans Google SecOps.
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 dans Atlassian Bitbucket
- Dans Bitbucket, accédez aux paramètres du dépôt.
- Cliquez sur Webhooks sous Workflow.
- Cliquez sur Add webhook (Ajouter un Webhook).
- Configurez les champs suivants :
- Titre : indiquez un nom descriptif (par exemple, Google SecOps).
- URL : saisissez l'URL du point de terminaison de l'API Google SecOps.
- État : défini sur Actif.
- Déclencheurs : sélectionnez les événements concernés.
- Cliquez sur Enregistrer.
Table de mappage UDM
Champ de journal | Mappage UDM | Logique |
---|---|---|
agentComputerName |
principal.hostname |
Renseigné à partir de agentRealtimeInfo.agentComputerName . |
agentDetectionInfo.accountId |
metadata.product_deployment_id |
Converti en chaîne. Utilisé si agentRealtimeInfo.accountId n'est pas présent. |
agentDetectionInfo.accountName |
metadata.product_name |
Utilisé si agentRealtimeInfo.accountName n'est pas présent. |
agentDetectionInfo.agentDomain |
principal.administrative_domain |
Mappé directement. |
agentDetectionInfo.agentIpV4 |
target.ip |
Extrait du tableau JSON et fusionné dans le champ target.ip . |
agentDetectionInfo.agentIpV6 |
principal.ip |
Extrait du tableau JSON et fusionné dans le champ principal.ip . |
agentDetectionInfo.agentLastLoggedInUserName |
principal.user.userid |
Analysé pour extraire l'ID utilisateur et le domaine (le cas échéant). Si aucun domaine n'est spécifié, le mappage est effectué directement sur principal.user.userid . |
agentDetectionInfo.agentOsName |
principal.platform_version , principal.asset.platform_software.platform_version |
Utilisé si agentRealtimeInfo.agentOsName n'est pas présent. |
agentDetectionInfo.agentOsRevision |
principal.platform_patch_level , principal.asset.platform_software.platform_patch_level |
Utilisé si agentRealtimeInfo.agentOsRevision n'est pas présent. |
agentDetectionInfo.agentRegisteredAt |
principal.asset.first_discover_time |
Analysé en tant que code temporel ISO8601. |
agentDetectionInfo.agentUuid |
principal.asset_id , principal.asset.asset_id |
Utilisé si agentRealtimeInfo.agentUuid n'est pas présent. Préfixé par "agentUuid:". |
agentDetectionInfo.agentVersion |
metadata.product_version |
Utilisé si agentRealtimeInfo.agentVersion n'est pas présent. |
agentDetectionInfo.externalIp |
target.ip |
Mappé directement. |
agentDetectionInfo.groupId |
principal.user.group_identifiers |
Fusionné dans le champ s'il n'est pas vide ou s'il contient "-". Utilisé si agentRealtimeInfo.groupId n'est pas présent. |
agentDetectionInfo.groupName |
principal.group.group_display_name |
Utilisé si agentRealtimeInfo.groupName n'est pas présent. |
agentDetectionInfo.siteId |
additional.fields |
Ajouté en tant que paire clé-valeur avec la clé "agentDetectionInfo.siteId". Utilisé si agentRealtimeInfo.siteId n'est pas présent. |
agentDetectionInfo.siteName |
additional.fields |
Ajouté en tant que paire clé-valeur avec la clé "agentDetectionInfo.siteName". Utilisé si agentRealtimeInfo.siteName n'est pas présent. |
agentRealtimeInfo.accountId |
metadata.product_deployment_id |
Converti en chaîne. |
agentRealtimeInfo.accountName |
metadata.product_name |
Mappé directement. |
agentRealtimeInfo.agentComputerName |
principal.hostname , principal.asset.hostname |
Mappé directement. |
agentRealtimeInfo.agentId |
principal.asset_id , principal.asset.asset_id |
Préfixé par "agentId:". |
agentRealtimeInfo.agentMachineType |
principal.asset.category |
Mappé directement. |
agentRealtimeInfo.agentOsName |
principal.platform_version , principal.asset.platform_software.platform_version |
Mappé directement. |
agentRealtimeInfo.agentOsRevision |
principal.platform_patch_level , principal.asset.platform_software.platform_patch_level |
Mappé directement. |
agentRealtimeInfo.agentOsType |
principal.asset.platform_software.platform , principal.platform |
Mappé sur WINDOWS, MAC ou LINUX en fonction de la valeur. |
agentRealtimeInfo.agentUuid |
principal.asset_id , principal.asset.asset_id |
Mappé directement. Préfixé par "agentUuid:". |
agentRealtimeInfo.agentVersion |
metadata.product_version |
Mappé directement. |
agentRealtimeInfo.groupId |
principal.user.group_identifiers |
Fusionné dans le champ s'il n'est pas vide ou s'il contient "-". |
agentRealtimeInfo.groupName |
principal.group.group_display_name |
Mappé directement. |
agentRealtimeInfo.siteId |
additional.fields |
Ajouté en tant que paire clé-valeur avec la clé "agentDetectionInfo.siteId". |
agentRealtimeInfo.siteName |
additional.fields |
Ajouté en tant que paire clé-valeur avec la clé "agentDetectionInfo.siteName". |
associatedItems.0.id |
principal.resource.id |
Mappé directement. |
associatedItems.0.name |
principal.resource.name |
Mappé directement. |
associatedItems.0.typeName |
principal.resource.resource_subtype |
Mappé directement. |
authorAccountId |
principal.user.userid |
Mappé directement. |
category |
metadata.product_event_type |
Mappé directement. Si elle n'est pas présente et que le message contient des "menaces", définissez-la sur "Menaces". |
id |
metadata.product_log_id |
Converti en chaîne. |
indicators.0.description |
security_result.description |
Mappé directement. |
objectItem.id |
additional.fields |
Ajouté en tant que paire clé-valeur avec la clé "objectItem.id". |
objectItem.name |
additional.fields |
Ajouté en tant que paire clé-valeur avec la clé "objectItem.name". |
objectItem.typeName |
additional.fields |
Ajouté en tant que paire clé-valeur avec la clé "objectItem.typeName". |
remoteAddress |
principal.ip |
Mappé directement. |
summary |
security_result.summary |
Mappé directement. |
threatInfo.classification |
security_result.category_details |
Mappé directement. Également utilisé pour déterminer security_result.category . |
threatInfo.collectionId |
metadata.ingestion_labels |
Ajoutée en tant que paire clé-valeur avec la clé "alert_aggregation_value". |
threatInfo.confidenceLevel |
security_result.confidence_details |
Mappé directement. Également utilisé pour déterminer security_result.confidence . |
threatInfo.createdAt |
metadata.collected_timestamp |
Analysé en tant que code temporel ISO8601. |
threatInfo.detectionEngines |
metadata.ingestion_labels |
Les éléments key et title de chaque élément sont ajoutés en tant que paires clé/valeur. |
threatInfo.fileExtensionType |
target.process.file.mime_type |
Mappé directement. |
threatInfo.filePath |
target.file.full_path |
Mappé directement. |
threatInfo.fileSize |
target.file.size |
Converti en chaîne, puis en entier non signé. |
threatInfo.identifiedAt |
event_timestamp |
Analysé en tant que code temporel ISO8601. |
threatInfo.maliciousProcessArguments |
principal.process.command_line |
Mappé directement. Également utilisé dans le champ security_result.summary si summary n'est pas présent. |
threatInfo.md5 |
target.file.md5 |
Mappé directement. |
threatInfo.originatorProcess |
target.process.parent_process.file.full_path |
Mappé directement. Également utilisé dans le champ security_result.summary si summary n'est pas présent. |
threatInfo.processUser |
target.user.userid |
Mappé directement. |
threatInfo.sha1 |
target.file.sha1 |
Mappé directement. |
threatInfo.sha256 |
target.file.sha256 |
Mappé directement. |
threatInfo.storyline |
principal.process.product_specific_process_id |
Préfixé par "ID:". |
threatInfo.threatId |
security_result.threat_id |
Mappé directement. |
threatInfo.threatName |
security_result.threat_name , target.file.names |
Mappé et fusionné directement dans target.file.names . Également utilisé dans le champ security_result.summary si summary n'est pas présent. Définissez-le sur "GENERIC_EVENT" (ÉVÉNEMENT GÉNÉRIQUE) au départ. Passé à "NETWORK_UNCATEGORIZED", "STATUS_UPDATE" ou "USER_UNCATEGORIZED" en fonction de la présence du principal et de l'IP/du nom d'hôte/de l'utilisateur cible. Copié depuis le champ event.type . Définissez-le sur "Atlassian Bitbucket". Définissez-le initialement sur "Atlassian Bitbucket". Peut être remplacé par agentRealtimeInfo.accountName ou agentDetectionInfo.accountName . |
timestamp |
metadata.event_timestamp , timestamp |
Mappé directement. |
Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.