Recoger registros de Cisco Application Centric Infrastructure (ACI)
En este documento se explica cómo ingerir registros de Cisco Application Centric Infrastructure (ACI) en Google Security Operations. El analizador primero intenta procesar los registros de Cisco ACI entrantes como mensajes syslog mediante patrones Grok. Si no se puede analizar el syslog, se da por hecho 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 Syslog a través del agente Bindplane
- Opción 2: formato JSON a través de AWS S3 mediante la API REST de APIC
Cada opción es independiente y se puede implementar por separado en función de los requisitos de tu infraestructura y de tus preferencias de formato de registro.
Opción 1: Syslog a través del agente de Bindplane
Esta opción configura la estructura de Cisco ACI para enviar mensajes syslog a un agente de Bindplane, que los reenvía a Chronicle para analizarlos.
Antes de empezar
Asegúrate de que cumples los siguientes requisitos previos:
- Una instancia de Google SecOps
- Un host Windows 2016 o posterior, o Linux con
systemd - Si se ejecuta a través de un proxy, asegúrese de que los puertos del cortafuegos estén abiertos según los requisitos del agente Bindplane.
- Acceso privilegiado a la consola de Cisco APIC
Obtener el archivo de autenticación de ingestión de Google SecOps
- Inicia sesión en la consola de Google SecOps.
- Ve a Configuración de SIEM > Agentes de recogida.
- Descarga el archivo de autenticación de ingestión. Guarda el archivo de forma segura en el sistema en el que se instalará Bindplane.
Obtener el ID de cliente de Google SecOps
- Inicia sesión en 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.
Instalar el agente de Bindplane
Instala el agente Bindplane en tu sistema operativo Windows o Linux siguiendo las instrucciones que se indican a continuación.
Instalación de ventanas
- Abre la petición de comando o PowerShell como administrador.
Ejecuta el siguiente comando:
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
Instalación de Linux
- Abre un terminal con privilegios de root o sudo.
Ejecuta el siguiente comando:
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 ver otras opciones de instalación, consulta esta guía de instalación.
Configurar el agente de Bindplane para ingerir Syslog y enviarlo a Google SecOps
Accede al archivo de configuración:
- Busca el archivo
config.yaml. Normalmente, 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).
- Busca 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- Sustituye el puerto y la dirección IP según sea necesario en tu infraestructura.
- Sustituye
<customer_id>por el ID de cliente real. - Actualiza
/path/to/ingestion-authentication-file.jsona la ruta donde se guardó el archivo de autenticación en la sección Obtener el archivo de autenticación de ingestión 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 Servicios o introducir el siguiente comando:
net stop BindPlaneAgent && net start BindPlaneAgent
Configurar el reenvío de Syslog en Cisco ACI
Configurar un contrato de gestión fuera de banda
- Inicia sesión en la consola de Cisco APIC.
- Vaya a Inquilinos > gestión > Contratos > Filtros.
- Haz clic en Crear filtro.
- Proporcione los siguientes detalles de configuración:
- Nombre: escribe
syslog-udp-514. - Nombre de la entrada: escribe
syslog. - EtherType: selecciona IP.
- Protocolo IP: selecciona UDP.
- Intervalo de puertos de destino (desde): introduce
514. - Intervalo de puertos de destino hasta: introduce
514.
- Nombre: escribe
- Haz clic en Enviar.
Crear contrato de gestión
- Ve a Tenants > mgmt > Contracts > Standard.
- Haz clic en Crear contrato.
- Proporcione los siguientes detalles de configuración:
- Nombre: escribe
mgmt-syslog-contract. - Ámbito: selecciona Contexto.
- Nombre: escribe
- Haz clic en Enviar.
- Despliega el contrato y haz clic en Temas.
- Haz clic en Crear asunto de contrato.
- Proporcione los siguientes detalles de configuración:
- Nombre: escribe
syslog-subject. - Aplicar en ambas direcciones: marca esta opción.
- Nombre: escribe
- Haz clic en Enviar.
- Despliega el tema y haz clic en Filtros.
- Haga clic en Crear enlace de filtro.
- Selecciona el filtro
syslog-udp-514que has creado antes. - Haz clic en Enviar.
Configurar un grupo de destinos Syslog
- Vaya a Administrar > Recogedores de datos externos > Destinos de monitorización > Syslog.
- Haz clic con el botón derecho en Syslog y selecciona Create Syslog Monitoring Destination Group (Crear grupo de destinos de monitorización de Syslog).
- Proporcione los siguientes detalles de configuración:
- Nombre: escribe
Chronicle-Syslog-Group. - Estado de administrador: selecciona Habilitado.
- Formato: selecciona aci.
- Nombre: escribe
- Haz clic en Siguiente.
- En el cuadro de diálogo Crear destino de monitorización de syslog, haz lo siguiente:
- Nombre: escribe
Chronicle-BindPlane. - Host: introduce la dirección IP de tu servidor del agente de Bindplane.
- Puerto: introduce
514. - Estado de administrador: selecciona Habilitado.
- Gravedad: selecciona Información (para registrar los registros detallados).
- Nombre: escribe
- Haz clic en Enviar.
Configurar políticas de monitorización
Política de monitorización de Fabric
- Ve a Fabric > Políticas de Fabric > Políticas > Monitorización > Política común.
- Expande Callhome/Smart Callhome/SNMP/Syslog/TACACS.
- Haz clic con el botón derecho en Syslog y selecciona Crear fuente Syslog.
- Proporcione los siguientes detalles de configuración:
- Nombre: escribe
Chronicle-Fabric-Syslog. - Registros de auditoría: marca esta opción para incluir eventos de auditoría.
- Eventos: marca esta opción para incluir eventos del sistema.
- Errores: marca esta opción para incluir eventos de error.
- Registros de sesión: marca esta opción para incluir los registros de sesión.
- Grupo de destino: selecciona
Chronicle-Syslog-Group.
- Nombre: escribe
- Haz clic en Enviar.
Política de monitorización de accesos
- Ve a Fabric > Políticas de acceso > Políticas > Monitorización > Política predeterminada.
- Expanda Callhome/Smart Callhome/SNMP/Syslog.
- Haz clic con el botón derecho en Syslog y selecciona Crear fuente Syslog.
- Proporcione los siguientes detalles de configuración:
- Nombre: escribe
Chronicle-Access-Syslog. - Registros de auditoría: marca esta opción para incluir eventos de auditoría.
- Eventos: marca esta opción para incluir eventos del sistema.
- Errores: marca esta opción para incluir eventos de error.
- Registros de sesión: marca esta opción para incluir los registros de sesión.
- Grupo de destino: selecciona
Chronicle-Syslog-Group.
- Nombre: escribe
- Haz clic en Enviar.
Configurar la política de mensajes Syslog del sistema
- Ve a Fabric > Políticas de Fabric > Políticas > Monitorización > Política común.
- Despliegue Políticas de mensajes de Syslog.
- Haz clic en Predeterminado.
- En la sección Facility Filter (Filtro de centro):
- Instalación: selecciona predeterminado.
- Gravedad mínima: cambia a información.
- Haz clic en Enviar.
Opción 2: JSON a través de AWS S3
Esta opción usa la API REST de APIC para recoger eventos, fallos y registros de auditoría con formato JSON de la estructura de Cisco ACI y los almacena en AWS S3 para que SecOps los ingiera.
Antes de empezar
- Instancia de Google SecOps.
- Acceso privilegiado a la consola de Cisco APIC.
- Acceso con privilegios a AWS (S3, IAM, Lambda y EventBridge).
Recopilar los requisitos previos de Cisco ACI APIC (IDs, claves de API, IDs de organización y tokens)
- Inicia sesión en la consola de Cisco APIC mediante HTTPS.
- Ve a Administrar > AAA (en APIC 6.0 o versiones posteriores) o Administrar > Autenticación > AAA (en versiones anteriores).
- Nota: La ruta del menú AAA ha cambiado a partir de APIC 6.0(1).
- Crea o usa un usuario local que ya tengas con los privilegios adecuados.
- Copia y guarda en un lugar seguro los siguientes detalles:
- Nombre de usuario de APIC: usuario local con acceso de lectura a los datos de monitorización.
- Contraseña de la API: contraseña del usuario.
- URL de APIC: la URL HTTPS de tu APIC (por ejemplo,
https://apic.example.com).
Configurar un segmento de AWS S3 y IAM para Google SecOps
- Crea un segmento de Amazon S3 siguiendo esta guía de usuario: Crear un segmento.
- Guarda el nombre y la región del segmento para consultarlos más adelante (por ejemplo,
cisco-aci-logs). - Crea un usuario siguiendo esta guía: Crear un usuario de gestión de identidades y accesos.
- Selecciona el usuario creado.
- Selecciona la pestaña Credenciales de seguridad.
- En la sección Claves de acceso, haz clic en Crear clave de acceso.
- Selecciona Servicio de terceros en Caso práctico.
- Haz clic en Siguiente.
- Opcional: añade 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 futuras consultas.
- Haz clic en Listo.
- Selecciona la pestaña Permisos.
- En la sección Políticas de permisos, haz clic en Añadir permisos.
- Selecciona Añadir permisos.
- Seleccione Adjuntar políticas directamente.
- Busca la política AmazonS3FullAccess.
- Selecciona la política.
- Haz clic en Siguiente.
- Haz clic en Añadir permisos.
Configurar la política y el rol de gestión de identidades y accesos para las subidas de S3
- En la consola de AWS, vaya a IAM > Políticas.
- Haz clic en Crear política > pestaña JSON.
Introduce 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" } ] }- Sustituye
cisco-aci-logssi has introducido otro nombre de segmento.
- Sustituye
Haz clic en Siguiente > Crear política.
Ve a IAM > Roles > Crear rol > Servicio de AWS > Lambda.
Adjunta la política que acabas de crear y la política gestionada AWSLambdaBasicExecutionRole.
Dale el nombre
cisco-aci-lambda-roleal rol y haz clic en Crear rol.
Crear la función Lambda
- En la consola de AWS, ve a Lambda > Funciones > Crear función.
- Haz clic en Crear desde cero.
Proporciona los siguientes detalles de configuración:
- Nombre:
cisco-aci-events-collector - Tiempo de ejecución: Python 3.13
- Arquitectura: x86_64
- Rol de ejecución:
cisco-aci-lambda-role
- Nombre:
Una vez creada la función, abra la pestaña Código, elimine el stub e introduzca 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)}")Vaya a Configuración > Variables de entorno.
Haz clic en Editar > Añadir nueva variable de entorno.
Introduce las siguientes variables de entorno, sustituyendo los valores por los tuyos.
- 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 el número total de páginas obtenidas por ejecución)
- S3_BUCKET:
Una vez creada la función, permanece en su página (o abre Lambda > Funciones > cisco-aci-events-collector).
Seleccione 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.
Crear una programación de EventBridge
- Ve a Amazon EventBridge > Scheduler > Create schedule (Amazon EventBridge > Programador > Crear programación).
- Proporcione los siguientes detalles de configuración:
- Programación periódica: Precio (
15 minutes). - Destino: tu función Lambda
cisco-aci-events-collector. - Nombre:
cisco-aci-events-collector-15m.
- Programación periódica: Precio (
- Haz clic en Crear programación.
Opcional: Crear un usuario y claves de gestión de identidades y accesos de solo lectura para Google SecOps
- Ve a Consola de AWS > IAM > Usuarios > Añadir usuarios.
- Haz clic en Add users (Añadir usuarios).
- Proporcione los siguientes detalles de configuración:
- Usuario: introduce
secops-reader. - Tipo de acceso: selecciona Clave de acceso – Acceso programático.
- Usuario: introduce
- Haz clic en Crear usuario.
- Asigna una política de lectura mínima (personalizada): Usuarios > lector-secops > Permisos > Añadir permisos > Asignar políticas directamente > Crear política.
En el editor de JSON, introduce 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" } ] }Asigna el nombre
secops-reader-policy.Ve a Crear política > busca o selecciona > Siguiente > Añadir permisos.
Ve a Credenciales de seguridad > Claves de acceso > Crear clave de acceso.
Descarga el archivo CSV (estos valores se introducen en el feed).
Configurar un feed en Google SecOps para ingerir registros de Cisco ACI
- Ve a Configuración de SIEM > Feeds.
- Haz clic en + Añadir nuevo feed.
- En el campo Nombre del feed, introduce un nombre para el feed (por ejemplo,
Cisco ACI JSON logs). - Selecciona Amazon S3 V2 como Tipo de fuente.
- Seleccione Cisco Application Centric Infrastructure como Tipo de registro.
- Haz clic en Siguiente.
- Especifique valores para los siguientes parámetros de entrada:
- URI de S3:
s3://cisco-aci-logs/cisco-aci-events/ - Opciones de eliminación de la fuente: selecciona la opción de eliminación que prefieras.
- Antigüedad máxima del archivo: incluye los archivos modificados en los últimos días. El valor predeterminado es de 180 días.
- ID de clave de acceso: clave de acceso de usuario con acceso al bucket de S3.
- Clave de acceso secreta: clave secreta del usuario con acceso al segmento de S3.
- Espacio de nombres de recursos: el espacio de nombres de recursos.
- Etiquetas de ingestión: la etiqueta aplicada a los eventos de este feed.
- URI de S3:
- Haz clic en Siguiente.
- Revise la nueva configuración del feed en la pantalla Finalizar y, a continuación, haga 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. |
| description | 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 ha definido como "Fault Cause". |
| 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 define como "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 define como "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 define como "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 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 (por ejemplo, 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 y 7 -> INFORMATIONAL; 3 y 4 -> MEDIUM; 0, 1 y 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 asigna el valor "NETWORK_CONNECTION". Si está presente "SIP", "hostname" o "syslog_host", se asigna el valor "STATUS_UPDATE". De lo contrario, se asigna el valor "GENERIC_EVENT". |
| - | read_only_udm.metadata.log_type | Logic: se define como "CISCO_ACI". |
| - | read_only_udm.metadata.vendor_name | Lógica: se define como "Cisco". |
| - | read_only_udm.metadata.product_name | Lógica: se define como "ACI". |
¿Necesitas más ayuda? Recibe respuestas de los miembros de la comunidad y de los profesionales de Google SecOps.