Recopila registros de Cisco Application Centric Infrastructure (ACI)
En este documento, se explica cómo transferir registros de la infraestructura centrada en aplicaciones (ACI) de Cisco a Google Security Operations. En primer lugar, el analizador intenta procesar los registros de Cisco ACI entrantes como mensajes de syslog con patrones de Grok. Si falla el análisis de syslog, se supone que el mensaje está en formato JSON y se analiza en consecuencia. Por último, asigna los campos extraídos al modelo de datos unificado (UDM).
Esta integración admite dos métodos:
- Opción 1: Formato de Syslog a través del agente de Bindplane
- Opción 2: Formato JSON a través de AWS S3 con la API de REST de APIC
Cada opción es independiente y se puede implementar por separado según los requisitos de infraestructura y las preferencias de formato de registro.
Opción 1: Syslog a través del agente de Bindplane
Esta opción configura el tejido de Cisco ACI para enviar mensajes de syslog a un agente de Bindplane, que los reenvía a Chronicle para su análisis.
Antes de comenzar
Asegúrate de cumplir con los siguientes requisitos previos:
- Una instancia de Google SecOps
- Un host de Windows 2016 o posterior, o Linux con
systemd - Si se ejecuta detrás de un proxy, asegúrate de que los puertos de firewall estén abiertos según los requisitos del agente de Bindplane.
- Acceso con privilegios a la consola de Cisco APIC
Obtén el archivo de autenticación de transferencia de Google SecOps
- Accede a la consola de Google SecOps.
- Ve a Configuración de SIEM > Agentes de recopilación.
- Descarga el archivo de autenticación de transferencia. Guarda el archivo de forma segura en el sistema en el que se instalará BindPlane.
Obtén el ID de cliente de Google SecOps
- Accede a la consola de Google SecOps.
- Ve a Configuración de SIEM > Perfil.
- Copia y guarda el ID de cliente de la sección Detalles de la organización.
Instala el agente de BindPlane
Instala el agente de Bindplane en tu sistema operativo Windows o Linux según las siguientes instrucciones.
Instalación en Windows
- Abre el símbolo del sistema o PowerShell como administrador.
Ejecuta el comando siguiente:
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
Instalación en Linux
- Abre una terminal con privilegios de raíz o sudo.
Ejecuta el comando siguiente:
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
Recursos de instalación adicionales
- Para obtener más opciones de instalación, consulta esta guía de instalación.
Configura el agente de BindPlane para transferir Syslog y enviarlo a Google SecOps
Accede al archivo de configuración:
- Ubica el archivo
config.yaml. Por lo general, se encuentra en el directorio/etc/bindplane-agent/en Linux o en el directorio de instalación en Windows. - Abre el archivo con un editor de texto (por ejemplo,
nano,vio Bloc de notas).
- Ubica el archivo
Edita el archivo
config.yamlde la siguiente manera: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- Reemplaza el puerto y la dirección IP según sea necesario en tu infraestructura.
- Reemplaza
<customer_id>por el ID de cliente real. - Actualiza
/path/to/ingestion-authentication-file.jsona la ruta de acceso en la que se guardó el archivo de autenticación en la sección Cómo obtener el archivo de autenticación de la transferencia de datos de Google SecOps.
Reinicia el agente de Bindplane para aplicar los cambios
Para reiniciar el agente de Bindplane en Linux, ejecuta el siguiente comando:
sudo systemctl restart bindplane-agentPara reiniciar el agente de Bindplane en Windows, puedes usar la consola de Servicios o ingresar el siguiente comando:
net stop BindPlaneAgent && net start BindPlaneAgent
Configura el reenvío de Syslog en Cisco ACI
Configura el contrato de administración fuera de banda
- Accede a la consola de Cisco APIC.
- Ve a Tenants > mgmt > Contracts > Filters.
- Haz clic en Crear filtro.
- Proporciona los siguientes detalles de configuración:
- Nombre: Ingresa
syslog-udp-514. - Nombre de entrada: Ingresa
syslog. - EtherType: Selecciona IP.
- Protocolo IP: Selecciona UDP.
- Rango de puertos de destino (desde): Ingresa
514. - Rango de puertos de destino hasta: Ingresa
514.
- Nombre: Ingresa
- Haz clic en Enviar.
Crear contrato de administración
- Ve a Tenants > mgmt > Contracts > Standard.
- Haz clic en Crear contrato.
- Proporciona los siguientes detalles de configuración:
- Nombre: Ingresa
mgmt-syslog-contract. - Alcance: Selecciona Contexto.
- Nombre: Ingresa
- Haz clic en Enviar.
- Expande el contrato y haz clic en Temas.
- Haz clic en Crear asunto del contrato.
- Proporciona los siguientes detalles de configuración:
- Nombre: Ingresa
syslog-subject. - Aplicar en ambas direcciones: Marca esta opción.
- Nombre: Ingresa
- Haz clic en Enviar.
- Expande el asunto y haz clic en Filtros.
- Haz clic en Create Filter Binding.
- Selecciona el filtro
syslog-udp-514que creaste antes. - Haz clic en Enviar.
Configura el grupo de destino de Syslog
- Ve a Administrador > Recopiladores de datos externos > Destinos de supervisión > Syslog.
- Haz clic con el botón derecho en Syslog y selecciona Create Syslog Monitoring Destination Group.
- Proporciona los siguientes detalles de configuración:
- Nombre: Ingresa
Chronicle-Syslog-Group. - Estado de administrador: Selecciona Habilitado.
- Formato: Selecciona aci.
- Nombre: Ingresa
- Haz clic en Siguiente.
- En el diálogo Create Syslog Monitoring Destination, haz lo siguiente:
- Nombre: Ingresa
Chronicle-BindPlane. - Host: Ingresa la dirección IP del servidor del agente de Bindplane.
- Puerto: Ingresa
514. - Estado de administrador: Selecciona Habilitado.
- Gravedad: Selecciona información (para capturar registros detallados).
- Nombre: Ingresa
- Haz clic en Enviar.
Configura políticas de supervisión
Política de supervisión de Fabric
- Ve a Fabric > Fabric Policies > Policies > Monitoring > Common Policy.
- Expande Callhome/Smart Callhome/SNMP/Syslog/TACACS.
- Haz clic con el botón derecho en Syslog y selecciona Create Syslog Source.
- Proporciona los siguientes detalles de configuración:
- Nombre: Ingresa
Chronicle-Fabric-Syslog. - Registros de auditoría: Marca esta opción para incluir eventos de auditoría.
- Eventos: Marca esta opción para incluir los eventos del sistema.
- Faults: Marca esta opción para incluir eventos de fallas.
- Registros de sesión: Marca esta opción para incluir los registros de sesión.
- Grupo de destino: Selecciona
Chronicle-Syslog-Group.
- Nombre: Ingresa
- Haz clic en Enviar.
Política de Supervisión de Acceso
- Ve a Fabric > Access Policies > Policies > Monitoring > Default Policy.
- Expande Callhome/Smart Callhome/SNMP/Syslog.
- Haz clic con el botón derecho en Syslog y selecciona Create Syslog Source.
- Proporciona los siguientes detalles de configuración:
- Nombre: Ingresa
Chronicle-Access-Syslog. - Registros de auditoría: Marca esta opción para incluir eventos de auditoría.
- Eventos: Marca esta opción para incluir los eventos del sistema.
- Faults: Marca esta opción para incluir eventos de fallas.
- Registros de sesión: Marca esta opción para incluir los registros de sesión.
- Grupo de destino: Selecciona
Chronicle-Syslog-Group.
- Nombre: Ingresa
- Haz clic en Enviar.
Configura la política de mensajes de Syslog del sistema
- Ve a Fabric > Fabric Policies > Policies > Monitoring > Common Policy.
- Expande Políticas de mensajes de Syslog.
- Haz clic en predeterminada.
- En la sección Facility Filter, haz lo siguiente:
- Instalación: Selecciona predeterminado.
- Minimum Severity: Cambia a information.
- Haz clic en Enviar.
Opción 2: JSON a través de AWS S3
Esta opción usa la API de REST de APIC para recopilar eventos, fallas y registros de auditoría con formato JSON del tejido de Cisco ACI y los almacena en AWS S3 para la incorporación de SecOps.
Antes de comenzar
- Es la instancia de Google SecOps.
- Acceso con privilegios a la consola de Cisco APIC
- Acceso con privilegios a AWS (S3, IAM, Lambda, EventBridge).
Recopila los requisitos previos de Cisco ACI APIC (IDs, claves de API, IDs de organización y tokens)
- Accede a la consola de Cisco APIC a través de HTTPS.
- Ve a Admin > AAA (en APIC 6.0 y versiones posteriores) o Admin > Authentication > AAA (en versiones anteriores).
- Nota: La ruta de menú de AAA cambió a partir de APIC 6.0(1).
- Crea un usuario local nuevo o usa uno existente con los privilegios adecuados.
- Copia y guarda en una ubicación segura los siguientes detalles:
- Nombre de usuario de APIC: Usuario local con acceso de lectura a los datos de supervisión
- Contraseña de APIC: Contraseña del usuario
- URL de APIC: Es la URL HTTPS de tu APIC (por ejemplo,
https://apic.example.com).
Configura el bucket de AWS S3 y el IAM para Google SecOps
- Crea un bucket de Amazon S3 siguiendo esta guía del usuario: Cómo crear un bucket.
- Guarda el Nombre y la Región del bucket para futuras referencias (por ejemplo,
cisco-aci-logs). - Crea un usuario siguiendo esta guía del usuario: Cómo crear un usuario de IAM.
- Selecciona el usuario creado.
- Selecciona la pestaña Credenciales de seguridad.
- Haz clic en Crear clave de acceso en la sección Claves de acceso.
- Selecciona Servicio de terceros como Caso de uso.
- Haz clic en Siguiente.
- Opcional: Agrega una etiqueta de descripción.
- Haz clic en Crear clave de acceso.
- Haz clic en Descargar archivo CSV para guardar la clave de acceso y la clave de acceso secreta para consultarlas en el futuro.
- Haz clic en Listo.
- Selecciona la pestaña Permisos.
- Haz clic en Agregar permisos en la sección Políticas de permisos.
- Selecciona Agregar permisos.
- Selecciona Adjuntar políticas directamente.
- Busca la política AmazonS3FullAccess.
- Selecciona la política.
- Haz clic en Siguiente.
- Haz clic en Agregar permisos.
Configura la política y el rol de IAM para las cargas de S3
- En la consola de AWS, ve a IAM > Políticas.
- Haz clic en Crear política > pestaña JSON.
Ingresa la siguiente política:
{ "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" } ] }- Reemplaza
cisco-aci-logssi ingresaste un nombre de bucket diferente.
- Reemplaza
Haz clic en Siguiente > Crear política.
Ve a IAM > Roles > Crear rol > Servicio de AWS > Lambda.
Adjunta la política recién creada y la política administrada AWSLambdaBasicExecutionRole.
Nombra el rol
cisco-aci-lambda-roley haz clic en Crear rol.
Crea la función Lambda
- En la consola de AWS, ve a Lambda > Functions > Create function.
- Haz clic en Crear desde cero.
Proporciona los siguientes detalles de configuración:
- Nombre:
cisco-aci-events-collector - Entorno de ejecución: Python 3.13
- Arquitectura: x86_64
- Rol de ejecución:
cisco-aci-lambda-role
- Nombre:
Después de crear la función, abre la pestaña Code, borra el código auxiliar y, luego, ingresa el siguiente código (
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)}")Ve a Configuration > Environment variables.
Haz clic en Editar > Agregar nueva variable de entorno.
Ingresa las siguientes variables de entorno proporcionadas y reemplázalas por tus valores.
- 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(opcional, controla el tamaño de la paginación) - MAX_PAGES:
10(opcional, limita la cantidad total de páginas recuperadas por ejecución)
- S3_BUCKET:
Después de crear la función, permanece en su página (o abre Lambda > Functions > cisco-aci-events-collector).
Selecciona la pestaña Configuración.
En el panel Configuración general, haz clic en Editar.
Cambia Tiempo de espera a 5 minutos (300 segundos) y haz clic en Guardar.
Crea una programación de EventBridge
- Ve a Amazon EventBridge > Scheduler > Create schedule.
- Proporciona los siguientes detalles de configuración:
- Programación recurrente: Frecuencia (
15 minutes). - Destino: Tu función Lambda
cisco-aci-events-collector. - Nombre:
cisco-aci-events-collector-15m.
- Programación recurrente: Frecuencia (
- Haz clic en Crear programación.
Opcional: Crea un usuario y claves de IAM de solo lectura para Google SecOps
- Ve a Consola de AWS > IAM > Usuarios > Agregar usuarios.
- Haz clic en Agregar usuarios.
- Proporciona los siguientes detalles de configuración:
- Usuario: Ingresa
secops-reader. - Tipo de acceso: Selecciona Clave de acceso: Acceso programático.
- Usuario: Ingresa
- Haz clic en Crear usuario.
- Adjunta una política de lectura mínima (personalizada): Usuarios > secops-reader > Permisos > Agregar permisos > Adjuntar políticas directamente > Crear política.
En el editor de JSON, ingresa la siguiente política:
{ "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" } ] }Configura el nombre como
secops-reader-policy.Ve a Crear política > busca o selecciona > Siguiente > Agregar permisos.
Ve a Credenciales de seguridad > Claves de acceso > Crear clave de acceso.
Descarga el archivo CSV (estos valores se ingresan en el feed).
Configura un feed en Google SecOps para transferir registros de Cisco ACI
- Ve a Configuración de SIEM > Feeds.
- Haz clic en + Agregar feed nuevo.
- En el campo Nombre del feed, ingresa un nombre para el feed (por ejemplo,
Cisco ACI JSON logs). - Selecciona Amazon S3 V2 como el Tipo de fuente.
- Selecciona Cisco Application Centric Infrastructure como el Tipo de registro.
- Haz clic en Siguiente.
- Especifica valores para los siguientes parámetros de entrada:
- URI de S3:
s3://cisco-aci-logs/cisco-aci-events/ - Opciones de borrado de la fuente: Selecciona la opción de borrado según tu preferencia.
- Antigüedad máxima del archivo: Incluye los archivos modificados en la cantidad de días especificada. El valor predeterminado es de 180 días.
- ID de clave de acceso: Clave de acceso del usuario con acceso al bucket de S3.
- Clave de acceso secreta: Clave secreta del usuario con acceso al bucket de S3.
- Espacio de nombres del recurso: Es el espacio de nombres del recurso.
- Etiquetas de transmisión: Es la etiqueta que se aplica a los eventos de este feed.
- URI de S3:
- Haz clic en Siguiente.
- Revisa la nueva configuración del feed en la pantalla Finalizar y, luego, haz clic en Enviar.
Tabla de asignación de UDM
| Campo de registro | Asignación de UDM | Lógica |
|---|---|---|
| @timestamp | read_only_udm.metadata.event_timestamp | El valor se toma del campo de registro sin procesar "@timestamp" y se analiza como una marca de tiempo. |
| aci_tag | read_only_udm.metadata.product_log_id | El valor se toma del campo de registro sin procesar "aci_tag". |
| cisco_timestamp | - | Sin asignar. |
| DIP | read_only_udm.target.ip | El valor se toma del campo de registro sin procesar "DIP". |
| DPort | read_only_udm.target.port | El valor se toma del campo de registro sin procesar "DPort" y se convierte en un número entero. |
| descripción | read_only_udm.security_result.description | El valor se toma del campo de registro sin procesar "description". |
| fault_cause | read_only_udm.additional.fields.value.string_value | El valor se toma del campo de registro sin procesar "fault_cause". La clave se establece en "Causa de la falla". |
| Nombre de host | read_only_udm.principal.hostname | El valor se toma del campo de registro sin procesar "hostname". |
| lifecycle_state | read_only_udm.metadata.product_event_type | El valor se toma del campo de registro sin procesar "lifecycle_state". |
| log.source.address | - | Sin asignar. |
| logstash.collect.host | - | Sin asignar. |
| logstash.collect.timestamp | read_only_udm.metadata.collected_timestamp | El valor se toma del campo de registro sin procesar "logstash.collect.timestamp" y se analiza como una marca de tiempo. |
| logstash.ingest.host | read_only_udm.intermediary.hostname | El valor se toma del campo de registro sin procesar "logstash.ingest.host". |
| logstash.irm_environment | read_only_udm.additional.fields.value.string_value | El valor se toma del campo de registro sin procesar "logstash.irm_environment". La clave se establece en "IRM_Environment". |
| logstash.irm_region | read_only_udm.additional.fields.value.string_value | El valor se toma del campo de registro sin procesar "logstash.irm_region". La clave se establece en "IRM_Region". |
| logstash.irm_site | read_only_udm.additional.fields.value.string_value | El valor se toma del campo de registro sin procesar "logstash.irm_site". La clave se establece en "IRM_Site". |
| logstash.process.host | read_only_udm.intermediary.hostname | El valor se toma del campo de registro sin procesar "logstash.process.host". |
| mensaje | - | Sin asignar. |
| message_class | - | Sin asignar. |
| message_code | - | Sin asignar. |
| message_content | - | Sin asignar. |
| message_dn | - | Sin asignar. |
| message_type | read_only_udm.metadata.product_event_type | El valor se toma del campo de registro sin procesar "message_type" después de quitar los corchetes. |
| node_link | read_only_udm.principal.process.file.full_path | El valor se toma del campo de registro sin procesar "node_link". |
| PktLen | read_only_udm.network.received_bytes | El valor se toma del campo de registro sin procesar "PktLen" y se convierte en un número entero sin signo. |
| programa | - | Sin asignar. |
| Proto | read_only_udm.network.ip_protocol | El valor se toma del campo de registro sin procesar "Proto", se convierte en un número entero y se asigna al nombre del protocolo IP correspondiente (p.ej., 6 -> TCP). |
| SIP | read_only_udm.principal.ip | El valor se toma del campo de registro sin procesar "SIP". |
| SPort | read_only_udm.principal.port | El valor se toma del campo de registro sin procesar "SPort" y se convierte en un número entero. |
| syslog_facility | - | Sin asignar. |
| syslog_facility_code | - | Sin asignar. |
| syslog_host | read_only_udm.principal.ip, read_only_udm.observer.ip | El valor se toma del campo de registro sin procesar "syslog_host". |
| syslog_prog | - | Sin asignar. |
| syslog_severity | read_only_udm.security_result.severity_details | El valor se toma del campo de registro sin procesar "syslog_severity". |
| syslog_severity_code | read_only_udm.security_result.severity | El valor se toma del campo de registro sin procesar "syslog_severity_code" y se asigna al nivel de gravedad correspondiente: 5, 6, 7 -> INFORMATIONAL; 3, 4 -> MEDIUM; 0, 1, 2 -> HIGH. |
| syslog5424_pri | - | Sin asignar. |
| Vlan-Id | read_only_udm.principal.resource.id | El valor se toma del campo de registro sin procesar "Vlan-Id". |
| - | read_only_udm.metadata.event_type | Lógica: Si están presentes "SIP" o "hostname" y "Proto", se establece en "NETWORK_CONNECTION". De lo contrario, si se incluye "SIP", "hostname" o "syslog_host", se establece en "STATUS_UPDATE". De lo contrario, se establece como "GENERIC_EVENT". |
| - | read_only_udm.metadata.log_type | Lógica: Se establece en "CISCO_ACI". |
| - | read_only_udm.metadata.vendor_name | Lógica: Se establece en "Cisco". |
| - | read_only_udm.metadata.product_name | Lógica: Se establece en "ACI". |
¿Necesitas más ayuda? Obtén respuestas de miembros de la comunidad y profesionales de Google SecOps.