Collecter les journaux Cisco Application Centric Infrastructure (ACI)
Ce document explique comment ingérer des journaux Cisco Application Centric Infrastructure (ACI) dans Google Security Operations. L'analyseur tente d'abord de traiter les journaux Cisco ACI entrants en tant que messages syslog à l'aide de modèles Grok. Si l'analyse syslog échoue, le message est considéré comme étant au format JSON et est analysé en conséquence. Enfin, il mappe les champs extraits au modèle de données unifié (UDM).
Cette intégration est compatible avec deux méthodes :
- Option 1 : Format Syslog via l'agent Bindplane
- Option 2 : Format JSON via AWS S3 à l'aide de l'API REST APIC
Chaque option est autonome et peut être implémentée indépendamment en fonction des exigences de votre infrastructure et de vos préférences concernant le format des journaux.
Option 1 : Syslog via l'agent Bindplane
Cette option configure le fabric Cisco ACI pour envoyer des messages syslog à un agent Bindplane, qui les transfère à Chronicle pour analyse.
Avant de commencer
Assurez-vous de remplir les conditions suivantes :
- Une instance Google SecOps
- Un hôte Windows 2016 ou version ultérieure, ou Linux avec
systemd - Si vous exécutez l'agent derrière un proxy, assurez-vous que les ports de pare-feu sont ouverts conformément aux exigences de l'agent Bindplane.
- Accès privilégié à la console Cisco APIC
Obtenir le fichier d'authentification d'ingestion Google SecOps
- Connectez-vous à la console Google SecOps.
- Accédez à Paramètres du 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 sur lequel 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 de la section Informations sur 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 fenêtres
- Ouvrez l'invite de commandes 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" /quiet
Installation de Linux
- Ouvrez un terminal avec les droits 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.sh
Autres ressources d'installation
- Pour plus d'options d'installation, consultez ce guide d'installation.
Configurer l'agent Bindplane pour ingérer Syslog et l'envoyer à Google SecOps
Accédez au fichier de configuration :
- Recherchez le fichier
config.yaml. Il se trouve généralement dans le répertoire/etc/bindplane-agent/sous Linux ou dans le répertoire d'installation sous Windows. - Ouvrez le fichier à l'aide d'un éditeur de texte (par exemple,
nano,viou le Bloc-notes).
- Recherchez le fichier
Modifiez le fichier
config.yamlcomme suit :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- Remplacez le port et l'adresse IP selon les besoins de votre infrastructure.
- Remplacez
<customer_id>par le numéro client réel. - Mettez à jour
/path/to/ingestion-authentication-file.jsonen indiquant le chemin d'accès où le fichier d'authentification a été enregistré dans la section Obtenir le fichier d'authentification pour l'ingestion Google SecOps.
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 bindplane-agentPour redémarrer l'agent Bindplane sous Windows, vous pouvez utiliser la console Services ou saisir la commande suivante :
net stop BindPlaneAgent && net start BindPlaneAgent
Configurer le transfert Syslog sur Cisco ACI
Configurer le contrat de gestion hors bande
- Connectez-vous à la console Cisco APIC.
- Accédez à Tenants > mgmt > Contracts > Filters.
- Cliquez sur Créer un filtre.
- Fournissez les informations de configuration suivantes :
- Nom : saisissez
syslog-udp-514. - Nom de l'entrée : saisissez
syslog. - EtherType : sélectionnez IP.
- Protocole IP : sélectionnez UDP.
- Plage de ports de destination (de) : saisissez
514. - Plage de ports de destination (jusqu'à) : saisissez
514.
- Nom : saisissez
- Cliquez sur Envoyer.
Créer un contrat de gestion
- Accédez à Tenants> mgmt> Contracts> Standard.
- Cliquez sur Créer un contrat.
- Fournissez les informations de configuration suivantes :
- Nom : saisissez
mgmt-syslog-contract. - Champ d'application : sélectionnez Contexte.
- Nom : saisissez
- Cliquez sur Envoyer.
- Développez le contrat, puis cliquez sur Sujets.
- Cliquez sur Créer un objet de contrat.
- Fournissez les informations de configuration suivantes :
- Nom : saisissez
syslog-subject. - Appliquer les deux sens : cochez cette option.
- Nom : saisissez
- Cliquez sur Envoyer.
- Développez le sujet, puis cliquez sur Filtres.
- Cliquez sur Créer une liaison de filtre.
- Sélectionnez le filtre
syslog-udp-514créé précédemment. - Cliquez sur Envoyer.
Configurer un groupe de destinations Syslog
- Accédez à Administration > Collecteurs de données externes > Destinations de surveillance > Syslog.
- Effectuez un clic droit sur Syslog, puis sélectionnez Créer un groupe de destinations de surveillance Syslog.
- Fournissez les informations de configuration suivantes :
- Nom : saisissez
Chronicle-Syslog-Group. - État de l'administrateur : sélectionnez Activé.
- Format : sélectionnez aci.
- Nom : saisissez
- Cliquez sur Suivant.
- Dans la boîte de dialogue Créer une destination de surveillance Syslog :
- Nom : saisissez
Chronicle-BindPlane. - Hôte : saisissez l'adresse IP de votre serveur d'agent Bindplane.
- Port : saisissez
514. - État de l'administrateur : sélectionnez Activé.
- Gravité : sélectionnez Informations (pour capturer les journaux détaillés).
- Nom : saisissez
- Cliquez sur Envoyer.
Configurer des règles de surveillance
Règles de surveillance de Fabric
- Accédez à Fabric > Fabric Policies > Policies > Monitoring > Common Policy (Structure > Règles de structure > Règles > Surveillance > Règle commune).
- Développez Callhome/Smart Callhome/SNMP/Syslog/TACACS.
- Effectuez un clic droit sur Syslog, puis sélectionnez Créer une source Syslog.
- Fournissez les informations de configuration suivantes :
- Nom : saisissez
Chronicle-Fabric-Syslog. - Journaux d'audit : cochez cette case pour inclure les événements d'audit.
- Événements : cochez cette case pour inclure les événements système.
- Défauts : cochez cette case pour inclure les événements de défaut.
- Journaux de session : cochez cette case pour inclure les journaux de session.
- Groupe de destinations : sélectionnez
Chronicle-Syslog-Group.
- Nom : saisissez
- Cliquez sur Envoyer.
Règles de surveillance des accès
- Accédez à Structure > Règles d'accès > Règles > Surveillance > Règle par défaut.
- Développez Callhome/Smart Callhome/SNMP/Syslog.
- Effectuez un clic droit sur Syslog, puis sélectionnez Créer une source Syslog.
- Fournissez les informations de configuration suivantes :
- Nom : saisissez
Chronicle-Access-Syslog. - Journaux d'audit : cochez cette case pour inclure les événements d'audit.
- Événements : cochez cette case pour inclure les événements système.
- Défauts : cochez cette case pour inclure les événements de défaut.
- Journaux de session : cochez cette case pour inclure les journaux de session.
- Groupe de destinations : sélectionnez
Chronicle-Syslog-Group.
- Nom : saisissez
- Cliquez sur Envoyer.
Configurer la règle "Messages Syslog système"
- Accédez à Fabric > Fabric Policies > Policies > Monitoring > Common Policy (Structure > Règles de structure > Règles > Surveillance > Règle commune).
- Développez Règles relatives aux messages Syslog.
- Cliquez sur par défaut.
- Dans la section Filtre des établissements :
- Établissement : sélectionnez par défaut.
- Gravité minimale : remplacez-la par information.
- Cliquez sur Envoyer.
Option 2 : JSON via AWS S3
Cette option utilise l'API REST APIC pour collecter les événements, les défauts et les journaux d'audit au format JSON à partir de la structure Cisco ACI, et les stocke dans AWS S3 pour l'ingestion SecOps.
Avant de commencer
- Instance Google SecOps.
- Accès privilégié à la console Cisco APIC.
- Accès privilégié à AWS (S3, IAM, Lambda, EventBridge).
Collecter les conditions préalables de Cisco ACI APIC (ID, clés API, ID d'organisation, jetons)
- Connectez-vous à la console Cisco APIC à l'aide du protocole HTTPS.
- Accédez à Admin> AAA (sur APIC 6.0 ou version ultérieure) ou Admin> Authentification> AAA (sur les versions antérieures).
- Remarque : Le chemin d'accès au menu AAA a changé à partir d'APIC 6.0(1).
- Créez un utilisateur local ou utilisez-en un existant avec les droits appropriés.
- Copiez et enregistrez les informations suivantes dans un emplacement sécurisé :
- Nom d'utilisateur APIC : utilisateur local disposant d'un accès en lecture aux données de surveillance
- Mot de passe APIC : mot de passe de l'utilisateur
- URL APIC : URL HTTPS de votre APIC (par exemple,
https://apic.example.com)
Configurer un bucket AWS S3 et IAM pour Google SecOps
- Créez un bucket Amazon S3 en suivant ce guide de l'utilisateur : Créer un bucket.
- Enregistrez le nom et la région du bucket pour référence ultérieure (par exemple,
cisco-aci-logs). - Créez un utilisateur en suivant ce guide de l'utilisateur : Créer un utilisateur IAM.
- Sélectionnez l'utilisateur créé.
- Sélectionnez l'onglet Informations d'identification de sécurité.
- Cliquez sur Créer une clé d'accès dans la section Clés d'accès.
- Sélectionnez Service tiers comme Cas d'utilisation.
- Cliquez sur Suivant.
- Facultatif : Ajoutez un tag de description.
- Cliquez sur Créer une clé d'accès.
- Cliquez sur Télécharger le fichier CSV pour enregistrer la clé d'accès et la clé d'accès secrète pour référence ultérieure.
- Cliquez sur OK.
- Sélectionnez l'onglet Autorisations.
- Cliquez sur Ajouter des autorisations dans la section Règles relatives aux autorisations.
- Sélectionnez Ajouter des autorisations.
- Sélectionnez Joindre directement des règles.
- Recherchez la règle AmazonS3FullAccess.
- Sélectionnez la règle.
- Cliquez sur Suivant.
- Cliquez sur Ajouter des autorisations.
Configurer la stratégie et le rôle IAM pour les importations S3
- Dans la console AWS, accédez à IAM > Stratégies.
- Cliquez sur Créer une règle> onglet "JSON".
Saisissez la règle suivante :
{ "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" } ] }- Remplacez
cisco-aci-logssi vous avez saisi un autre nom de bucket.
- Remplacez
Cliquez sur Suivant > Créer une règle.
Accédez à IAM > Rôles > Créer un rôle > Service AWS > Lambda.
Associez la stratégie que vous venez de créer et la stratégie gérée AWSLambdaBasicExecutionRole.
Nommez le rôle
cisco-aci-lambda-role, puis cliquez sur Créer un rôle.
Créer la fonction Lambda
- Dans la console AWS, accédez à Lambda > Fonctions > Créer une fonction.
- Cliquez sur Créer à partir de zéro.
Fournissez les informations de configuration suivantes :
- Nom :
cisco-aci-events-collector - Runtime : Python 3.13
- Architecture : x86_64
- Rôle d'exécution :
cisco-aci-lambda-role
- Nom :
Une fois la fonction créée, ouvrez l'onglet Code, supprimez le stub et saisissez le code suivant (
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)}")Accédez à Configuration > Variables d'environnement.
Cliquez sur Modifier > Ajouter une variable d'environnement.
Saisissez les variables d'environnement fournies, en remplaçant par vos valeurs.
- 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(facultatif, contrôle la taille de la pagination) - MAX_PAGES :
10(facultatif, limite le nombre total de pages extraites par exécution)
- S3_BUCKET :
Une fois la fonction créée, restez sur sa page (ou ouvrez Lambda > Functions > cisco-aci-events-collector).
Accédez à l'onglet Configuration.
Dans le panneau Configuration générale, cliquez sur Modifier.
Définissez Délai avant expiration sur 5 minutes (300 secondes), puis cliquez sur Enregistrer.
Créer une programmation EventBridge
- Accédez à Amazon EventBridge> Scheduler> Create schedule.
- Fournissez les informations de configuration suivantes :
- Planification récurrente : Tarif (
15 minutes). - Cible : votre fonction Lambda
cisco-aci-events-collector. - Nom :
cisco-aci-events-collector-15m.
- Planification récurrente : Tarif (
- Cliquez sur Créer la programmation.
Facultatif : Créez un utilisateur et des clés IAM en lecture seule pour Google SecOps
- Accédez à la console AWS> IAM> Utilisateurs> Ajouter des utilisateurs.
- Cliquez sur Add users (Ajouter des utilisateurs).
- Fournissez les informations de configuration suivantes :
- Utilisateur : saisissez
secops-reader. - Type d'accès : sélectionnez Clé d'accès – Accès programmatique.
- Utilisateur : saisissez
- Cliquez sur Créer un utilisateur.
- Associez une stratégie de lecture minimale (personnalisée) : Utilisateurs > secops-reader > Autorisations > Ajouter des autorisations > Associer des stratégies directement > Créer une stratégie.
Dans l'éditeur JSON, saisissez la stratégie suivante :
{ "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" } ] }Définissez le nom sur
secops-reader-policy.Accédez à Créer une règle > recherchez/sélectionnez > Suivant > Ajouter des autorisations.
Accédez à Identifiants de sécurité> Clés d'accès> Créer une clé d'accès.
Téléchargez le CSV (ces valeurs sont saisies dans le flux).
Configurer un flux dans Google SecOps pour ingérer les journaux Cisco ACI
- Accédez à Paramètres SIEM> Flux.
- Cliquez sur + Ajouter un flux.
- Dans le champ Nom du flux, saisissez un nom pour le flux (par exemple,
Cisco ACI JSON logs). - Sélectionnez Amazon S3 V2 comme type de source.
- Sélectionnez Cisco Application Centric Infrastructure comme type de journal.
- Cliquez sur Suivant.
- Spécifiez les valeurs des paramètres d'entrée suivants :
- URI S3 :
s3://cisco-aci-logs/cisco-aci-events/ - Options de suppression de la source : sélectionnez l'option de suppression de votre choix.
- Âge maximal des fichiers : incluez les fichiers modifiés au cours des derniers jours. La valeur par défaut est de 180 jours.
- ID de clé d'accès : clé d'accès utilisateur ayant accès au bucket S3.
- Clé d'accès secrète : clé secrète de l'utilisateur ayant accès au bucket S3.
- Espace de noms de l'élément : espace de noms de l'élément.
- Libellés d'ingestion : libellé appliqué aux événements de ce flux.
- URI S3 :
- Cliquez sur Suivant.
- Vérifiez la configuration de votre nouveau flux sur l'écran Finaliser, puis cliquez sur Envoyer.
Table de mappage UDM
| Champ de journal | Mappage UDM | Logique |
|---|---|---|
| @timestamp | read_only_udm.metadata.event_timestamp | La valeur est extraite du champ de journal brut "@timestamp" et analysée en tant que code temporel. |
| aci_tag | read_only_udm.metadata.product_log_id | La valeur est extraite du champ de journal brut "aci_tag". |
| cisco_timestamp | - | Non mappé. |
| DIP | read_only_udm.target.ip | La valeur est extraite du champ de journal brut "DIP". |
| DPort | read_only_udm.target.port | La valeur est extraite du champ de journal brut "DPort" et convertie en entier. |
| description | read_only_udm.security_result.description | La valeur est extraite du champ de journal brut "description". |
| fault_cause | read_only_udm.additional.fields.value.string_value | La valeur est extraite du champ de journal brut "fault_cause". La clé est définie sur "Cause du problème". |
| nom d'hôte | read_only_udm.principal.hostname | La valeur est extraite du champ de journal brut "hostname". |
| lifecycle_state | read_only_udm.metadata.product_event_type | La valeur est extraite du champ de journal brut "lifecycle_state". |
| log.source.address | - | Non mappé. |
| logstash.collect.host | - | Non mappé. |
| logstash.collect.timestamp | read_only_udm.metadata.collected_timestamp | La valeur est extraite du champ de journal brut "logstash.collect.timestamp" et analysée en tant qu'horodatage. |
| logstash.ingest.host | read_only_udm.intermediary.hostname | La valeur est extraite du champ de journal brut "logstash.ingest.host". |
| logstash.irm_environment | read_only_udm.additional.fields.value.string_value | La valeur est extraite du champ de journal brut "logstash.irm_environment". La clé est définie sur "IRM_Environment". |
| logstash.irm_region | read_only_udm.additional.fields.value.string_value | La valeur est extraite du champ de journal brut "logstash.irm_region". La clé est définie sur "IRM_Region". |
| logstash.irm_site | read_only_udm.additional.fields.value.string_value | La valeur est extraite du champ de journal brut "logstash.irm_site". La clé est définie sur "IRM_Site". |
| logstash.process.host | read_only_udm.intermediary.hostname | La valeur est extraite du champ de journal brut "logstash.process.host". |
| message | - | Non mappé. |
| message_class | - | Non mappé. |
| message_code | - | Non mappé. |
| message_content | - | Non mappé. |
| message_dn | - | Non mappé. |
| message_type | read_only_udm.metadata.product_event_type | La valeur est extraite du champ de journal brut "message_type" après suppression des crochets. |
| node_link | read_only_udm.principal.process.file.full_path | La valeur est extraite du champ de journal brut "node_link". |
| PktLen | read_only_udm.network.received_bytes | La valeur est extraite du champ de journal brut "PktLen" et convertie en entier non signé. |
| le programme | - | Non mappé. |
| Proto | read_only_udm.network.ip_protocol | La valeur est extraite du champ de journal brut "Proto", convertie en entier et mappée au nom du protocole IP correspondant (par exemple, 6 > TCP). |
| SIP | read_only_udm.principal.ip | La valeur est extraite du champ de journal brut "SIP". |
| SPort | read_only_udm.principal.port | La valeur est extraite du champ de journal brut "SPort" et convertie en entier. |
| syslog_facility | - | Non mappé. |
| syslog_facility_code | - | Non mappé. |
| syslog_host | read_only_udm.principal.ip, read_only_udm.observer.ip | La valeur est extraite du champ de journal brut "syslog_host". |
| syslog_prog | - | Non mappé. |
| syslog_severity | read_only_udm.security_result.severity_details | La valeur est extraite du champ de journal brut "syslog_severity". |
| syslog_severity_code | read_only_udm.security_result.severity | La valeur est extraite du champ de journal brut "syslog_severity_code" et mappée au niveau de gravité correspondant : 5, 6, 7 → INFORMATIONAL ; 3, 4 → MEDIUM ; 0, 1, 2 → HIGH. |
| syslog5424_pri | - | Non mappé. |
| Vlan-Id | read_only_udm.principal.resource.id | La valeur est extraite du champ de journal brut "Vlan-Id". |
| - | read_only_udm.metadata.event_type | Logique : si "SIP" ou "hostname" sont présents et que "Proto" est présent, définissez la valeur sur "NETWORK_CONNECTION". Sinon, si "SIP", "hostname" ou "syslog_host" sont présents, définissez la valeur sur "STATUS_UPDATE". Sinon, définissez-le sur "GENERIC_EVENT". |
| - | read_only_udm.metadata.log_type | Logique : définissez la valeur sur "CISCO_ACI". |
| - | read_only_udm.metadata.vendor_name | Logique : défini sur "Cisco". |
| - | read_only_udm.metadata.product_name | Logique : définissez la valeur sur "ACI". |
Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.