Collecter les journaux Cisco Catalyst Center (anciennement DNA Center)

Version de l'analyseur : 2.0

Compatible avec :

Ce document explique comment ingérer les journaux Cisco Catalyst Center (anciennement DNA Center) dans Google Security Operations à l'aide de deux approches différentes. Choisissez l'option qui correspond le mieux à votre environnement et à vos exigences.

Cisco Catalyst Center est une plate-forme centralisée de gestion et d'automatisation des réseaux pour les campus d'entreprise, les succursales et les réseaux IoT. Il fournit une mise en réseau basée sur l'intent, une gestion des règles, une préparation des appareils, des analyses d'assurance et une détection des problèmes basée sur l'IA sur l'infrastructure filaire et sans fil. Catalyst Center génère des événements liés à l'état du réseau, aux changements d'état des appareils, aux cas de non-respect des règles de sécurité et aux problèmes d'assurance.

Avant de commencer

Assurez-vous de remplir les conditions suivantes :

  • Une instance Google SecOps.
  • Accès privilégié à la console de gestion Cisco Catalyst Center.
  • Pour l'option 1 : Windows Server 2016 ou version ultérieure, ou un hôte Linux avec systemd pour l'agent Bindplane.
  • Pour l'option 2 : connectivité réseau entre Cisco Catalyst Center et le point de terminaison du webhook Google SecOps.

Option 1 : Intégration de Syslog à l'aide de l'agent Bindplane

Cette option utilise le transfert syslog de Cisco Catalyst Center vers l'agent Bindplane, qui transfère ensuite les journaux structurés vers Google SecOps.

Obtenir des identifiants Google SecOps pour l'agent BindPlane

Pour authentifier l'agent Bindplane auprès de Google SecOps, choisissez l'une des méthodes suivantes :

  • Nouveaux déploiements : utilisez l'API Chronicle (option 1).
  • Déploiements existants : continuez à utiliser le fichier d'authentification pour l'ingestion (option 2) jusqu'à l'arrêt de l'API Ingestion le 20 juillet 2027.
  1. Connectez-vous à la consoleGoogle Cloud et sélectionnez le projet Google Cloud associé à votre instance Google SecOps.
  2. Accédez à IAM et administration > Comptes de service.
  3. Cliquez sur Créer un compte de service.
  4. Fournissez les informations de configuration suivantes :
    • Nom du compte de service : saisissez un nom pour le compte (par exemple, bindplane-ingest).
    • Description du compte de service : saisissez une description (par exemple, Bindplane agent log ingestion).
  5. Cliquez sur Créer et continuer.
  6. Dans la section Autoriser ce compte de service à accéder au projet, cliquez sur Sélectionner un rôle, puis sélectionnez Éditeur Chronicle.
  7. Cliquez sur Continue (Continuer), puis sur Done (OK).
  8. Cliquez sur le compte de service que vous avez créé, puis accédez à l'onglet Clés.
  9. Cliquez sur Ajouter une clé > Créer une clé.
  10. Sélectionnez JSON, puis cliquez sur Créer. Le fichier de clé est téléchargé sur votre ordinateur.
  11. Enregistrez le fichier de clé sous le nom ingestion-auth.json dans le répertoire du collecteur Bindplane (/opt/observiq-otel-collector/ingestion-auth.json sous Linux ou C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json sous Windows), ou mettez à jour creds_file_path dans config.yaml pour qu'il corresponde au chemin d'accès où vous l'enregistrez.
  12. Accédez à IAM et administration > Paramètres, puis copiez le numéro du projet. Vous en aurez besoin pour la configuration de l'exportateur.

Option 2 : Télécharger le fichier d'authentification d'ingestion (ancien)

  1. Connectez-vous à la console Google SecOps.
  2. Accédez à Paramètres SIEM> Agents de collecte.
  3. Téléchargez le fichier d'authentification d'ingestion.
  4. Enregistrez le fichier de manière sécurisée sur le système où l'agent BindPlane sera installé.

Obtenir l'ID client Google SecOps

  1. Connectez-vous à la console Google SecOps.
  2. Accédez à Paramètres SIEM > Profil.
  3. Copiez et enregistrez le numéro client dans la section Détails de l'organisation.

Installer l'agent BindPlane

