Collecter les journaux Cisco Catalyst Center (anciennement DNA Center)
Version de l'analyseur : 2.0
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
systemdpour 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.
Option 1 : Créer un compte de service pour l'API Chronicle (recommandé)
- Connectez-vous à la consoleGoogle Cloud et sélectionnez le projet Google Cloud associé à votre instance Google SecOps.
- Accédez à IAM et administration > Comptes de service.
- Cliquez sur Créer un compte de service.
- 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).
- Nom du compte de service : saisissez un nom pour le compte (par exemple,
- Cliquez sur Créer et continuer.
- Dans la section Autoriser ce compte de service à accéder au projet, cliquez sur Sélectionner un rôle, puis sélectionnez Éditeur Chronicle.
- Cliquez sur Continue (Continuer), puis sur Done (OK).
- Cliquez sur le compte de service que vous avez créé, puis accédez à l'onglet Clés.
- Cliquez sur Ajouter une clé > Créer une clé.
- Sélectionnez JSON, puis cliquez sur Créer. Le fichier de clé est téléchargé sur votre ordinateur.
- Enregistrez le fichier de clé sous le nom
ingestion-auth.jsondans le répertoire du collecteur Bindplane (/opt/observiq-otel-collector/ingestion-auth.jsonsous Linux ouC:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.jsonsous Windows), ou mettez à jourcreds_file_pathdansconfig.yamlpour qu'il corresponde au chemin d'accès où vous l'enregistrez. - 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)
- Connectez-vous à la console Google SecOps.
- Accédez à Paramètres SIEM> Agents de collecte.
- Téléchargez le fichier d'authentification d'ingestion.
- 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
- Connectez-vous à la console Google SecOps.
- Accédez à Paramètres SIEM > Profil.
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
- Ouvrez l'invite de commande ou PowerShell en tant qu'administrateur.
Exécutez la commande suivante :
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quietAttendez la fin de l'installation.
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
- Ouvrez un terminal avec des privilèges root ou sudo.
Exécutez la commande suivante :
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.shAttendez la fin de l'installation.
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.yamlpar 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. Utilisez0.0.0.0pour écouter sur toutes les interfaces. Remplacez le port si nécessaire (par exemple,1514pour 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
- Linux :
YOUR_CUSTOMER_ID: ID client Google SecOps.location: remplacez<LOCATION>par la région de votre instance Google SecOps (par exemple,us,europeouasia-southeast1). L'exportateur préfixechronicle.googleapis.comavec 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 surchronicle.googleapis.com.
Ancien exportateur d'API d'ingestion
Si vous utilisez le fichier d'authentification d'ingestion de l'option 2, remplacez le bloc
exporterspar le code suivant. Définissezcreds_file_pathsur le chemin d'accès au fichier d'authentification d'ingestion. Si votre instance se trouve en dehors des États-Unis, remplacezmalachiteingestion-pa.googleapis.compar 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 surEnter, puis surCtrl+X. - Windows : cliquez sur Fichier > Enregistrer.
- Linux : appuyez sur
Redémarrez l'agent Bindplane pour appliquer les modifications.
Pour redémarrer l'agent BindPlane sous Linux :
Exécutez la commande suivante :
sudo systemctl restart observiq-otel-collectorVérifiez que le service est en cours d'exécution :
sudo systemctl status observiq-otel-collectorRecherchez les erreurs dans les journaux :
sudo journalctl -u observiq-otel-collector -f
Pour redémarrer l'agent BindPlane sous Windows :
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 :
- Appuyez sur
Win+R, saisissezservices.msc, puis appuyez sur Entrée. - Recherchez observIQ OpenTelemetry Collector.
- Effectuez un clic droit, puis sélectionnez Redémarrer.
- Appuyez sur
Vérifiez que le service est en cours d'exécution :
sc query observiq-otel-collectorRecherchez les erreurs dans les journaux :
type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
Configurer le transfert syslog sur Cisco Catalyst Center
- Connectez-vous à Cisco Catalyst Center.
- Accédez à Système > Paramètres > Services externes > Destinations > Syslog.
- Cliquez sur l'icône Ajouter (+) pour créer une destination syslog.
- 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.
- Nom : saisissez un nom descriptif (par exemple,
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
- Accédez à Paramètres SIEM> Flux.
- Cliquez sur Ajouter un flux d'actualités.
- Sur la page suivante, cliquez sur Configurer un seul flux.
- Dans le champ Nom du flux, saisissez un nom pour le flux (par exemple,
Cisco Catalyst Center Webhook). - Sélectionnez Webhook comme type de source.
- Sélectionnez Cisco Catalyst Center comme Type de journal.
- Cliquez sur Suivant.
- Spécifiez les valeurs des paramètres d'entrée suivants :
- Délimiteur de division (facultatif) : saisissez
\npour 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.
- Délimiteur de division (facultatif) : saisissez
- Cliquez sur Suivant.
- 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 :
- Sur la page d'informations du flux, cliquez sur Générer une clé secrète.
- Une boîte de dialogue affiche la clé secrète.
Copiez et enregistrez la clé secrète de manière sécurisée.
Obtenir l'URL du point de terminaison du flux
- Accédez à l'onglet Détails du flux.
- Dans la section Informations sur le point de terminaison, copiez l'URL du point de terminaison du flux.
- Enregistrez cette URL pour les étapes suivantes.
- 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
- Accédez à la page Identifiants de la console Google Cloud.
- Sélectionnez votre projet (celui associé à votre instance Google SecOps).
- Cliquez sur Créer des identifiants> Clé API.
- Une clé API est créée et s'affiche dans une boîte de dialogue.
- Cliquez sur Modifier la clé API pour restreindre la clé.
Restreindre la clé API
- Sur la page des paramètres de la clé API :
- Nom : saisissez un nom descriptif (par exemple,
Chronicle Webhook API Key).
- Nom : saisissez un nom descriptif (par exemple,
- Sous Restrictions relatives aux API :
- Sélectionnez Restreindre la clé.
- Dans le menu déroulant Sélectionner des API, recherchez et sélectionnez API Chronicle.
- Cliquez sur Enregistrer.
- Copiez la valeur de la clé API dans le champ Clé API en haut de la page.
Enregistrez la clé API de manière sécurisée.
Configurer la destination du webhook dans Cisco Catalyst Center
- Connectez-vous à Cisco Catalyst Center.
- Accédez à Système> Paramètres> Services externes> Destinations> Webhook.
- Cliquez sur l'icône Ajouter (+) pour créer une destination de webhook.
- 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
- Nom :
- Nom : saisissez un nom descriptif (par exemple,
- Cliquez sur Enregistrer.
Abonner des événements aux notifications de webhook
- Dans Cisco Catalyst Center, accédez à Platform> Developer Toolkit> Event Notifications (Plate-forme > Developer Toolkit > Notifications d'événements).
- Dans l'onglet Notifications, cliquez sur Créer une notification.
- À 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é.
- Cliquez sur Suivant.
- À l'étape 2 (Sélectionner des canaux), sélectionnez REST comme canal de notification.
- 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). - Cliquez sur Suivant.
- À l'étape 3 (Résumé), vérifiez la configuration de la notification.
- Saisissez un nom pour l'abonnement (par exemple,
Google SecOps Events). - 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.