Collecter les journaux Datadog
Présentation
Ce parseur extrait les champs des journaux Datadog, effectue plusieurs mutations et correspondances Grok pour structurer les données, et mappe les champs extraits à l'UDM. Il gère différents formats de journaux dans le champ message, y compris les paires clé/valeur et les objets JSON, et convertit des champs spécifiques en libellés et champs supplémentaires conformes à l'UDM.
Avant de commencer
Assurez-vous de remplir les conditions préalables suivantes :
- Instance Google SecOps.
- Accès privilégié à Google Cloud IAM.
- Accès privilégié à Cloud Storage.
- l'accès des utilisateurs à
logs_write_archive
;
Option 1 : Partage de journaux Datadog via la configuration Cloud Storage
Configurer l'intégration de Datadog avec la plate-forme Google Cloud
- Configurez une intégration pour Google Cloud Platform dans Datadog. Pour en savoir plus, consultez la section Configurer l'intégration de Datadog Google Cloud .
Créer un bucket de stockage Google Cloud
- Connectez-vous à la console Google Cloud .
Accédez à la page Buckets Cloud Storage.
Cliquez sur Créer.
Sur la page Créer un bucket, saisissez les informations concernant votre bucket. Après chacune de ces étapes, cliquez sur Continuer pour passer à l'étape suivante :
Dans la section Premiers pas, procédez comme suit :
- Saisissez un nom unique qui répond aux exigences de dénomination des buckets (par exemple, datadog-data).
Pour activer l'espace de noms hiérarchique, cliquez sur la flèche d'expansion pour développer la section Optimiser pour les charges de travail orientées fichiers et à forte intensité de données, puis sélectionnez Activer l'espace de noms hiérarchique sur ce bucket.
Pour ajouter une étiquette de bucket, cliquez sur la flèche de développement pour développer la section Étiquettes.
Cliquez sur Ajouter un libellé, puis spécifiez une clé et une valeur pour votre libellé.
Dans la section Choisir l'emplacement de stockage de vos données, procédez comme suit :
- Sélectionnez un type d'emplacement.
- Utilisez le menu déroulant du type d'emplacement pour sélectionner un emplacement où les données d'objets de votre bucket seront stockées de manière permanente.
- Si vous sélectionnez le type d'emplacement birégional, vous pouvez également choisir d'activer la réplication turbo à l'aide de la case à cocher correspondante.
- Pour configurer la réplication entre buckets, développez la section Configurer la réplication entre buckets.
Dans la section Choisir une classe de stockage pour vos données, sélectionnez une classe de stockage par défaut pour le bucket, ou bien classe automatique pour une gestion automatique des classes de stockage des données de votre bucket.
Dans la section Choisir comment contrôler l'accès aux objets, sélectionnez non pour appliquer la protection contre l'accès public, puis sélectionnez un modèle de contrôle des accès pour les objets de votre bucket.
Dans la section Choisir comment protéger les données d'objet, procédez comme suit :
- Sélectionnez l'une des options sous Protection des données que vous souhaitez définir pour votre bucket.
- Pour choisir comment vos données d'objet seront chiffrées, cliquez sur la flèche d'expansion intitulée Chiffrement des données, puis sélectionnez une méthode de chiffrement des données.
Cliquez sur Créer.
Créer un compte de service Google Cloud
- Accédez à IAM et administration > Comptes de service.
- Créez un compte de service.
- Attribuez-lui un nom descriptif (par exemple, datadog-user).
- Attribuez au compte de service le rôle Administrateur des objets de l'espace de stockage sur le bucket Cloud Storage que vous avez créé à l'étape précédente.
- Créez une clé SSH pour le compte de service.
- Téléchargez un fichier de clé JSON pour le compte de service. Conservez ce fichier dans un endroit sécurisé.
Configurer Datadog pour envoyer des journaux à Cloud Storage
- Connectez-vous à Datadog à l'aide d'un compte avec accès privilégié.
- Accédez à Journaux > Transfert de journaux.
- Cliquez sur + Créer une archive.
- Sélectionnez Google Cloud Storage.
- Saisissez les paramètres requis, puis cliquez sur Enregistrer.
Option 2 : Partager les journaux Datadog via la configuration Webhook
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 Datadog).
- Sélectionnez Webhook comme type de source.
- Sélectionnez Datadog 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 Chronicle.
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 l'authentification auprès de Google SecOps.SECRET
: clé secrète que vous avez générée pour authentifier le flux.
Configurer Datadog pour envoyer des journaux à un webhook
- Connectez-vous à Datadog à l'aide d'un compte avec accès privilégié.
- Accédez à Journaux > Transfert de journaux.
- Sélectionnez Destinations personnalisées.
- Cliquez sur + Créer une destination.
- Spécifiez les valeurs des paramètres d'entrée suivants :
- Choisissez un type de destination : sélectionnez HTTP.
- Nommez la destination : donnez un nom descriptif au webhook (par exemple, Webhook Google SecOps).
- Configurez la destination : saisissez ENDPOINT_URL, suivi de API_KEY et SECRET.
- Configurer les paramètres d'authentification : ajoutez un en-tête général comme suit. Cela ne déformera pas la requête HTTP et permettra à Datadog de terminer la création du webhook.
- Nom de l'en-tête :
Accept
. - Valeur d'en-tête :
application/json
.
- Nom de l'en-tête :
- Cliquez sur Enregistrer.
Liens de référence :
Table de mappage UDM
Champ de journal | Mappage UDM | Logique |
---|---|---|
_id |
read_only_udm.metadata.product_log_id |
Mappé directement à partir du champ _id . |
alert |
read_only_udm.security_result.about.resource.attribute.labels |
Extrait du champ alert et ajouté en tant que libellé dans l'objet security_result . |
attributes.@timestamp |
read_only_udm.metadata.event_timestamp |
L'horodatage de l'événement est extrait du champ attributes.@timestamp et converti en secondes et en nanosecondes. |
attributes.@version |
read_only_udm.metadata.product_version |
Mappé directement à partir du champ attributes.@version . |
attributes.level_value |
read_only_udm.security_result.about.resource.attribute.labels |
Extrait du champ attributes.level_value et ajouté en tant que libellé dans l'objet security_result . |
attributes.logger_name |
read_only_udm.principal.application |
Mappé directement à partir du champ attributes.logger_name . |
attributes._trace.baggage._sli_service |
read_only_udm.additional.fields |
Mappé directement à partir du champ attributes._trace.baggage._sli_service et ajouté en tant que champ supplémentaire. |
attributes._trace.baggage.device_id |
read_only_udm.principal.asset.asset_id |
Mappé directement à partir du champ attributes._trace.baggage.device_id , avec le préfixe "Device Id:". |
attributes._trace.origin.operation |
read_only_udm.metadata.product_event_type |
Mappé directement à partir du champ attributes._trace.origin.operation . |
caller |
read_only_udm.security_result.about.resource.attribute.labels |
Extrait du champ caller et ajouté en tant que libellé dans l'objet security_result . |
component |
read_only_udm.security_result.about.resource.attribute.labels |
Extrait du champ component et ajouté en tant que libellé dans l'objet security_result . |
context.AlertName |
read_only_udm.security_result.threat_name |
Mappé directement à partir du champ context.AlertName . |
context.BusArch |
read_only_udm.security_result.about.resource.attribute.labels |
Extrait du champ context.BusArch et ajouté en tant que libellé dans l'objet security_result . |
context.CANDBVersion |
read_only_udm.security_result.about.resource.attribute.labels |
Extrait du champ context.CANDBVersion et ajouté en tant que libellé dans l'objet security_result . |
context.esn |
read_only_udm.security_result.about.resource.attribute.labels |
Extrait du champ context.esn et ajouté en tant que libellé dans l'objet security_result . |
context.ftcpVersion |
read_only_udm.security_result.about.resource.attribute.labels |
Extrait du champ context.ftcpVersion et ajouté en tant que libellé dans l'objet security_result . |
context.ingestMessageId |
read_only_udm.security_result.about.resource.attribute.labels |
Extrait du champ context.ingestMessageId et ajouté en tant que libellé dans l'objet security_result . |
context.redactedVin |
read_only_udm.security_result.about.resource.attribute.labels |
Extrait du champ context.redactedVin et ajouté en tant que libellé dans l'objet security_result . |
context.vehicleId |
read_only_udm.security_result.about.resource.attribute.labels |
Extrait du champ context.vehicleId et ajouté en tant que libellé dans l'objet security_result . |
date |
read_only_udm.metadata.collected_timestamp |
L'horodatage de collecte est extrait du champ date (renommé date1 dans l'analyseur) et converti en secondes et en nanosecondes. |
host |
read_only_udm.principal.hostname |
Mappé directement à partir du champ host . |
message |
read_only_udm.security_result.about.resource.attribute.labels |
Le champ message est analysé, et certaines de ses parties sont utilisées pour remplir les champs summary et json_data. La partie restante est traitée comme des paires clé-valeur et ajoutée en tant que libellés dans l'objet security_result. |
msg |
read_only_udm.security_result.about.resource.attribute.labels |
Extrait du champ msg et ajouté en tant que libellé dans l'objet security_result . |
service |
read_only_udm.metadata.product_name |
Mappé directement à partir du champ service . |
status |
read_only_udm.security_result.severity |
La gravité est déterminée en fonction du champ status . "INFO", "DEBUG", "debug" et "info" correspondent à "LOW", "WARN" correspond à "MEDIUM", et les autres valeurs ne sont pas explicitement mappées dans l'extrait de code fourni. |
tags |
read_only_udm.additional.fields |
Chaque tag du tableau tags est analysé en paires clé/valeur et ajouté en tant que champs supplémentaires. |
N/A | read_only_udm.metadata.event_type |
Définissez-le sur "STATUS_UPDATE" si le champ host est présent, et sur "GENERIC_EVENT" dans le cas contraire. |
Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.