Installez l'agent BindPlane sur votre système d'exploitation Windows ou Linux en suivant les instructions ci-dessous.

Installation de Windows

  1. Ouvrez l'invite de commande ou PowerShell en tant qu'administrateur.
  2. Exécutez la commande suivante :

    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
    
  3. Attendez la fin de l'installation.

  4. Vérifiez l'installation en exécutant la commande suivante :

    sc query observiq-otel-collector
    

Le service doit s'afficher comme étant EN COURS D'EXÉCUTION.

Installation sous Linux

  1. Ouvrez un terminal avec des privilèges root ou sudo.
  2. Exécutez la commande suivante :

    sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
    
  3. Attendez la fin de l'installation.

  4. Vérifiez l'installation en exécutant la commande suivante :

    sudo systemctl status observiq-otel-collector
    

Le service doit s'afficher comme actif (en cours d'exécution).

Autres ressources d'installation

Pour obtenir d'autres options d'installation et de dépannage, consultez le guide d'installation de l'agent Bindplane.

Configurer l'agent Bindplane pour ingérer les journaux Syslog et les envoyer à Google SecOps

Localiser le fichier de configuration

  • Localisez le fichier de configuration sur votre système d'exploitation comme suit :

    • Linux :
    sudo nano /opt/observiq-otel-collector/config.yaml
    
    • Windows :
    notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
    

Modifiez le fichier de configuration

  • Remplacez l'intégralité du contenu de config.yaml par la configuration suivante :

    receivers:
      udplog:
        listen_address: "0.0.0.0:514"
    
    exporters:
      chronicle/cisco_catalyst_center:
        protocol: https
        # Region of your instance, for example us, europe, asia-southeast1
        location: <LOCATION>
        # Project number of the Google Cloud project linked to the instance
        project: '<PROJECT_NUMBER>'
        compression: gzip
        creds_file_path: '/opt/observiq-otel-collector/ingestion-auth.json'
        customer_id: 'YOUR_CUSTOMER_ID'
        endpoint: chronicle.googleapis.com
        log_type: CISCO_DNAC
        raw_log_field: body
    
    service:
      pipelines:
        logs/cisco_catalyst_center_to_chronicle:
          receivers:
            - udplog
          exporters:
            - chronicle/cisco_catalyst_center
    

Paramètres de configuration

Remplacez les espaces réservés suivants :

  • Configuration du récepteur :

    • listen_address : adresse IP et port à écouter. Utilisez 0.0.0.0 pour écouter sur toutes les interfaces. Remplacez le port si nécessaire (par exemple, 1514 pour Linux non racine).
  • Configuration de l'exportateur :

    • creds_file_path : chemin d'accès complet au fichier de clé JSON du compte de service (option 1) :
      • Linux : /opt/observiq-otel-collector/ingestion-auth.json
      • Windows : C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
    • YOUR_CUSTOMER_ID : ID client Google SecOps.
    • location : remplacez <LOCATION> par la région de votre instance Google SecOps (par exemple, us, europe ou asia-southeast1). L'exportateur préfixe chronicle.googleapis.com avec cette valeur. Pour obtenir la liste complète, consultez Points de terminaison régionaux.
    • project : remplacez <PROJECT_NUMBER> par le numéro de projet indiqué dans IAM et administration > Paramètres.
    • endpoint : laissez la valeur définie sur chronicle.googleapis.com.

Ancien exportateur d'API d'ingestion

  • Si vous utilisez le fichier d'authentification d'ingestion de l'option 2, remplacez le bloc exporters par le code suivant. Définissez creds_file_path sur le chemin d'accès au fichier d'authentification d'ingestion. Si votre instance se trouve en dehors des États-Unis, remplacez malachiteingestion-pa.googleapis.com par votre point de terminaison régional (par exemple, europe-malachiteingestion-pa.googleapis.com).

    exporters:
      chronicle/cisco_catalyst_center:
        compression: gzip
        creds_file_path: '/opt/observiq-otel-collector/ingestion-auth.json'
        customer_id: 'YOUR_CUSTOMER_ID'
        endpoint: malachiteingestion-pa.googleapis.com
        log_type: CISCO_DNAC
        raw_log_field: body
    

