Collecter les journaux Sysdig
Ce parseur extrait les données des événements de sécurité des journaux JSON Sysdig, puis transforme et mappe les champs de journaux bruts au format UDM Google Security Operations. Il gère différents champs, y compris les métadonnées, les informations sur le principal ou la cible, les détails des résultats de sécurité et le contexte lié à Kubernetes, ce qui enrichit les données pour l'analyse dans Google SecOps. L'analyseur effectue également des conversions de types de données, gestion des exceptions et applique une logique conditionnelle en fonction des valeurs des champs pour garantir une représentation précise et complète de l'UDM.
Avant de commencer
Assurez-vous de remplir les conditions préalables suivantes :
- Instance Google SecOps.
- Accès privilégié à Sysdig Secure.
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.
Option 1
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 Sysdig).
- Sélectionnez Webhook comme type de source.
- Sélectionnez Sysdig 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.
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 le webhook dans Sysdig
- Connectez-vous à Sysdig Secure avec des droits d'administrateur.
- Accédez à Profil > Paramètres > Transfert d'événements.
- Cliquez sur + Ajouter une intégration, puis sélectionnez Webhook dans le menu déroulant.
Spécifiez les valeurs des paramètres d'entrée suivants :
- Nom de l'intégration : donnez un nom descriptif au webhook (par exemple, Webhook Google SecOps).
- Point de terminaison : saisissez le webhook
<ENDPOINT_URL>
, suivi de<API_KEY
et<SECRET>
. Données à envoyer : sélectionnez dans le menu déroulant les types de données Sysdig à transférer.
Testez l'intégration, puis activez-la en cliquant sur Activé.
Cliquez sur Enregistrer.
Option 2
Transférer des données directement vers Google SecOps
- Connectez-vous à Sysdig Secure à l'aide de vos identifiants d'administrateur.
- Accédez à Paramètres > Transfert d'événements.
- Cliquez sur + Ajouter une intégration, puis sélectionnez Google Chronicle dans le menu déroulant.
- Spécifiez les valeurs des paramètres d'entrée suivants :
- Nom de l'intégration : donnez un nom descriptif à l'intégration (par exemple, Intégration Google SecOps).
- Numéro client : numéro client Google associé à votre compte Google Cloud . (Dans Google SecOps, accédez à Paramètres > Profil.)
- Espace de noms : facultatif. Utilisez-le comme tag pour identifier le domaine de données approprié pour l'indexation et l'enrichissement.
- Identifiants JSON : importez vos identifiants JSON Google SecOps.
- Région : sélectionnez votre région, par exemple "États-Unis", "Europe" ou "Asie".
- Données à envoyer : sélectionnez les types de données Sysdig à transférer dans le menu déroulant.
- Testez l'intégration, puis activez-la en cliquant sur Activé.
- Cliquez sur Enregistrer.
Table de mappage UDM
Champ de journal | Mappage UDM | Logique |
---|---|---|
agentId |
read_only_udm.metadata.product_deployment_id |
La valeur de agentId du journal brut est directement mappée sur ce champ UDM. |
category |
read_only_udm.security_result.category_details |
La valeur de category du journal brut est directement mappée sur ce champ UDM. |
content.fields.container.id |
read_only_udm.target.asset.asset_id |
La valeur de content.fields.container.id du journal brut est précédée de "container_id:" et mappée à ce champ UDM. Utilisé si containerId est vide. |
content.fields.container.image.repository |
read_only_udm.target.file.full_path |
La valeur de content.fields.container.image.repository du journal brut est directement mappée sur ce champ UDM. |
content.fields.container.image.tag |
read_only_udm.metadata.ingestion_labels.value où la clé est tag |
La valeur de content.fields.container.image.tag du journal brut est directement mappée sur ce champ UDM. |
content.fields.evt.res |
read_only_udm.metadata.ingestion_labels.value où la clé est evt_res |
La valeur de content.fields.evt.res du journal brut est directement mappée sur ce champ UDM. |
content.fields.evt.type |
read_only_udm.metadata.event_type |
La valeur de content.fields.evt.type du journal brut est directement mappée sur ce champ UDM. |
content.fields.falco.rule |
read_only_udm.security_result.rule_name |
La valeur de content.fields.falco.rule du journal brut est directement mappée sur ce champ UDM. Utilisé si content.ruleName est vide. |
content.fields.group.gid |
read_only_udm.target.group.product_object_id |
La valeur de content.fields.group.gid du journal brut est directement mappée sur ce champ UDM. |
content.fields.group.name |
read_only_udm.target.group.group_display_name |
La valeur de content.fields.group.name du journal brut est directement mappée sur ce champ UDM. |
content.fields.proc.cmdline |
read_only_udm.target.process.command_line |
La valeur de content.fields.proc.cmdline du journal brut est directement mappée sur ce champ UDM. |
content.fields.proc.pcmdline |
read_only_udm.target.process.parent_process.command_line |
La valeur de content.fields.proc.pcmdline du journal brut est directement mappée sur ce champ UDM. |
content.fields.proc.pid |
read_only_udm.target.process.pid |
La valeur de content.fields.proc.pid du journal brut est directement mappée sur ce champ UDM. |
content.fields.proc.ppid |
read_only_udm.target.process.parent_process.pid |
La valeur de content.fields.proc.ppid du journal brut est directement mappée sur ce champ UDM. |
content.fields.proc.sid |
read_only_udm.metadata.ingestion_labels.value où la clé est sid |
La valeur de content.fields.proc.sid du journal brut est directement mappée sur ce champ UDM. |
content.fields.user.loginname |
read_only_udm.principal.user.user_display_name |
La valeur de content.fields.user.loginname du journal brut est directement mappée sur ce champ UDM. |
content.fields.user.uid |
read_only_udm.principal.user.userid |
La valeur de content.fields.user.uid du journal brut est directement mappée sur ce champ UDM. |
content.output |
read_only_udm.additional.fields.value.string_value où la clé est content_output |
La valeur de content.output du journal brut est directement mappée sur ce champ UDM. |
content.policyId |
read_only_udm.security_result.rule_id |
La valeur de content.policyId du journal brut est directement mappée sur ce champ UDM. |
content.policyOrigin |
read_only_udm.additional.fields.value.string_value où la clé est content_policyOrigin |
La valeur de content.policyOrigin du journal brut est directement mappée sur ce champ UDM. |
content.policyVersion |
read_only_udm.additional.fields.value.string_value où la clé est content_policyVersion |
La valeur de content.policyVersion du journal brut est directement mappée sur ce champ UDM. |
content.ruleName |
read_only_udm.security_result.rule_name |
La valeur de content.ruleName du journal brut est directement mappée sur ce champ UDM. |
content.ruleTags |
read_only_udm.security_result.rule_labels |
Les valeurs du tableau content.ruleTags du journal brut sont mappées à ce champ UDM, avec des clés générées de manière dynamique sous la forme "ruletag_index". |
content.ruleType |
read_only_udm.additional.fields.value.string_value où la clé est content_ruleType |
La valeur de content.ruleType du journal brut est directement mappée sur ce champ UDM. |
containerId |
read_only_udm.target.asset.asset_id |
La valeur de containerId du journal brut est précédée de "container_id:" et mappée à ce champ UDM. |
description |
read_only_udm.metadata.description |
La valeur de description du journal brut est directement mappée sur ce champ UDM. |
id |
read_only_udm.metadata.product_log_id |
La valeur de id du journal brut est directement mappée sur ce champ UDM. |
labels.container.label.io.kubernetes.container.name |
read_only_udm.additional.fields.value.string_value où la clé est container_name |
La valeur de labels.container.label.io.kubernetes.container.name du journal brut est directement mappée sur ce champ UDM. |
labels.container.label.io.kubernetes.pod.name |
read_only_udm.additional.fields.value.string_value où la clé est pod_name |
La valeur de labels.container.label.io.kubernetes.pod.name du journal brut est directement mappée sur ce champ UDM. Utilisé si labels.kubernetes.pod.name est vide. |
labels.container.label.io.kubernetes.pod.namespace |
read_only_udm.principal.namespace |
La valeur de labels.container.label.io.kubernetes.pod.namespace du journal brut est directement mappée sur ce champ UDM. Utilisé si labels.kubernetes.namespace.name est vide. |
labels.aws.instanceId |
read_only_udm.target.resource.product_object_id |
La valeur de labels.aws.instanceId du journal brut est directement mappée sur ce champ UDM. |
labels.aws.region |
read_only_udm.target.resource.attribute.cloud.availability_zone |
La valeur de labels.aws.region du journal brut est directement mappée sur ce champ UDM. |
labels.host.hostName |
read_only_udm.principal.ip OU read_only_udm.principal.hostname |
Si la valeur contient "ip", elle est analysée en tant qu'adresse IP et mappée sur principal.ip . Sinon, il est mappé sur principal.hostname . |
labels.host.mac |
read_only_udm.principal.mac |
La valeur de labels.host.mac du journal brut est directement mappée sur ce champ UDM. Utilisé si machineId est vide. |
labels.kubernetes.cluster.name |
read_only_udm.additional.fields.value.string_value où la clé est kubernetes_cluster_name |
La valeur de labels.kubernetes.cluster.name du journal brut est directement mappée sur ce champ UDM. |
labels.kubernetes.deployment.name |
read_only_udm.additional.fields.value.string_value où la clé est kubernetes_deployment_name |
La valeur de labels.kubernetes.deployment.name du journal brut est directement mappée sur ce champ UDM. |
labels.kubernetes.namespace.name |
read_only_udm.principal.namespace |
La valeur de labels.kubernetes.namespace.name du journal brut est directement mappée sur ce champ UDM. |
labels.kubernetes.node.name |
read_only_udm.additional.fields.value.string_value où la clé est kubernetes_node_name |
La valeur de labels.kubernetes.node.name du journal brut est directement mappée sur ce champ UDM. |
labels.kubernetes.pod.name |
read_only_udm.additional.fields.value.string_value où la clé est pod_name |
La valeur de labels.kubernetes.pod.name du journal brut est directement mappée sur ce champ UDM. |
labels.kubernetes.service.name |
read_only_udm.additional.fields.value.string_value où la clé est kubernetes_service_name |
La valeur de labels.kubernetes.service.name du journal brut est directement mappée sur ce champ UDM. |
machineId |
read_only_udm.principal.mac |
La valeur de machineId du journal brut est directement mappée sur ce champ UDM. |
name |
read_only_udm.security_result.summary |
La valeur de name du journal brut est directement mappée sur ce champ UDM. |
severity |
read_only_udm.security_result.severity |
La valeur de severity du journal brut est mappée à une valeur de chaîne en fonction de ces plages : <4 = HIGH, >3 et <6 = MEDIUM, 6 = LOW, 7 = INFORMATIONAL. |
source |
read_only_udm.security_result.description |
La valeur de source du journal brut est directement mappée sur ce champ UDM. |
timestampRFC3339Nano |
read_only_udm.metadata.event_timestamp |
La valeur de timestampRFC3339Nano du journal brut est analysée en tant qu'horodatage et mappée à ce champ UDM. |
type |
read_only_udm.metadata.product_event_type |
La valeur de type du journal brut est directement mappée sur ce champ UDM. |
(Logique de l'analyseur) | read_only_udm.metadata.product_name |
Codé en dur sur "SYSDIG". |
(Logique de l'analyseur) | read_only_udm.metadata.vendor_name |
Codé en dur sur "SYSDIG". |
(Logique de l'analyseur) | read_only_udm.metadata.event_type |
La valeur par défaut est "PROCESS_UNCATEGORIZED" ou "GENERIC_EVENT" si labels.host.hostName est vide. |
(Logique de l'analyseur) | read_only_udm.metadata.log_type |
Codé en dur sur "SYSDIG". |
(Logique de l'analyseur) | read_only_udm.target.resource.resource_type |
Définissez sur "CLOUD_PROJECT" si labels.aws.instanceId existe. |
Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.