Collecter les journaux Sysdig
Cet analyseur extrait les données des événements de sécurité à partir des journaux JSON Sysdig, en transformant et en mappant les champs de journal bruts au format UDM de Google Security Operations. Il gère divers champs, y compris les métadonnées, les informations sur l'utilisateur principal/cible, les détails des résultats de sécurité et le contexte lié à Kubernetes, ce qui enrichit les données à analyser dans Google SecOps. L'analyseur effectue également des conversions de type de données, une gestion des erreurs et une logique conditionnelle en fonction des valeurs des champs pour garantir une représentation UDM précise et complète.
Avant de commencer
- Assurez-vous de disposer d'une instance Google SecOps.
- Assurez-vous de disposer d'un accès privilégié à Sysdig Secure.
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.
Option 1
Configurer un flux Webhook dans Google SecOps pour ingérer les journaux Sysdig
- Accédez à Paramètres du SIEM > Flux.
- Cliquez sur Ajouter.
- Dans le champ Nom du flux, saisissez un nom pour le flux (par exemple, Sysdig Logs).
- Sélectionnez Webhook comme type de source.
- Sélectionnez Sysdig 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.
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 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: indiquez un nom descriptif pour le webhook (par exemple, Webhook Google SecOps).
- Point de terminaison: saisissez le webhook
<ENDPOINT_URL>
, suivi de<API_KEY
et de<SECRET>
. Données à envoyer: dans le menu déroulant, sélectionnez 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 les données directement vers Google SecOps
- Connectez-vous à Sysdig Secure à l'aide de vos identifiants 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: indiquez un nom descriptif pour l'intégration (par exemple, Intégration Google SecOps).
- Numéro client: numéro client Google associé à votre compte GCP. (dans Google SecOps, accédez à Paramètres > Profil).
- Espace de noms : facultatif. Utilisez-le comme balise pour identifier le domaine de données approprié à l'indexation et à l'enrichissement.
- Identifiants JSON: importez vos identifiants JSON Google SecOps.
- Région: sélectionnez votre région, par exemple les États-Unis, l'Europe ou l'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.
Tableau 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 mappée directement sur ce champ UDM. |
category |
read_only_udm.security_result.category_details |
La valeur de category du journal brut est mappée directement 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 sur 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 mappée directement 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 mappée directement 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 mappée directement 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 mappée directement 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 mappée directement 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 mappée directement 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 mappée directement 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 mappée directement 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 mappée directement 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 mappée directement 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 mappée directement 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 mappée directement 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 mappée directement 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 mappée directement 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 mappée directement sur ce champ UDM. |
content.policyId |
read_only_udm.security_result.rule_id |
La valeur de content.policyId du journal brut est mappée directement 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 mappée directement 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 mappée directement sur ce champ UDM. |
content.ruleName |
read_only_udm.security_result.rule_name |
La valeur de content.ruleName du journal brut est mappée directement 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 sur 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 mappée directement 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 sur ce champ UDM. |
description |
read_only_udm.metadata.description |
La valeur de description du journal brut est mappée directement sur ce champ UDM. |
id |
read_only_udm.metadata.product_log_id |
La valeur de id du journal brut est mappée directement 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 mappée directement 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 mappée directement 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 mappée directement 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 mappée directement 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 mappée directement 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 mappée directement 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 mappée directement 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 mappée directement sur ce champ UDM. |
labels.kubernetes.namespace.name |
read_only_udm.principal.namespace |
La valeur de labels.kubernetes.namespace.name du journal brut est mappée directement 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 mappée directement 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 mappée directement 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 mappée directement sur ce champ UDM. |
machineId |
read_only_udm.principal.mac |
La valeur de machineId du journal brut est mappée directement sur ce champ UDM. |
name |
read_only_udm.security_result.summary |
La valeur de name du journal brut est mappée directement sur ce champ UDM. |
severity |
read_only_udm.security_result.severity |
La valeur de severity du journal brut est mappée sur une valeur de chaîne basée sur ces plages: <4 = ÉLEVÉ, >3 et <6 = MOYEN, 6 = BAS, 7 = INFORMATIONNEL. |
source |
read_only_udm.security_result.description |
La valeur de source du journal brut est mappée directement 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 sur ce champ UDM. |
type |
read_only_udm.metadata.product_event_type |
La valeur de type du journal brut est mappée directement sur ce champ UDM. |
(Logique de l'analyseur) | read_only_udm.metadata.product_name |
Code codé en dur sur "SYSDIG". |
(Logique de l'analyseur) | read_only_udm.metadata.vendor_name |
Code codé en dur sur "SYSDIG". |
(Logique de l'analyseur) | read_only_udm.metadata.event_type |
Défini sur "PROCESS_UNCATEGORIZED" par défaut, ou sur "GENERIC_EVENT" si labels.host.hostName est vide. |
(Logique de l'analyseur) | read_only_udm.metadata.log_type |
Code codé en dur sur "SYSDIG". |
(Logique de l'analyseur) | read_only_udm.target.resource.resource_type |
Défini sur "CLOUD_PROJECT" si labels.aws.instanceId existe. |
Modifications
2024-01-05
- Lorsque "severity" est égal à 0, 1, 2 ou 3, le mappage de "security_result.severity" est modifié de "LOW" à "HIGH".
- Lorsque "severity" est défini sur 6, la valeur "HIGH" a été remplacée par "LOW" pour la mise en correspondance de "security_result.severity".
- Lorsque la valeur de "severity" est 7, la valeur de "security_result.severity" est modifiée de "HIGH" (ÉLEVÉ) à "INFORMATIONAL".
- Ajout de "drop" pour les journaux qui ne sont pas au format JSON.
- Ajout de "on_error" à la mise en correspondance de date "timestampRFC3339Nano".
2022-10-07
- Analyseur nouvellement créé.
Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.