Enregistrez le fichier de configuration.

  • Après avoir modifié le fichier, enregistrez-le :
    • Linux : appuyez sur Ctrl+O, puis sur Enter, puis sur Ctrl+X.
    • Windows : cliquez sur Fichier > Enregistrer.

Redémarrez l'agent Bindplane pour appliquer les modifications.

Pour redémarrer l'agent BindPlane sous Linux :

  1. Exécutez la commande suivante :

    sudo systemctl restart observiq-otel-collector
    
  2. Vérifiez que le service est en cours d'exécution :

    sudo systemctl status observiq-otel-collector
    
  3. Recherchez les erreurs dans les journaux :

    sudo journalctl -u observiq-otel-collector -f
    

Pour redémarrer l'agent BindPlane sous Windows :

  1. Choisissez l'une des options suivantes :

    • Invite de commande ou PowerShell en tant qu'administrateur :
    net stop observiq-otel-collector && net start observiq-otel-collector
    
    • Console Services :
      1. Appuyez sur Win+R, saisissez services.msc, puis appuyez sur Entrée.
      2. Recherchez observIQ OpenTelemetry Collector.
      3. Effectuez un clic droit, puis sélectionnez Redémarrer.
  2. Vérifiez que le service est en cours d'exécution :

    sc query observiq-otel-collector
    
  3. Recherchez les erreurs dans les journaux :

    type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
    

