Cisco Application Centric Infrastructure-Logs (ACI) erfassen
In diesem Dokument wird beschrieben, wie Sie Cisco Application Centric Infrastructure (ACI)-Logs in Google Security Operations aufnehmen. Der Parser versucht zuerst, eingehende Cisco ACI-Logs als Syslog-Nachrichten mit Grok-Mustern zu verarbeiten. Wenn das Syslog-Parsing fehlschlägt, wird davon ausgegangen, dass die Nachricht im JSON-Format vorliegt, und sie wird entsprechend geparst. Schließlich werden die extrahierten Felder dem Unified Data Model (UDM) zugeordnet.
Diese Integration unterstützt zwei Methoden:
- Option 1: Syslog-Format über den Bindplane-Agent
- Option 2: JSON-Format über AWS S3 mit der APIC REST API
Jede Option ist in sich abgeschlossen und kann unabhängig voneinander implementiert werden, je nach Ihren Infrastrukturanforderungen und bevorzugten Logformaten.
Option 1: Syslog über den Bindplane-Agent
Mit dieser Option wird das Cisco ACI-Fabric so konfiguriert, dass Syslog-Nachrichten an einen Bindplane-Agent gesendet werden, der sie zur Analyse an Chronicle weiterleitet.
Hinweise
Prüfen Sie, ob folgende Voraussetzungen erfüllt sind:
- Eine Google SecOps-Instanz
- Ein Windows 2016- oder höher- oder Linux-Host mit
systemd - Wenn Sie den Agent hinter einem Proxy ausführen, müssen die Firewallports gemäß den Anforderungen des Bindplane-Agents geöffnet sein.
- Privilegierter Zugriff auf die Cisco APIC-Konsole
Authentifizierungsdatei für die Aufnahme in Google SecOps abrufen
- Melden Sie sich in der Google SecOps-Konsole an.
- Rufen Sie die SIEM-Einstellungen > Collection Agents auf.
- Laden Sie die Authentifizierungsdatei für die Aufnahme herunter. Speichern Sie die Datei sicher auf dem System, auf dem BindPlane installiert wird.
Google SecOps-Kundennummer abrufen
- Melden Sie sich in der Google SecOps-Konsole an.
- Rufen Sie die SIEM-Einstellungen > Profile auf.
- Kopieren und speichern Sie die Kunden-ID aus dem Bereich Organisationsdetails.
BindPlane-Agent installieren
Installieren Sie den Bindplane-Agent auf Ihrem Windows- oder Linux-Betriebssystem gemäß der folgenden Anleitung.
Fenstereinbau
- Öffnen Sie die Eingabeaufforderung oder PowerShell als Administrator.
Führen Sie dazu diesen Befehl aus:
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
Linux-Installation
- Öffnen Sie ein Terminal mit Root- oder Sudo-Berechtigungen.
Führen Sie dazu diesen Befehl aus:
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
Zusätzliche Installationsressourcen
- Weitere Installationsoptionen finden Sie in diesem Installationsleitfaden.
BindPlane-Agent zum Erfassen von Syslog-Daten und Senden an Google SecOps konfigurieren
Konfigurationsdatei aufrufen:
- Suchen Sie die Datei
config.yaml. Normalerweise befindet sie sich unter Linux im Verzeichnis/etc/bindplane-agent/oder unter Windows im Installationsverzeichnis. - Öffnen Sie die Datei mit einem Texteditor (z. B.
nano,vioder Notepad).
- Suchen Sie die Datei
Bearbeiten Sie die Datei
config.yamlso:receivers: udplog: # Replace the port and IP address as required listen_address: "0.0.0.0:514" exporters: chronicle/chronicle_w_labels: compression: gzip # Adjust the path to the credentials file you downloaded in Step 1 creds_file_path: '/path/to/ingestion-authentication-file.json' # Replace with your actual customer ID from Step 2 customer_id: <CUSTOMER_ID> endpoint: malachiteingestion-pa.googleapis.com # Add optional ingestion labels for better organization log_type: 'CISCO_ACI' raw_log_field: body ingestion_labels: service: pipelines: logs/source0__chronicle_w_labels-0: receivers: - udplog exporters: - chronicle/chronicle_w_labels- Ersetzen Sie den Port und die IP-Adresse nach Bedarf in Ihrer Infrastruktur.
- Ersetzen Sie
<customer_id>durch die tatsächliche Kunden-ID. - Aktualisieren Sie
/path/to/ingestion-authentication-file.jsonauf den Pfad, in dem die Authentifizierungsdatei im Abschnitt Get Google SecOps ingestion authentication file (Authentifizierungsdatei für die Google SecOps-Aufnahme abrufen) gespeichert wurde.
Bindplane-Agent neu starten, um die Änderungen zu übernehmen
Führen Sie den folgenden Befehl aus, um den Bindplane-Agent unter Linux neu zu starten:
sudo systemctl restart bindplane-agentUm den Bindplane-Agent unter Windows neu zu starten, können Sie entweder die Konsole Dienste verwenden oder den folgenden Befehl eingeben:
net stop BindPlaneAgent && net start BindPlaneAgent
Syslog-Weiterleitung in Cisco ACI konfigurieren
Out-of-Band-Management-Vertrag konfigurieren
- Melden Sie sich in der Cisco APIC-Konsole an.
- Rufen Sie Tenants > mgmt> Contracts> Filters auf.
- Klicken Sie auf Filter erstellen.
- Geben Sie die folgenden Konfigurationsdetails an:
- Name: Geben Sie
syslog-udp-514ein. - Name des Eintrags: Geben Sie
syslogein. - EtherType: Wählen Sie IP aus.
- IP-Protokoll: Wählen Sie UDP aus.
- Zielportbereich (von): Geben Sie
514ein. - Zielportbereich bis: Geben Sie
514ein.
- Name: Geben Sie
- Klicken Sie auf Senden.
Verwaltungsvereinbarung erstellen
- Gehen Sie zu Tenants> mgmt> Contracts> Standard.
- Klicken Sie auf Vertrag erstellen.
- Geben Sie die folgenden Konfigurationsdetails an:
- Name: Geben Sie
mgmt-syslog-contractein. - Umfang: Wählen Sie Kontext aus.
- Name: Geben Sie
- Klicken Sie auf Senden.
- Maximieren Sie den Vertrag und klicken Sie auf Themen.
- Klicken Sie auf Vertragsgegenstand erstellen.
- Geben Sie die folgenden Konfigurationsdetails an:
- Name: Geben Sie
syslog-subjectein. - Beide Richtungen anwenden: Aktivieren Sie diese Option.
- Name: Geben Sie
- Klicken Sie auf Senden.
- Maximieren Sie das Thema und klicken Sie auf Filter.
- Klicken Sie auf Filterbindung erstellen.
- Wählen Sie den zuvor erstellten Filter
syslog-udp-514aus. - Klicken Sie auf Senden.
Syslog-Zielgruppe konfigurieren
- Klicken Sie auf Verwaltung > Externe Datenerhebungstools > Monitoring-Ziele > Syslog.
- Klicken Sie mit der rechten Maustaste auf Syslog und wählen Sie Syslog-Überwachungszielgruppe erstellen aus.
- Geben Sie die folgenden Konfigurationsdetails an:
- Name: Geben Sie
Chronicle-Syslog-Groupein. - Admin State (Administratorstatus): Wählen Sie Enabled (Aktiviert) aus.
- Format: Wählen Sie aci aus.
- Name: Geben Sie
- Klicken Sie auf Weiter.
- Gehen Sie im Dialogfeld Syslog-Überwachungsziel erstellen so vor:
- Name: Geben Sie
Chronicle-BindPlaneein. - Host: Geben Sie die IP-Adresse Ihres Bindplane-Agent-Servers ein.
- Port: Geben Sie
514ein. - Admin State (Administratorstatus): Wählen Sie Enabled (Aktiviert) aus.
- Schweregrad: Wählen Sie Information aus, um detaillierte Logs zu erfassen.
- Name: Geben Sie
- Klicken Sie auf Senden.
Monitoring-Richtlinien konfigurieren
Fabric Monitoring-Richtlinie
- Rufen Sie Fabric > Fabric-Richtlinien > Richtlinien > Monitoring > Gemeinsame Richtlinie auf.
- Maximieren Sie Callhome/Smart Callhome/SNMP/Syslog/TACACS.
- Klicken Sie mit der rechten Maustaste auf Syslog und wählen Sie Syslog-Quelle erstellen aus.
- Geben Sie die folgenden Konfigurationsdetails an:
- Name: Geben Sie
Chronicle-Fabric-Syslogein. - Audit-Logs: Aktivieren Sie diese Option, um Audit-Ereignisse einzubeziehen.
- Ereignisse: Aktivieren Sie das Kästchen, um Systemereignisse einzubeziehen.
- Fehler: Aktivieren Sie diese Option, um Fehlerereignisse einzubeziehen.
- Sitzungsprotokolle: Aktivieren Sie diese Option, um Sitzungsprotokolle einzuschließen.
- Zielgruppe: Wählen Sie
Chronicle-Syslog-Groupaus.
- Name: Geben Sie
- Klicken Sie auf Senden.
Richtlinie zur Zugriffsüberwachung
- Rufen Sie Fabric > Zugriffsrichtlinien > Richtlinien > Monitoring > Standardrichtlinie auf.
- Maximieren Sie Callhome/Smart Callhome/SNMP/Syslog.
- Klicken Sie mit der rechten Maustaste auf Syslog und wählen Sie Syslog-Quelle erstellen aus.
- Geben Sie die folgenden Konfigurationsdetails an:
- Name: Geben Sie
Chronicle-Access-Syslogein. - Audit-Logs: Aktivieren Sie diese Option, um Audit-Ereignisse einzubeziehen.
- Ereignisse: Aktivieren Sie das Kästchen, um Systemereignisse einzubeziehen.
- Fehler: Aktivieren Sie diese Option, um Fehlerereignisse einzubeziehen.
- Sitzungsprotokolle: Aktivieren Sie diese Option, um Sitzungsprotokolle einzuschließen.
- Zielgruppe: Wählen Sie
Chronicle-Syslog-Groupaus.
- Name: Geben Sie
- Klicken Sie auf Senden.
Richtlinie für System-Syslog-Meldungen konfigurieren
- Rufen Sie Fabric > Fabric-Richtlinien > Richtlinien > Monitoring > Gemeinsame Richtlinie auf.
- Maximieren Sie Richtlinien für Syslog-Nachrichten.
- Klicken Sie auf Standard.
- Führen Sie im Bereich Einrichtungsfilter folgende Schritte aus:
- Einrichtung: Wählen Sie Standard aus.
- Mindestschweregrad: Ändern Sie den Wert in Information.
- Klicken Sie auf Senden.
Option 2: JSON über AWS S3
Bei dieser Option wird die APIC REST API verwendet, um Ereignisse, Fehler und Audit-Logs im JSON-Format aus dem Cisco ACI-Fabric zu erfassen und zur SecOps-Aufnahme in AWS S3 zu speichern.
Hinweise
- Google SecOps-Instanz.
- Privilegierter Zugriff auf die Cisco APIC-Konsole.
- Privilegierter Zugriff auf AWS (S3, IAM, Lambda, EventBridge).
Cisco ACI APIC-Voraussetzungen erfassen (IDs, API-Schlüssel, Organisations-IDs, Tokens)
- Melden Sie sich über HTTPS in der Cisco APIC-Konsole an.
- Gehen Sie zu Admin > AAA (auf APIC 6.0+) oder Admin > Authentifizierung > AAA (auf älteren Versionen).
- Hinweis: Der AAA-Menüpfad hat sich ab APIC 6.0(1) geändert.
- Erstellen Sie einen lokalen Nutzer mit den entsprechenden Berechtigungen oder verwenden Sie einen vorhandenen.
- Kopieren und speichern Sie die folgenden Details an einem sicheren Ort:
- APIC-Nutzername: Lokaler Nutzer mit Lesezugriff auf Überwachungsdaten
- APIC-Passwort: Nutzerpasswort
- APIC-URL: Die HTTPS-URL Ihres APIC (z. B.
https://apic.example.com)
AWS S3-Bucket und IAM für Google SecOps konfigurieren
- Erstellen Sie einen Amazon S3-Bucket. Folgen Sie dazu der Anleitung unter Bucket erstellen.
- Speichern Sie den Namen und die Region des Buckets zur späteren Verwendung (z. B.
cisco-aci-logs). - Erstellen Sie einen Nutzer gemäß dieser Anleitung: IAM-Nutzer erstellen.
- Wählen Sie den erstellten Nutzer aus.
- Wählen Sie den Tab Sicherheitsanmeldedaten aus.
- Klicken Sie im Abschnitt Zugriffsschlüssel auf Zugriffsschlüssel erstellen.
- Wählen Sie Drittanbieterdienst als Anwendungsfall aus.
- Klicken Sie auf Weiter.
- Optional: Fügen Sie ein Beschreibungstag hinzu.
- Klicken Sie auf Zugriffsschlüssel erstellen.
- Klicken Sie auf CSV-Datei herunterladen, um den Access Key (Zugriffsschlüssel) und den Secret Access Key (geheimer Zugriffsschlüssel) für die zukünftige Verwendung zu speichern.
- Klicken Sie auf Fertig.
- Wählen Sie den Tab Berechtigungen aus.
- Klicken Sie im Bereich Berechtigungsrichtlinien auf Berechtigungen hinzufügen.
- Wählen Sie Berechtigungen hinzufügen aus.
- Wählen Sie Richtlinien direkt anhängen aus.
- Suchen Sie nach der Richtlinie AmazonS3FullAccess.
- Wählen Sie die Richtlinie aus.
- Klicken Sie auf Weiter.
- Klicken Sie auf Berechtigungen hinzufügen.
IAM-Richtlinie und ‑Rolle für S3-Uploads konfigurieren
- Rufen Sie in der AWS Console IAM > Richtlinien auf.
- Klicken Sie auf Richtlinie erstellen> Tab „JSON“.
Geben Sie die folgende Richtlinie ein:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowPutObjects", "Effect": "Allow", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::cisco-aci-logs/*" }, { "Sid": "AllowGetStateObject", "Effect": "Allow", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::cisco-aci-logs/cisco-aci-events/state.json" } ] }- Ersetzen Sie
cisco-aci-logs, wenn Sie einen anderen Bucket-Namen eingegeben haben.
- Ersetzen Sie
Klicken Sie auf Weiter > Richtlinie erstellen.
Rufen Sie IAM > Rollen > Rolle erstellen > AWS-Service > Lambda auf.
Hängen Sie die neu erstellte Richtlinie und die verwaltete Richtlinie AWSLambdaBasicExecutionRole an.
Geben Sie der Rolle den Namen
cisco-aci-lambda-roleund klicken Sie auf Rolle erstellen.
Lambda-Funktion erstellen
- Rufen Sie in der AWS Console Lambda > Funktionen > Funktion erstellen auf.
- Klicken Sie auf Von Grund auf erstellen.
Geben Sie die folgenden Konfigurationsdetails an:
- Name:
cisco-aci-events-collector - Laufzeit: Python 3.13
- Architektur: x86_64
- Ausführungsrolle:
cisco-aci-lambda-role
- Name:
Nachdem die Funktion erstellt wurde, öffnen Sie den Tab Code, löschen Sie den Stub und geben Sie den folgenden Code ein (
cisco-aci-events-collector.py):import json import boto3 import urllib3 import base64 from datetime import datetime, timedelta import os import logging # Configure logging logger = logging.getLogger() logger.setLevel(logging.INFO) # AWS S3 client and HTTP pool manager s3_client = boto3.client('s3') http = urllib3.PoolManager() def lambda_handler(event, context): """ AWS Lambda handler to fetch Cisco ACI events, faults, and audit logs and store them in S3 """ try: # Get environment variables s3_bucket = os.environ['S3_BUCKET'] s3_prefix = os.environ['S3_PREFIX'] state_key = os.environ['STATE_KEY'] apic_url = os.environ['APIC_URL'] apic_username = os.environ['APIC_USERNAME'] apic_password = os.environ['APIC_PASSWORD'] # Optional parameters page_size = int(os.environ.get('PAGE_SIZE', '100')) max_pages = int(os.environ.get('MAX_PAGES', '10')) logger.info(f"Starting Cisco ACI data collection for bucket: {s3_bucket}") # Get last run timestamp from state file last_timestamp = get_last_timestamp(s3_bucket, state_key) if not last_timestamp: last_timestamp = (datetime.utcnow() - timedelta(hours=1)).isoformat() + 'Z' # Authenticate to APIC session_token = authenticate_apic(apic_url, apic_username, apic_password) headers = { 'Cookie': f'APIC-cookie={session_token}', 'Accept': 'application/json', 'Content-Type': 'application/json' } # Data types to collect data_types = ['faultInst', 'eventRecord', 'aaaModLR'] all_collected_data = [] for data_type in data_types: logger.info(f"Collecting {data_type} data") collected_data = collect_aci_data(apic_url, headers, data_type, last_timestamp, page_size, max_pages) # Tag each record with its type for record in collected_data: record['_data_type'] = data_type all_collected_data.extend(collected_data) logger.info(f"Collected {len(collected_data)} {data_type} records") logger.info(f"Total records collected: {len(all_collected_data)}") # Store data in S3 if any were collected if all_collected_data: timestamp_str = datetime.utcnow().strftime('%Y%m%d_%H%M%S') s3_key = f"{s3_prefix}cisco_aci_events_{timestamp_str}.ndjson" # Convert to NDJSON format (one JSON object per line) ndjson_content = '\n'.join(json.dumps(record) for record in all_collected_data) # Upload to S3 s3_client.put_object( Bucket=s3_bucket, Key=s3_key, Body=ndjson_content.encode('utf-8'), ContentType='application/x-ndjson' ) logger.info(f"Uploaded {len(all_collected_data)} records to s3://{s3_bucket}/{s3_key}") # Update state file with latest timestamp from collected data latest_timestamp = get_latest_timestamp_from_records(all_collected_data) if not latest_timestamp: latest_timestamp = datetime.utcnow().isoformat() + 'Z' update_state(s3_bucket, state_key, latest_timestamp) return { 'statusCode': 200, 'body': json.dumps({ 'message': 'Success', 'total_records_collected': len(all_collected_data), 'data_types_collected': data_types }) } except Exception as e: logger.error(f"Error in lambda_handler: {str(e)}") return { 'statusCode': 500, 'body': json.dumps({ 'error': str(e) }) } def authenticate_apic(apic_url, username, password): """ Authenticate to APIC and return session token """ login_url = f"{apic_url}/api/aaaLogin.json" login_data = { "aaaUser": { "attributes": { "name": username, "pwd": password } } } response = http.request( 'POST', login_url, body=json.dumps(login_data).encode('utf-8'), headers={'Content-Type': 'application/json'}, timeout=30 ) if response.status != 200: raise RuntimeError(f"APIC authentication failed: {response.status} {response.data[:256]!r}") response_data = json.loads(response.data.decode('utf-8')) token = response_data['imdata'][0]['aaaLogin']['attributes']['token'] logger.info("Successfully authenticated to APIC") return token def collect_aci_data(apic_url, headers, data_type, last_timestamp, page_size, max_pages): """ Collect data from APIC REST API with pagination """ all_data = [] page = 0 while page < max_pages: # Build API URL with pagination and time filters api_url = f"{apic_url}/api/class/{data_type}.json" params = [ f'page-size={page_size}', f'page={page}', f'order-by={data_type}.created|asc' ] # Add time filter for all data types to prevent duplicates time_attr = 'created' if last_timestamp: params.append(f'query-target-filter=gt({data_type}.{time_attr},"{last_timestamp}")') full_url = f"{api_url}?{'&'.join(params)}" logger.info(f"Fetching {data_type} page {page} from APIC") # Make API request response = http.request('GET', full_url, headers=headers, timeout=60) if response.status != 200: logger.error(f"API request failed: {response.status} {response.data[:256]!r}") break data = json.loads(response.data.decode('utf-8')) records = data.get('imdata', []) if not records: logger.info(f"No more {data_type} records found") break # Extract the actual data from APIC format extracted_records = [] for record in records: if data_type in record: extracted_records.append(record[data_type]) all_data.extend(extracted_records) page += 1 # If we got less than page_size records, we've reached the end if len(records) < page_size: break return all_data def get_last_timestamp(bucket, state_key): """ Get the last run timestamp from S3 state file """ try: response = s3_client.get_object(Bucket=bucket, Key=state_key) state_data = json.loads(response['Body'].read().decode('utf-8')) return state_data.get('last_timestamp') except s3_client.exceptions.NoSuchKey: logger.info("No state file found, starting from 1 hour ago") return None except Exception as e: logger.warning(f"Error reading state file: {str(e)}") return None def get_latest_timestamp_from_records(records): """ Get the latest timestamp from collected records to prevent missing events """ if not records: return None latest = None latest_time = None for record in records: try: # Handle both direct attributes and nested structure attrs = record.get('attributes', record) created = attrs.get('created') modTs = attrs.get('modTs') # Fallback for some object types timestamp = created or modTs if timestamp: if latest_time is None or timestamp > latest_time: latest_time = timestamp latest = record except Exception as e: logger.debug(f"Error parsing timestamp from record: {e}") continue return latest_time def update_state(bucket, state_key, timestamp): """ Update the state file with the current timestamp """ try: state_data = { 'last_timestamp': timestamp, 'updated_at': datetime.utcnow().isoformat() + 'Z' } s3_client.put_object( Bucket=bucket, Key=state_key, Body=json.dumps(state_data).encode('utf-8'), ContentType='application/json' ) logger.info(f"Updated state file with timestamp: {timestamp}") except Exception as e: logger.error(f"Error updating state file: {str(e)}")Rufen Sie Konfiguration > Umgebungsvariablen auf.
Klicken Sie auf Bearbeiten> Neue Umgebungsvariable hinzufügen.
Geben Sie die folgenden Umgebungsvariablen ein und ersetzen Sie die Platzhalter durch Ihre Werte.
- S3_BUCKET:
cisco-aci-logs - S3_PREFIX:
cisco-aci-events/ - STATE_KEY:
cisco-aci-events/state.json - APIC_URL:
https://apic.example.com - APIC_USERNAME:
<your-apic-username> - APIC_PASSWORD:
<your-apic-password> - PAGE_SIZE:
100(optional, steuert die Paginierungsgröße) - MAX_PAGES:
10(optional, begrenzt die Gesamtzahl der Seiten, die pro Ausführung abgerufen werden)
- S3_BUCKET:
Bleiben Sie nach dem Erstellen der Funktion auf der zugehörigen Seite oder öffnen Sie Lambda > Funktionen > cisco-aci-events-collector.
Wählen Sie den Tab Konfiguration aus.
Klicken Sie im Bereich Allgemeine Konfiguration auf Bearbeiten.
Ändern Sie Zeitlimit in 5 Minuten (300 Sekunden) und klicken Sie auf Speichern.
EventBridge-Zeitplan erstellen
- Gehen Sie zu Amazon EventBridge > Scheduler > Create schedule (Amazon EventBridge > Scheduler > Zeitplan erstellen).
- Geben Sie die folgenden Konfigurationsdetails an:
- Wiederkehrender Zeitplan: Preis (
15 minutes). - Ziel: Ihre Lambda-Funktion
cisco-aci-events-collector. - Name:
cisco-aci-events-collector-15m.
- Wiederkehrender Zeitplan: Preis (
- Klicken Sie auf Zeitplan erstellen.
Optional: IAM-Nutzer mit Lesezugriff und Schlüssel für Google SecOps erstellen
- Rufen Sie die AWS-Konsole > IAM > Nutzer > Nutzer hinzufügen auf.
- Klicken Sie auf Add users (Nutzer hinzufügen).
- Geben Sie die folgenden Konfigurationsdetails an:
- Nutzer: Geben Sie
secops-readerein. - Zugriffstyp: Wählen Sie Zugriffsschlüssel – programmatischer Zugriff aus.
- Nutzer: Geben Sie
- Klicken Sie auf Nutzer erstellen.
- Minimale Leseberechtigung (benutzerdefiniert) anhängen: Nutzer > secops-reader > Berechtigungen > Berechtigungen hinzufügen > Richtlinien direkt anhängen > Richtlinie erstellen.
Geben Sie im JSON-Editor die folgende Richtlinie ein:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["s3:GetObject"], "Resource": "arn:aws:s3:::cisco-aci-logs/*" }, { "Effect": "Allow", "Action": ["s3:ListBucket"], "Resource": "arn:aws:s3:::cisco-aci-logs" } ] }Legen Sie
secops-reader-policyals Name fest.Gehen Sie zu Richtlinie erstellen > suchen/auswählen > Weiter > Berechtigungen hinzufügen.
Rufen Sie Sicherheitsanmeldedaten > Zugriffsschlüssel > Zugriffsschlüssel erstellen auf.
Laden Sie die CSV herunter (diese Werte werden in den Feed eingegeben).
Feed in Google SecOps konfigurieren, um Cisco ACI-Logs aufzunehmen
- Rufen Sie die SIEM-Einstellungen > Feeds auf.
- Klicken Sie auf + Neuen Feed hinzufügen.
- Geben Sie im Feld Feedname einen Namen für den Feed ein, z. B.
Cisco ACI JSON logs. - Wählen Sie Amazon S3 V2 als Quelltyp aus.
- Wählen Sie Cisco Application Centric Infrastructure als Logtyp aus.
- Klicken Sie auf Weiter.
- Geben Sie Werte für die folgenden Eingabeparameter an:
- S3-URI:
s3://cisco-aci-logs/cisco-aci-events/ - Optionen zum Löschen von Quellen: Wählen Sie die gewünschte Option zum Löschen aus.
- Maximales Dateialter: Dateien einschließen, die in den letzten Tagen geändert wurden. Der Standardwert ist 180 Tage.
- Zugriffsschlüssel-ID: Der Nutzerzugriffsschlüssel mit Zugriff auf den S3-Bucket.
- Geheimer Zugriffsschlüssel: Der geheime Schlüssel des Nutzers mit Zugriff auf den S3-Bucket.
- Asset-Namespace: Der Asset-Namespace.
- Aufnahmelabels: Das Label, das auf die Ereignisse aus diesem Feed angewendet wird.
- S3-URI:
- Klicken Sie auf Weiter.
- Prüfen Sie die neue Feedkonfiguration auf dem Bildschirm Abschließen und klicken Sie dann auf Senden.
UDM-Zuordnungstabelle
| Logfeld | UDM-Zuordnung | Logik |
|---|---|---|
| @timestamp | read_only_udm.metadata.event_timestamp | Der Wert wird aus dem Rohlogfeld „@timestamp“ übernommen und als Zeitstempel geparst. |
| aci_tag | read_only_udm.metadata.product_log_id | Der Wert wird aus dem Rohlogfeld „aci_tag“ übernommen. |
| cisco_timestamp | - | Nicht zugeordnet. |
| DIP | read_only_udm.target.ip | Der Wert wird aus dem Rohlogfeld „DIP“ übernommen. |
| DPort | read_only_udm.target.port | Der Wert wird aus dem Rohlogfeld „DPort“ übernommen und in eine Ganzzahl konvertiert. |
| Beschreibung | read_only_udm.security_result.description | Der Wert stammt aus dem Rohlogfeld „description“. |
| fault_cause | read_only_udm.additional.fields.value.string_value | Der Wert wird aus dem Rohlogfeld „fault_cause“ übernommen. Der Schlüssel ist auf „Fehlerursache“ festgelegt. |
| Hostname | read_only_udm.principal.hostname | Der Wert wird aus dem Rohlogfeld „hostname“ übernommen. |
| lifecycle_state | read_only_udm.metadata.product_event_type | Der Wert wird aus dem Rohlogfeld „lifecycle_state“ übernommen. |
| log.source.address | - | Nicht zugeordnet. |
| logstash.collect.host | - | Nicht zugeordnet. |
| logstash.collect.timestamp | read_only_udm.metadata.collected_timestamp | Der Wert wird aus dem Rohlogfeld „logstash.collect.timestamp“ übernommen und als Zeitstempel geparst. |
| logstash.ingest.host | read_only_udm.intermediary.hostname | Der Wert wird aus dem Rohlogfeld „logstash.ingest.host“ übernommen. |
| logstash.irm_environment | read_only_udm.additional.fields.value.string_value | Der Wert wird aus dem Rohlogfeld „logstash.irm_environment“ übernommen. Der Schlüssel ist auf „IRM_Environment“ festgelegt. |
| logstash.irm_region | read_only_udm.additional.fields.value.string_value | Der Wert wird aus dem Rohlogfeld „logstash.irm_region“ übernommen. Der Schlüssel ist auf „IRM_Region“ festgelegt. |
| logstash.irm_site | read_only_udm.additional.fields.value.string_value | Der Wert wird aus dem Rohlogfeld „logstash.irm_site“ übernommen. Der Schlüssel ist auf „IRM_Site“ festgelegt. |
| logstash.process.host | read_only_udm.intermediary.hostname | Der Wert wird aus dem Rohlogfeld „logstash.process.host“ übernommen. |
| Nachricht | - | Nicht zugeordnet. |
| message_class | - | Nicht zugeordnet. |
| message_code | - | Nicht zugeordnet. |
| message_content | - | Nicht zugeordnet. |
| message_dn | - | Nicht zugeordnet. |
| message_type | read_only_udm.metadata.product_event_type | Der Wert wird aus dem Rohlogfeld „message_type“ übernommen, nachdem die eckigen Klammern entfernt wurden. |
| node_link | read_only_udm.principal.process.file.full_path | Der Wert wird aus dem Rohlogfeld „node_link“ übernommen. |
| PktLen | read_only_udm.network.received_bytes | Der Wert wird aus dem Rohlogfeld „PktLen“ übernommen und in eine vorzeichenlose Ganzzahl umgewandelt. |
| über das Programm | - | Nicht zugeordnet. |
| Proto | read_only_udm.network.ip_protocol | Der Wert wird aus dem Rohlogfeld „Proto“ übernommen, in eine Ganzzahl umgewandelt und dem entsprechenden IP-Protokollnamen zugeordnet (z.B. 6 -> TCP). |
| SIP | read_only_udm.principal.ip | Der Wert wird aus dem Rohlogfeld „SIP“ übernommen. |
| SPort | read_only_udm.principal.port | Der Wert wird aus dem Rohlogfeld „SPort“ übernommen und in eine Ganzzahl konvertiert. |
| syslog_facility | - | Nicht zugeordnet. |
| syslog_facility_code | - | Nicht zugeordnet. |
| syslog_host | read_only_udm.principal.ip, read_only_udm.observer.ip | Der Wert wird aus dem Rohlogfeld „syslog_host“ übernommen. |
| syslog_prog | - | Nicht zugeordnet. |
| syslog_severity | read_only_udm.security_result.severity_details | Der Wert wird aus dem Rohlogfeld „syslog_severity“ übernommen. |
| syslog_severity_code | read_only_udm.security_result.severity | Der Wert wird aus dem Rohlogfeld „syslog_severity_code“ übernommen und der entsprechenden Schweregradstufe zugeordnet: 5, 6, 7 –> INFORMATIONAL; 3, 4 –> MEDIUM; 0, 1, 2 –> HIGH. |
| syslog5424_pri | - | Nicht zugeordnet. |
| VLAN-ID | read_only_udm.principal.resource.id | Der Wert wird aus dem Rohlogfeld „Vlan-Id“ übernommen. |
| - | read_only_udm.metadata.event_type | Logik: Wenn „SIP“ oder „hostname“ und „Proto“ vorhanden sind, wird der Wert auf „NETWORK_CONNECTION“ festgelegt. Andernfalls, wenn „SIP“, „hostname“ oder „syslog_host“ vorhanden ist, auf „STATUS_UPDATE“ setzen. Andernfalls auf „GENERIC_EVENT“ setzen. |
| - | read_only_udm.metadata.log_type | Logik: Auf „CISCO_ACI“ festgelegt. |
| - | read_only_udm.metadata.vendor_name | Logik: Auf „Cisco“ festgelegt. |
| - | read_only_udm.metadata.product_name | Logik: Auf „ACI“ festgelegt. |
Benötigen Sie weitere Hilfe? Antworten von Community-Mitgliedern und Google SecOps-Experten erhalten