Raccogli i log di Cisco Catalyst Center (in precedenza DNA Center)
Versione parser: 2.0
Questo documento spiega come importare i log di Cisco Catalyst Center (precedentemente noto come DNA Center) in Google Security Operations utilizzando due approcci diversi. Scegli l'opzione più adatta al tuo ambiente e ai tuoi requisiti.
Cisco Catalyst Center è una piattaforma centralizzata di gestione e automazione della rete per reti aziendali, filiali e IoT. Fornisce networking basato sugli intenti, gestione delle policy, provisioning dei dispositivi, analisi di assurance e rilevamento dei problemi basato sull'AI nell'infrastruttura cablata e wireless. Catalyst Center genera eventi relativi allo stato della rete, alle modifiche dello stato dei dispositivi, alle violazioni delle policy di sicurezza e ai problemi di controllo.
Prima di iniziare
Assicurati di soddisfare i seguenti prerequisiti:
- Un'istanza Google SecOps.
- Accesso con privilegi alla console di gestione di Cisco Catalyst Center.
- Per l'Opzione 1: Windows Server 2016 o versioni successive oppure un host Linux con
systemdper l'agente Bindplane. - Per l'opzione 2: connettività di rete tra Cisco Catalyst Center e l'endpoint webhook di Google SecOps.
Opzione 1: integrazione di Syslog utilizzando l'agente Bindplane
Questa opzione utilizza l'inoltro syslog da Cisco Catalyst Center all'agente Bindplane, che poi inoltra i log strutturati a Google SecOps.
Ottieni le credenziali di Google SecOps per l'agente Bindplane
Per autenticare l'agente Bindplane in Google SecOps, scegli uno dei seguenti metodi:
- Nuove implementazioni: utilizza l'API Chronicle (opzione 1).
- Deployment legacy: continua a utilizzare il file di autenticazione dell'acquisizione (opzione 2) fino al ritiro dell'API Ingestion il 20 luglio 2027.
Opzione 1: crea un account di servizio per l'API Chronicle (consigliata)
- Accedi alla consoleGoogle Cloud e seleziona il progetto Google Cloud collegato alla tua istanza Google SecOps.
- Vai a IAM e amministrazione > Service account.
- Fai clic su Crea service account.
- Fornisci i seguenti dettagli di configurazione:
- Nome service account: inserisci un nome per l'account (ad esempio
bindplane-ingest). - Descrizione service account: inserisci una descrizione (ad esempio
Bindplane agent log ingestion).
- Nome service account: inserisci un nome per l'account (ad esempio
- Fai clic su Crea e continua.
- Nella sezione Concedi a questo account di servizio l'accesso al progetto, fai clic su Seleziona un ruolo e seleziona Editor Chronicle.
- Fai clic su Continua e poi su Fine.
- Fai clic sul account di servizio che hai creato, quindi vai alla scheda Chiavi.
- Fai clic su Aggiungi chiave > Crea nuova chiave.
- Seleziona JSON e fai clic su Crea. Il file della chiave viene scaricato sul tuo computer.
- Salva il file della chiave come
ingestion-auth.jsonnella directory del raccoglitore Bindplane (/opt/observiq-otel-collector/ingestion-auth.jsonsu Linux oC:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.jsonsu Windows) oppure aggiornacreds_file_pathinconfig.yamlin modo che corrisponda al percorso in cui lo salvi. - Vai a IAM e amministrazione > Impostazioni e copia il numero di progetto. Ti servirà per la configurazione dell'esportatore.
Opzione 2: scarica il file di autenticazione dell'acquisizione (legacy)
- Accedi alla console Google SecOps.
- Vai a Impostazioni SIEM > Agenti di raccolta.
- Scarica il file di autenticazione dell'acquisizione.
- Salva il file in modo sicuro sul sistema in cui verrà installato l'agente Bindplane.
Recuperare l'ID cliente Google SecOps
- Accedi alla console Google SecOps.
- Vai a Impostazioni SIEM > Profilo.
Copia e salva l'ID cliente dalla sezione Dettagli organizzazione.
Installa l'agente Bindplane
Installa l'agente Bindplane sul tuo sistema operativo Windows o Linux seguendo le istruzioni riportate di seguito.
Installazione di Windows
- Apri il prompt dei comandi o PowerShell come amministratore.
Esegui questo comando:
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quietAttendi il completamento dell'installazione.
Verifica l'installazione eseguendo:
sc query observiq-otel-collector
Il servizio dovrebbe essere visualizzato come RUNNING.
Installazione di Linux
- Apri un terminale con privilegi root o sudo.
Esegui questo comando:
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.shAttendi il completamento dell'installazione.
Verifica l'installazione eseguendo:
sudo systemctl status observiq-otel-collector
Il servizio dovrebbe essere visualizzato come attivo (in esecuzione).
Risorse aggiuntive per l'installazione
Per ulteriori opzioni di installazione e risoluzione dei problemi, consulta la guida all'installazione dell'agente Bindplane.
Configura l'agente Bindplane per importare syslog e inviarli a Google SecOps
Individua il file di configurazione
Individua il file di configurazione sul tuo sistema operativo come segue:
- Linux:
sudo nano /opt/observiq-otel-collector/config.yaml- Windows:
notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
Modifica il file di configurazione
Sostituisci l'intero contenuto di
config.yamlcon la seguente configurazione: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
Parametri di configurazione
Sostituisci i seguenti segnaposto:
Configurazione del ricevitore:
listen_address: l'indirizzo IP e la porta su cui ascoltare. Utilizza0.0.0.0per ascoltare su tutte le interfacce. Sostituisci la porta se necessario (ad esempio,1514per Linux non root).
Configurazione dell'esportatore:
creds_file_path: percorso completo del file della chiave JSON del account di servizio (opzione 1):- Linux:
/opt/observiq-otel-collector/ingestion-auth.json - Windows:
C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
- Linux:
YOUR_CUSTOMER_ID: il tuo ID cliente Google SecOps.location: sostituisci<LOCATION>con la regione della tua istanza Google SecOps (ad esempious,europeoasia-southeast1). L'esportatore aggiungechronicle.googleapis.comcome prefisso a questo valore. Per l'elenco completo, consulta Endpoint regionali.project: sostituisci<PROJECT_NUMBER>con il numero di progetto in IAM e amministrazione > Impostazioni.endpoint: mantieni l'impostazionechronicle.googleapis.com.
Esportatore API di importazione legacy
Se utilizzi il file di autenticazione dell'acquisizione dell'Opzione 2, sostituisci il blocco
exporterscon il seguente. Impostacreds_file_pathsul percorso del file di autenticazione dell'acquisizione e, se l'istanza si trova al di fuori degli Stati Uniti, sostituiscimalachiteingestion-pa.googleapis.comcon il tuo endpoint regionale (ad esempio,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
Salva il file di configurazione
- Dopo la modifica, salva il file:
- Linux: premi
Ctrl+O, poiEntere infineCtrl+X - Windows: fai clic su File > Salva
- Linux: premi
Riavvia l'agente Bindplane per applicare le modifiche
Per riavviare l'agente Bindplane in Linux:
Esegui questo comando:
sudo systemctl restart observiq-otel-collectorVerifica che il servizio sia in esecuzione:
sudo systemctl status observiq-otel-collectorControlla i log per verificare la presenza di errori:
sudo journalctl -u observiq-otel-collector -f
Per riavviare l'agente Bindplane in Windows:
Scegli una delle seguenti opzioni:
- Prompt dei comandi o PowerShell come amministratore:
net stop observiq-otel-collector && net start observiq-otel-collector- Console dei servizi:
- Premi
Win+R, digitaservices.msce premi Invio. - Individua observIQ OpenTelemetry Collector.
- Fai clic con il tasto destro del mouse e seleziona Riavvia.
- Premi
Verifica che il servizio sia in esecuzione:
sc query observiq-otel-collectorControlla i log per individuare eventuali errori:
type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
Configurare l'inoltro di syslog su Cisco Catalyst Center
- Accedi a Cisco Catalyst Center.
- Vai a System (Sistema) > Settings (Impostazioni) > External Services (Servizi esterni) > Destinations (Destinazioni) > Syslog.
- Fai clic sull'icona Aggiungi (+) per creare una nuova destinazione syslog.
- Fornisci i seguenti dettagli di configurazione:
- Nome: inserisci un nome descrittivo (ad esempio,
Google SecOps-Bindplane). - Descrizione: inserisci una breve descrizione (ad esempio,
Syslog forwarding to Google SecOps via Bindplane). - Nome host/indirizzo IP: inserisci l'indirizzo IP dell'host dell'agente Bindplane.
- Porta: inserisci
514(o la porta configurata nell'agente Bindplane). - Protocollo: seleziona UDP o TCP a seconda della configurazione di Bindplane.
- Nome: inserisci un nome descrittivo (ad esempio,
Fai clic su Salva.
Opzione 2: integrazione webhook
Questa opzione utilizza le funzionalità webhook native di Cisco Catalyst Center per inviare eventi JSON strutturati direttamente a Google SecOps in tempo reale.
Crea un feed webhook in Google SecOps
Crea il feed
- Vai a Impostazioni SIEM > Feed.
- Fai clic su Aggiungi nuovo feed di notizie.
- Nella pagina successiva, fai clic su Configura un singolo feed.
- Nel campo Nome feed, inserisci un nome per il feed (ad esempio,
Cisco Catalyst Center Webhook). - Seleziona Webhook come Tipo di origine.
- Seleziona Cisco Catalyst Center come Tipo di log.
- Fai clic su Avanti.
- Specifica i valori per i seguenti parametri di input:
- (Facoltativo) Delimitatore di divisione: inserisci
\nper gli eventi delimitati da un carattere di nuova riga. - Spazio dei nomi dell'asset: lo spazio dei nomi dell'asset.
- Etichette di importazione: l'etichetta da applicare agli eventi di questo feed.
- (Facoltativo) Delimitatore di divisione: inserisci
- Fai clic su Avanti.
- Controlla la nuova configurazione del feed di notizie nella schermata Finalizza, quindi fai clic su Invia.
Genera e salva la chiave segreta
Dopo aver creato il feed, devi generare una chiave segreta per l'autenticazione:
- Nella pagina dei dettagli del feed, fai clic su Genera chiave segreta.
- Viene visualizzata una finestra di dialogo con la chiave segreta.
Copia e salva la chiave segreta in modo sicuro.
Recuperare l'URL dell'endpoint del feed
- Vai alla scheda Dettagli del feed.
- Nella sezione Endpoint Information (Informazioni sull'endpoint), copia l'Feed endpoint URL (URL endpoint del feed).
- Salva questo URL per i passaggi successivi.
- Fai clic su Fine.
Crea una chiave API Google Cloud
Google SecOps richiede una chiave API per l'autenticazione. Crea una chiave API con limitazioni nella Google Cloud Console.
Crea la chiave API
- Vai alla pagina Credenziali della console Google Cloud.
- Seleziona il tuo progetto (il progetto associato alla tua istanza di Google SecOps).
- Fai clic su Crea credenziali > Chiave API.
- Viene creata una chiave API, che viene visualizzata in una finestra di dialogo.
- Fai clic su Modifica chiave API per limitare la chiave.
Limita la chiave API
- Nella pagina delle impostazioni Chiave API:
- Nome: inserisci un nome descrittivo (ad esempio,
Chronicle Webhook API Key).
- Nome: inserisci un nome descrittivo (ad esempio,
- In Limitazioni API:
- Seleziona Limita chiave.
- Nel menu a discesa Seleziona API, cerca e seleziona API Chronicle.
- Fai clic su Salva.
- Copia il valore della chiave API dal campo Chiave API nella parte superiore della pagina.
Salva la chiave API in modo sicuro.
Configura la destinazione webhook in Cisco Catalyst Center
- Accedi a Cisco Catalyst Center.
- Vai a System (Sistema) > Settings (Impostazioni) > External Services (Servizi esterni) > Destinations (Destinazioni) > Webhook.
- Fai clic sull'icona Aggiungi (+) per creare una nuova destinazione webhook.
- Fornisci i seguenti dettagli di configurazione:
- Nome: inserisci un nome descrittivo (ad esempio,
Google SecOps-Webhook). - Descrizione: inserisci una breve descrizione (ad esempio,
Webhook to Google SecOps). - URL: incolla l'URL dell'endpoint webhook di Google SecOps.
- Metodo: seleziona POST.
- Autenticazione: seleziona Nessuna autenticazione.
- Considera attendibile il certificato: seleziona Sì.
- Intestazioni: fai clic su Aggiungi intestazione e aggiungi le seguenti intestazioni:
- Nome:
Content-Type, Valore:application/json - Nome:
X-goog-api-key, Valore: la tua chiave API Google Cloud - Nome:
X-Webhook-Access-Key, Valore: la chiave segreta del feed Google SecOps
- Nome:
- Nome: inserisci un nome descrittivo (ad esempio,
- Fai clic su Salva.
Iscrivere gli eventi alle notifiche webhook
- In Cisco Catalyst Center, vai a Platform > Developer Toolkit > Event Notifications.
- Nella scheda Notifiche, fai clic su Crea nuova notifica.
- Nel passaggio 1 (Seleziona sito ed eventi), seleziona i siti e gli eventi che vuoi monitorare:
- Eventi di rete: dispositivo non raggiungibile, interfaccia non attiva, modifiche alla configurazione.
- Eventi di sicurezza: violazioni delle policy di sicurezza, errori di autenticazione.
- Eventi di sistema: eventi della piattaforma, aggiornamenti software, manutenzione.
- Eventi di controllo: peggioramento delle prestazioni, problemi di connettività.
- Fai clic su Avanti.
- Nel passaggio 2 (Seleziona canali), seleziona REST come canale di notifica.
- Nel menu a discesa Endpoint, seleziona la destinazione webhook creata nella sezione precedente (ad esempio,
Google SecOps-Webhook). - Fai clic su Avanti.
- Nel Passaggio 3 (Riepilogo), esamina la configurazione della notifica.
- Inserisci un Nome per la sottoscrizione (ad esempio,
Google SecOps Events). - Fai clic su Fine.
Tabella di mappatura UDM
| Campo log | Mappatura UDM | Logica |
|---|---|---|
category |
security_result.severity_details |
Il valore di category del log non elaborato viene mappato al campo security_result.severity_details. |
ciscoDnaEventLink |
target.url |
Il valore di ciscoDnaEventLink del log non elaborato viene mappato al campo target.url. |
date_time |
metadata.event_timestamp |
Estratto dal messaggio di log non elaborato utilizzando il pattern grok e convertito nel formato timestamp. |
details.Assurance_Issue_Category |
security_result.about.resource.attribute.labels[].value |
Il valore di details.Assurance_Issue_Category del log non elaborato è mappato con la chiave "Assurance_Issue_Category". |
details.Assurance_Issue_Details |
security_result.summary |
Il valore di details.Assurance_Issue_Details del log non elaborato viene mappato al campo security_result.summary. |
details.Assurance_Issue_Name |
security_result.about.resource.attribute.labels[].value |
Il valore di details.Assurance_Issue_Name del log non elaborato viene mappato con la chiave "Assurance_Issue_Name". |
details.Assurance_Issue_Priority |
security_result.about.resource.attribute.labels[].value |
Il valore di details.Assurance_Issue_Priority del log non elaborato viene mappato con la chiave "Assurance_Issue_Priority". |
details.Assurance_Issue_Status |
security_result.about.resource.attribute.labels[].value |
Il valore di details.Assurance_Issue_Status del log non elaborato viene mappato con la chiave "Assurance_Issue_Status". |
details.Device |
target.ip, target.hostname |
Se il valore è un indirizzo IP, viene mappato a target.ip, altrimenti a target.hostname. |
dnacIp |
target.ip |
Il valore di dnacIp del log non elaborato viene mappato a target.ip se si tratta di un indirizzo IP valido. |
domain |
additional.fields[].value.string_value |
Il valore di domain del log non elaborato viene aggiunto come coppia chiave-valore a additional.fields con la chiave "domain". |
eventId |
metadata.product_event_type |
Il valore di eventId del log non elaborato viene mappato al campo metadata.product_event_type. |
instanceId |
target.resource.product_object_id |
Il valore di instanceId del log non elaborato viene mappato al campo target.resource.product_object_id. |
name |
target.resource.attribute.labels[].value |
Il valore di name del log non elaborato è mappato con la chiave "name". |
namespace |
target.namespace |
Il valore di namespace del log non elaborato viene mappato al campo target.namespace. |
network.deviceId |
target.asset.asset_id |
Il valore di network.deviceId del log non elaborato è preceduto dal prefisso "deviceId: " e mappato a target.asset.asset_id. |
note |
additional.fields[].value.string_value |
Il valore di note del log non elaborato viene aggiunto come coppia chiave-valore a additional.fields con la chiave "note". |
severity |
security_result.severity |
Utilizzato per determinare il valore di security_result.severity, is_alert e is_significant. |
source |
target.resource.attribute.labels[].value |
Il valore di source del log non elaborato è mappato con la chiave "source". |
src_ip |
principal.ip |
Estratto dal messaggio di log non elaborato utilizzando il pattern grok e mappato a principal.ip. |
subDomain |
additional.fields[].value.string_value |
Il valore di subDomain del log non elaborato viene aggiunto come coppia chiave-valore a additional.fields con la chiave "subDomain". |
tntId |
target.resource.attribute.labels[].value |
Il valore di tntId del log non elaborato viene mappato con la chiave "tntId". |
type |
target.resource.attribute.labels[].value |
Il valore di type del log non elaborato è mappato con la chiave "type". |
userId |
target.user.userid |
Il valore di userId del log non elaborato viene mappato al campo target.user.userid. |
version |
metadata.product_version |
Il valore di version del log non elaborato viene mappato al campo metadata.product_version. |
| N/D | metadata.event_type |
Impostato in base alla presenza e ai valori dei campi has_principal, has_target e userId. Valori possibili: NETWORK_CONNECTION, USER_UNCATEGORIZED, STATUS_UPDATE, GENERIC_EVENT. |
| N/D | is_alert |
Impostato su true se la gravità è 0 o 1, altrimenti su false. |
| N/D | is_significant |
Impostato su true se la gravità è 0 o 1, altrimenti su false. |
correlationId |
event.idm.read_only_udm.additional.fields |
Mappato dal log delle modifiche |
isSimulated |
event.idm.read_only_udm.additional.fields |
Mappato dal log delle modifiche |
startTime |
event.idm.read_only_udm.extensions.vulns.vulnerabilities.scan_start_time |
Mappato dal log delle modifiche |
details.wlcIp |
event.idm.read_only_udm.intermediary.ip |
Mappato dal log delle modifiche |
details.detectingApName |
event.idm.read_only_udm.observer.hostname |
Mappato dal log delle modifiche |
details.detectingApLocation |
event.idm.read_only_udm.observer.location.name |
Mappato dal log delle modifiche |
details.detectingApMacAddress |
event.idm.read_only_udm.observer.mac |
Mappato dal log delle modifiche |
network.siteId |
event.idm.read_only_udm.observer.resource.attribute.labels |
Mappato dal log delle modifiche |
src_ip |
event.idm.read_only_udm.principal.hostname |
Mappato dal log delle modifiche |
details |
event.idm.read_only_udm.security_result.detection_fields |
Mappato dal log delle modifiche |
details.threatType |
event.idm.read_only_udm.security_result.threat_name |
Mappato dal log delle modifiche |
tenantId |
event.idm.read_only_udm.target.resource.attribute.labels |
Mappato dal log delle modifiche |
Log delle modifiche
Visualizza il log delle modifiche per questo parser
Hai bisogno di ulteriore assistenza? Ricevi risposte dai membri della community e dai professionisti di Google SecOps.