Configurer le transfert syslog sur Cisco Catalyst Center

  1. Connectez-vous à Cisco Catalyst Center.
  2. Accédez à Système > Paramètres > Services externes > Destinations > Syslog.
  3. Cliquez sur l'icône Ajouter (+) pour créer une destination syslog.
  4. Fournissez les informations de configuration suivantes :
    • Nom : saisissez un nom descriptif (par exemple, Google SecOps-Bindplane).
    • Description : saisissez une brève description (par exemple, Syslog forwarding to Google SecOps via Bindplane).
    • Nom d'hôte/Adresse IP : saisissez l'adresse IP de l'hôte de l'agent BindPlane.
    • Port : saisissez 514 (ou le port configuré dans l'agent Bindplane).
    • Protocole : sélectionnez UDP ou TCP en fonction de votre configuration Bindplane.
  5. Cliquez sur Enregistrer.

Option 2 : Intégration du webhook

Cette option utilise les fonctionnalités de webhook natives de Cisco Catalyst Center pour envoyer des événements JSON structurés directement à Google SecOps en temps réel.

Créer un flux de webhook dans Google SecOps

Créer le flux

  1. Accédez à Paramètres SIEM> Flux.
  2. Cliquez sur Ajouter un flux d'actualités.
  3. Sur la page suivante, cliquez sur Configurer un seul flux.
  4. Dans le champ Nom du flux, saisissez un nom pour le flux (par exemple, Cisco Catalyst Center Webhook).
  5. Sélectionnez Webhook comme type de source.
  6. Sélectionnez Cisco Catalyst Center comme Type de journal.
  7. Cliquez sur Suivant.
  8. Spécifiez les valeurs des paramètres d'entrée suivants :
    • Délimiteur de division (facultatif) : saisissez \n pour les événements délimités par un saut de ligne.
    • Espace de noms de l'élément : espace de noms de l'élément.
    • Étiquettes d'ingestion : étiquette à appliquer aux événements de ce flux.
  9. Cliquez sur Suivant.
  10. Vérifiez la configuration de votre nouveau flux sur l'écran Finaliser, puis cliquez sur Envoyer.

Générer et enregistrer une clé secrète

Après avoir créé le flux, vous devez générer une clé secrète pour l'authentification :

  1. Sur la page d'informations du flux, cliquez sur Générer une clé secrète.
  2. Une boîte de dialogue affiche la clé secrète.
  3. Copiez et enregistrez la clé secrète de manière sécurisée.

Obtenir l'URL du point de terminaison du flux

  1. Accédez à l'onglet Détails du flux.
  2. Dans la section Informations sur le point de terminaison, copiez l'URL du point de terminaison du flux.
  3. Enregistrez cette URL pour les étapes suivantes.
  4. Cliquez sur OK.

Créer une clé API Google Cloud

Google SecOps nécessite une clé API pour l'authentification. Créez une clé API restreinte dans la Google Cloud Console.

Créer la clé API

  1. Accédez à la page Identifiants de la console Google Cloud.
  2. Sélectionnez votre projet (celui associé à votre instance Google SecOps).
  3. Cliquez sur Créer des identifiants> Clé API.
  4. Une clé API est créée et s'affiche dans une boîte de dialogue.
  5. Cliquez sur Modifier la clé API pour restreindre la clé.

Restreindre la clé API

  1. Sur la page des paramètres de la clé API :
    • Nom : saisissez un nom descriptif (par exemple, Chronicle Webhook API Key).
  2. Sous Restrictions relatives aux API :
    1. Sélectionnez Restreindre la clé.
    2. Dans le menu déroulant Sélectionner des API, recherchez et sélectionnez API Chronicle.
  3. Cliquez sur Enregistrer.
  4. Copiez la valeur de la clé API dans le champ Clé API en haut de la page.
  5. Enregistrez la clé API de manière sécurisée.

Configurer la destination du webhook dans Cisco Catalyst Center

  1. Connectez-vous à Cisco Catalyst Center.
  2. Accédez à Système> Paramètres> Services externes> Destinations> Webhook.
  3. Cliquez sur l'icône Ajouter (+) pour créer une destination de webhook.
  4. Fournissez les informations de configuration suivantes :
    • Nom : saisissez un nom descriptif (par exemple, Google SecOps-Webhook).
    • Description : saisissez une brève description (par exemple, Webhook to Google SecOps).
    • URL : collez l'URL du point de terminaison du webhook Google SecOps.
    • Méthode : sélectionnez POST.
    • Authentification : sélectionnez Aucune authentification.
    • Certificat de confiance : sélectionnez Oui.
    • En-têtes : cliquez sur Ajouter un en-tête et ajoutez les en-têtes suivants :
      • Nom : Content-Type, Valeur : application/json
      • Nom : X-goog-api-key, Valeur : votre clé API Google Cloud
      • Nom : X-Webhook-Access-Key, Valeur : clé secrète de votre flux Google SecOps
  5. Cliquez sur Enregistrer.

Abonner des événements aux notifications de webhook

  1. Dans Cisco Catalyst Center, accédez à Platform> Developer Toolkit> Event Notifications (Plate-forme > Developer Toolkit > Notifications d'événements).
  2. Dans l'onglet Notifications, cliquez sur Créer une notification.
  3. À l'étape 1 (Sélectionner un site et des événements), sélectionnez les sites et les événements que vous souhaitez surveiller :
    • Événements réseau : appareil inaccessible, interface hors service, modifications de la configuration.
    • Événements liés à la sécurité : non-respect des règles de sécurité, échecs d'authentification.
    • Événements système : événements de plate-forme, mises à jour logicielles, maintenance.
    • Événements d'assurance : dégradation des performances, problèmes de connectivité.
  4. Cliquez sur Suivant.
  5. À l'étape 2 (Sélectionner des canaux), sélectionnez REST comme canal de notification.
  6. Dans le menu déroulant Point de terminaison, sélectionnez la destination du webhook créée dans la section précédente (par exemple, Google SecOps-Webhook).
  7. Cliquez sur Suivant.
  8. À l'étape 3 (Résumé), vérifiez la configuration de la notification.
  9. Saisissez un nom pour l'abonnement (par exemple, Google SecOps Events).
  10. Cliquez sur Terminer.

Table de mappage UDM

Champ du journal Mappage UDM Logique
category security_result.severity_details La valeur de category du journal brut est mappée au champ security_result.severity_details.
ciscoDnaEventLink target.url La valeur de ciscoDnaEventLink du journal brut est mappée au champ target.url.
date_time metadata.event_timestamp Extrait du message de journal brut à l'aide du modèle Grok et converti au format d'horodatage.
details.Assurance_Issue_Category security_result.about.resource.attribute.labels[].value La valeur de details.Assurance_Issue_Category du journal brut est mappée avec la clé "Assurance_Issue_Category".
details.Assurance_Issue_Details security_result.summary La valeur de details.Assurance_Issue_Details du journal brut est mappée au champ security_result.summary.
details.Assurance_Issue_Name security_result.about.resource.attribute.labels[].value La valeur de details.Assurance_Issue_Name du journal brut est mappée avec la clé "Assurance_Issue_Name".
details.Assurance_Issue_Priority security_result.about.resource.attribute.labels[].value La valeur de details.Assurance_Issue_Priority du journal brut est mappée avec la clé "Assurance_Issue_Priority".
details.Assurance_Issue_Status security_result.about.resource.attribute.labels[].value La valeur de details.Assurance_Issue_Status du journal brut est mappée avec la clé "Assurance_Issue_Status".
details.Device target.ip, target.hostname Si la valeur est une adresse IP, elle est mappée à target.ip, sinon à target.hostname.
dnacIp target.ip La valeur de dnacIp du journal brut est mappée sur target.ip s'il s'agit d'une adresse IP valide.
domain additional.fields[].value.string_value La valeur de domain du journal brut est ajoutée en tant que paire clé-valeur à additional.fields avec la clé "domain".
eventId metadata.product_event_type La valeur de eventId du journal brut est mappée au champ metadata.product_event_type.
instanceId target.resource.product_object_id La valeur de instanceId du journal brut est mappée au champ target.resource.product_object_id.
name target.resource.attribute.labels[].value La valeur de name du journal brut est mappée avec la clé "name".
namespace target.namespace La valeur de namespace du journal brut est mappée au champ target.namespace.
network.deviceId target.asset.asset_id La valeur de network.deviceId du journal brut est précédée de "deviceId: " et mappée sur target.asset.asset_id.
note additional.fields[].value.string_value La valeur de note du journal brut est ajoutée en tant que paire clé-valeur à additional.fields avec la clé "note".
severity security_result.severity Utilisé pour déterminer la valeur de security_result.severity, is_alert et is_significant.
source target.resource.attribute.labels[].value La valeur de source du journal brut est mappée avec la clé "source".
src_ip principal.ip Extrait du message de journal brut à l'aide du modèle grok et mappé sur principal.ip.
subDomain additional.fields[].value.string_value La valeur de subDomain du journal brut est ajoutée en tant que paire clé-valeur à additional.fields avec la clé "subDomain".
tntId target.resource.attribute.labels[].value La valeur de tntId du journal brut est mappée avec la clé "tntId".
type target.resource.attribute.labels[].value La valeur de type du journal brut est mappée avec la clé "type".
userId target.user.userid La valeur de userId du journal brut est mappée au champ target.user.userid.
version metadata.product_version La valeur de version du journal brut est mappée au champ metadata.product_version.
N/A metadata.event_type Définie en fonction de la présence et des valeurs des champs has_principal, has_target et userId. Valeurs possibles : NETWORK_CONNECTION, USER_UNCATEGORIZED, STATUS_UPDATE, GENERIC_EVENT.
N/A is_alert Définissez cette option sur "true" si la gravité est de 0 ou 1, ou sur "false" dans le cas contraire.
N/A is_significant Définissez sur "true" si la gravité est de 0 ou 1, et sur "false" dans le cas contraire.
correlationId event.idm.read_only_udm.additional.fields Mappé à partir du journal des modifications
isSimulated event.idm.read_only_udm.additional.fields Mappé à partir du journal des modifications
startTime event.idm.read_only_udm.extensions.vulns.vulnerabilities.scan_start_time Mappé à partir du journal des modifications
details.wlcIp event.idm.read_only_udm.intermediary.ip Mappé à partir du journal des modifications
details.detectingApName event.idm.read_only_udm.observer.hostname Mappé à partir du journal des modifications
details.detectingApLocation event.idm.read_only_udm.observer.location.name Mappé à partir du journal des modifications
details.detectingApMacAddress event.idm.read_only_udm.observer.mac Mappé à partir du journal des modifications
network.siteId event.idm.read_only_udm.observer.resource.attribute.labels Mappé à partir du journal des modifications
src_ip event.idm.read_only_udm.principal.hostname Mappé à partir du journal des modifications
details event.idm.read_only_udm.security_result.detection_fields Mappé à partir du journal des modifications
details.threatType event.idm.read_only_udm.security_result.threat_name Mappé à partir du journal des modifications
tenantId event.idm.read_only_udm.target.resource.attribute.labels Mappé à partir du journal des modifications

Journal des modifications

Afficher le journal des modifications de cet analyseur

Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.