Coletar registros do Cisco Application Centric Infrastructure (ACI)
Este documento explica como ingerir registros da Cisco Application Centric Infrastructure (ACI) no Google Security Operations. Primeiro, o analisador tenta processar os registros do Cisco ACI como mensagens syslog usando padrões Grok. Se a análise do syslog falhar, a mensagem será considerada no formato JSON e analisada de acordo. Por fim, ele mapeia os campos extraídos para o modelo de dados unificado (UDM).
Essa integração é compatível com dois métodos:
- Opção 1: formato Syslog usando o agente Bindplane
- Opção 2: formato JSON via AWS S3 usando a API REST do APIC
Cada opção é independente e pode ser implementada separadamente com base nos requisitos de infraestrutura e nas preferências de formato de registro.
Opção 1: Syslog via agente do Bindplane
Essa opção configura a estrutura do Cisco ACI para enviar mensagens syslog a um agente do Bindplane, que as encaminha para o Chronicle para análise.
Antes de começar
Verifique se você tem os pré-requisitos a seguir:
- Uma instância do Google SecOps
- Um host Windows 2016 ou mais recente ou Linux com
systemd - Se você estiver executando por trás de um proxy, verifique se as portas do firewall estão abertas de acordo com os requisitos do agente Bindplane.
- Acesso privilegiado ao console do Cisco APIC
Receber o arquivo de autenticação de ingestão do Google SecOps
- Faça login no console do Google SecOps.
- Acesse Configurações do SIEM > Agentes de coleta.
- Baixe o arquivo de autenticação de ingestão. Salve o arquivo de forma segura no sistema em que o Bindplane será instalado.
Receber o ID de cliente do Google SecOps
- Faça login no console do Google SecOps.
- Acesse Configurações do SIEM > Perfil.
- Copie e salve o ID do cliente na seção Detalhes da organização.
Instalar o agente do Bindplane
Instale o agente do Bindplane no seu sistema operacional Windows ou Linux de acordo com as instruções a seguir.
Instalação do Windows
- Abra o Prompt de Comando ou o PowerShell como administrador.
Execute este comando:
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
Instalação do Linux
- Abra um terminal com privilégios de root ou sudo.
Execute este comando:
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
Outros recursos de instalação
- Para mais opções de instalação, consulte este guia de instalação.
Configurar o agente do Bindplane para ingerir o Syslog e enviar ao Google SecOps
Acesse o arquivo de configuração:
- Localize o arquivo
config.yaml. Normalmente, ele fica no diretório/etc/bindplane-agent/no Linux ou no diretório de instalação no Windows. - Abra o arquivo usando um editor de texto (por exemplo,
nano,viou Bloco de Notas).
- Localize o arquivo
Edite o arquivo
config.yamlda seguinte forma: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- Substitua a porta e o endereço IP conforme necessário na sua infraestrutura.
- Substitua
<customer_id>pelo ID do cliente real. - Atualize
/path/to/ingestion-authentication-file.jsonpara o caminho em que o arquivo de autenticação foi salvo na seção Receber arquivo de autenticação de ingestão do Google SecOps.
Reinicie o agente do Bindplane para aplicar as mudanças
Para reiniciar o agente do Bindplane no Linux, execute o seguinte comando:
sudo systemctl restart bindplane-agentPara reiniciar o agente do Bindplane no Windows, use o console Serviços ou insira o seguinte comando:
net stop BindPlaneAgent && net start BindPlaneAgent
Configurar o encaminhamento de syslog no Cisco ACI
Configurar o contrato de gerenciamento fora da banda
- Faça login no console do Cisco APIC.
- Acesse Locatários > gerenciamento > Contratos > Filtros.
- Clique em Criar filtro.
- Informe os seguintes detalhes de configuração:
- Nome: insira
syslog-udp-514. - Nome da entrada: insira
syslog. - EtherType: selecione IP.
- Protocolo IP: selecione UDP.
- Intervalo de porta de destino de: insira
514. - Intervalo de porta de destino até: insira
514.
- Nome: insira
- Clique em Enviar.
Criar contrato de gerenciamento
- Acesse Locatários > gerenciamento > Contratos > Padrão.
- Clique em Criar contrato.
- Informe os seguintes detalhes de configuração:
- Nome: insira
mgmt-syslog-contract. - Escopo: selecione Contexto.
- Nome: insira
- Clique em Enviar.
- Abra o contrato e clique em Assuntos.
- Clique em Criar assunto do contrato.
- Informe os seguintes detalhes de configuração:
- Nome: insira
syslog-subject. - Aplicar ambas as direções: marque essa opção.
- Nome: insira
- Clique em Enviar.
- Expanda o assunto e clique em Filtros.
- Clique em Criar vinculação de filtro.
- Selecione o filtro
syslog-udp-514criado anteriormente. - Clique em Enviar.
Configurar grupo de destino do Syslog
- Acesse Administrador > Coletores de dados externos > Destinos de monitoramento > Syslog.
- Clique com o botão direito do mouse em Syslog e selecione Criar grupo de destino de monitoramento do Syslog.
- Informe os seguintes detalhes de configuração:
- Nome: insira
Chronicle-Syslog-Group. - Estado do administrador: selecione Ativado.
- Formato: selecione aci.
- Nome: insira
- Clique em Próxima.
- Na caixa de diálogo Criar destino de monitoramento do Syslog:
- Nome: insira
Chronicle-BindPlane. - Host: insira o endereço IP do servidor do agente do Bindplane.
- Porta: insira
514. - Estado do administrador: selecione Ativado.
- Gravidade: selecione Informações para capturar registros detalhados.
- Nome: insira
- Clique em Enviar.
Configurar políticas de monitoramento
Política de monitoramento do Fabric
- Acesse Fábrica > Políticas da fábrica > Políticas > Monitoramento > Política comum.
- Expanda Callhome/Smart Callhome/SNMP/Syslog/TACACS.
- Clique com o botão direito do mouse em Syslog e selecione Criar fonte Syslog.
- Informe os seguintes detalhes de configuração:
- Nome: insira
Chronicle-Fabric-Syslog. - Registros de auditoria: marque para incluir eventos de auditoria.
- Eventos: marque para incluir eventos do sistema.
- Falhas: marque para incluir eventos de falha.
- Registros de sessão: marque para incluir registros de sessão.
- Grupo de destino: selecione
Chronicle-Syslog-Group.
- Nome: insira
- Clique em Enviar.
Política de monitoramento de acesso
- Acesse Fabric > Políticas de acesso > Políticas > Monitoramento > Política padrão.
- Expanda Callhome/Smart Callhome/SNMP/Syslog.
- Clique com o botão direito do mouse em Syslog e selecione Criar fonte Syslog.
- Informe os seguintes detalhes de configuração:
- Nome: insira
Chronicle-Access-Syslog. - Registros de auditoria: marque para incluir eventos de auditoria.
- Eventos: marque para incluir eventos do sistema.
- Falhas: marque para incluir eventos de falha.
- Registros de sessão: marque para incluir registros de sessão.
- Grupo de destino: selecione
Chronicle-Syslog-Group.
- Nome: insira
- Clique em Enviar.
Configurar a política de mensagens do Syslog do sistema
- Acesse Fábrica > Políticas da fábrica > Políticas > Monitoramento > Política comum.
- Expanda Políticas de mensagens Syslog.
- Selecione padrão.
- Na seção Filtro de unidade:
- Unidade: selecione padrão.
- Gravidade mínima: mude para informações.
- Clique em Enviar.
Opção 2: JSON via AWS S3
Essa opção usa a API REST do APIC para coletar eventos, falhas e registros de auditoria formatados em JSON da estrutura do Cisco ACI e os armazena no AWS S3 para ingestão do SecOps.
Antes de começar
- Instância do Google SecOps.
- Acesso privilegiado ao console do Cisco APIC.
- Acesso privilegiado à AWS (S3, IAM, Lambda, EventBridge).
Coletar pré-requisitos do Cisco ACI APIC (IDs, chaves de API, IDs de organização, tokens)
- Faça login no console do Cisco APIC usando HTTPS.
- Acesse Admin > AAA (no APIC 6.0 ou mais recente) ou Admin > Authentication > AAA (em versões mais antigas).
- Observação: o caminho do menu AAA mudou a partir do APIC 6.0(1).
- Crie ou use um usuário local com os privilégios adequados.
- Copie e salve em um local seguro os seguintes detalhes:
- Nome de usuário do APIC: usuário local com acesso de leitura aos dados de monitoramento
- Senha da APIC: senha do usuário
- URL do APIC: o URL HTTPS do APIC (por exemplo,
https://apic.example.com)
Configurar o bucket do AWS S3 e o IAM para o Google SecOps
- Crie um bucket do Amazon S3 seguindo este guia do usuário: Como criar um bucket.
- Salve o Nome e a Região do bucket para referência futura (por exemplo,
cisco-aci-logs). - Crie um usuário seguindo este guia: Como criar um usuário do IAM.
- Selecione o usuário criado.
- Selecione a guia Credenciais de segurança.
- Clique em Criar chave de acesso na seção Chaves de acesso.
- Selecione Serviço de terceiros como Caso de uso.
- Clique em Próxima.
- Opcional: adicione uma tag de descrição.
- Clique em Criar chave de acesso.
- Clique em Fazer o download do arquivo CSV para salvar a chave de acesso e a chave de acesso secreta para referência futura.
- Clique em Concluído.
- Selecione a guia Permissões.
- Clique em Adicionar permissões na seção Políticas de permissões.
- Selecione Adicionar permissões.
- Selecione Anexar políticas diretamente.
- Pesquise a política AmazonS3FullAccess.
- Selecione a política.
- Clique em Próxima.
- Clique em Adicionar permissões
Configurar a política e o papel do IAM para uploads do S3
- No console da AWS, acesse IAM > Políticas.
- Clique em Criar política > guia JSON.
Insira a seguinte 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" } ] }- Substitua
cisco-aci-logsse você tiver inserido um nome de bucket diferente.
- Substitua
Clique em Próxima > Criar política.
Acesse IAM > Funções > Criar função > Serviço da AWS > Lambda.
Anexe a política recém-criada e a política gerenciada AWSLambdaBasicExecutionRole.
Nomeie a função como
cisco-aci-lambda-rolee clique em Criar função.
Criar a função Lambda
- No console da AWS, acesse Lambda > Functions > Create function.
- Clique em Criar do zero.
Informe os seguintes detalhes de configuração:
- Nome:
cisco-aci-events-collector - Tempo de execução: Python 3.13
- Arquitetura: x86_64
- Função de execução:
cisco-aci-lambda-role
- Nome:
Depois que a função for criada, abra a guia Código, exclua o stub e insira o seguinte 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)}")Acesse Configuração > Variáveis de ambiente.
Clique em Editar > Adicionar nova variável de ambiente.
Insira as variáveis de ambiente a seguir, substituindo pelos seus 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 o tamanho da paginação) - MAX_PAGES:
10(opcional, limita o total de páginas buscadas por execução)
- S3_BUCKET:
Depois que a função for criada, permaneça na página dela ou abra Lambda > Functions > cisco-aci-events-collector.
Selecione a guia Configuração.
No painel Configuração geral, clique em Editar.
Mude Tempo limite para 5 minutos (300 segundos) e clique em Salvar.
Criar uma programação do EventBridge
- Acesse Amazon EventBridge > Scheduler > Criar programação.
- Informe os seguintes detalhes de configuração:
- Programação recorrente: Taxa (
15 minutes). - Destino: sua função Lambda
cisco-aci-events-collector. - Nome:
cisco-aci-events-collector-15m.
- Programação recorrente: Taxa (
- Clique em Criar programação.
Opcional: criar um usuário e chaves do IAM somente leitura para o Google SecOps
- Acesse Console da AWS > IAM > Usuários > Adicionar usuários.
- Clique em Add users.
- Informe os seguintes detalhes de configuração:
- Usuário: insira
secops-reader. - Tipo de acesso: selecione Chave de acesso – Acesso programático.
- Usuário: insira
- Clique em Criar usuário.
- Anexe a política de leitura mínima (personalizada): Usuários > secops-reader > Permissões > Adicionar permissões > Anexar políticas diretamente > Criar política.
No editor JSON, insira a seguinte 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" } ] }Defina o nome como
secops-reader-policy.Acesse Criar política > pesquise/selecione > Próxima > Adicionar permissões.
Acesse Credenciais de segurança > Chaves de acesso > Criar chave de acesso.
Faça o download do CSV (esses valores são inseridos no feed).
Configurar um feed no Google SecOps para ingerir registros do Cisco ACI
- Acesse Configurações do SIEM > Feeds.
- Clique em + Adicionar novo feed.
- No campo Nome do feed, insira um nome para o feed (por exemplo,
Cisco ACI JSON logs). - Selecione Amazon S3 V2 como o Tipo de origem.
- Selecione Infraestrutura centrada em aplicativos da Cisco como o Tipo de registro.
- Clique em Próxima.
- Especifique valores para os seguintes parâmetros de entrada:
- URI do S3:
s3://cisco-aci-logs/cisco-aci-events/ - Opções de exclusão da fonte: selecione a opção de exclusão de acordo com sua preferência.
- Idade máxima do arquivo: inclui arquivos modificados no último número de dias. O padrão é de 180 dias.
- ID da chave de acesso: chave de acesso do usuário com acesso ao bucket do S3.
- Chave de acesso secreta: chave secreta do usuário com acesso ao bucket do S3.
- Namespace do recurso: o namespace do recurso.
- Rótulos de ingestão: o rótulo aplicado aos eventos deste feed.
- URI do S3:
- Clique em Próxima.
- Revise a nova configuração do feed na tela Finalizar e clique em Enviar.
Tabela de mapeamento do UDM
| Campo de registro | Mapeamento do UDM | Lógica |
|---|---|---|
| @timestamp | read_only_udm.metadata.event_timestamp | O valor é extraído do campo de registro bruto "@timestamp" e analisado como um carimbo de data/hora. |
| aci_tag | read_only_udm.metadata.product_log_id | O valor é extraído do campo de registro bruto "aci_tag". |
| cisco_timestamp | - | Não mapeado. |
| DIP | read_only_udm.target.ip | O valor é extraído do campo de registro bruto "DIP". |
| DPort | read_only_udm.target.port | O valor é extraído do campo de registro bruto "DPort" e convertido em número inteiro. |
| descrição | read_only_udm.security_result.description | O valor é extraído do campo de registro bruto "description". |
| fault_cause | read_only_udm.additional.fields.value.string_value | O valor é extraído do campo de registro bruto "fault_cause". A chave é definida como "Causa da falha". |
| nome do host | read_only_udm.principal.hostname | O valor é extraído do campo de registro bruto "hostname". |
| lifecycle_state | read_only_udm.metadata.product_event_type | O valor é extraído do campo de registro bruto "lifecycle_state". |
| log.source.address | - | Não mapeado. |
| logstash.collect.host | - | Não mapeado. |
| logstash.collect.timestamp | read_only_udm.metadata.collected_timestamp | O valor é extraído do campo de registro bruto "logstash.collect.timestamp" e analisado como um carimbo de data/hora. |
| logstash.ingest.host | read_only_udm.intermediary.hostname | O valor é extraído do campo de registro bruto "logstash.ingest.host". |
| logstash.irm_environment | read_only_udm.additional.fields.value.string_value | O valor é extraído do campo de registro bruto "logstash.irm_environment". A chave é definida como "IRM_Environment". |
| logstash.irm_region | read_only_udm.additional.fields.value.string_value | O valor é extraído do campo de registro bruto "logstash.irm_region". A chave é definida como "IRM_Region". |
| logstash.irm_site | read_only_udm.additional.fields.value.string_value | O valor é extraído do campo de registro bruto "logstash.irm_site". A chave é definida como "IRM_Site". |
| logstash.process.host | read_only_udm.intermediary.hostname | O valor é extraído do campo de registro bruto "logstash.process.host". |
| mensagem | - | Não mapeado. |
| message_class | - | Não mapeado. |
| message_code | - | Não mapeado. |
| message_content | - | Não mapeado. |
| message_dn | - | Não mapeado. |
| message_type | read_only_udm.metadata.product_event_type | O valor é extraído do campo de registro bruto "message_type" após a remoção dos colchetes. |
| node_link | read_only_udm.principal.process.file.full_path | O valor é extraído do campo de registro bruto "node_link". |
| PktLen | read_only_udm.network.received_bytes | O valor é extraído do campo de registro bruto "PktLen" e convertido em um número inteiro sem sinal. |
| programa | - | Não mapeado. |
| Proto | read_only_udm.network.ip_protocol | O valor é extraído do campo de registro bruto "Proto", convertido em número inteiro e mapeado para o nome do protocolo IP correspondente (por exemplo, 6 -> TCP). |
| SIP | read_only_udm.principal.ip | O valor é extraído do campo de registro bruto "SIP". |
| SPort | read_only_udm.principal.port | O valor é extraído do campo de registro bruto "SPort" e convertido em número inteiro. |
| syslog_facility | - | Não mapeado. |
| syslog_facility_code | - | Não mapeado. |
| syslog_host | read_only_udm.principal.ip, read_only_udm.observer.ip | O valor é extraído do campo de registro bruto "syslog_host". |
| syslog_prog | - | Não mapeado. |
| syslog_severity | read_only_udm.security_result.severity_details | O valor é extraído do campo de registro bruto "syslog_severity". |
| syslog_severity_code | read_only_udm.security_result.severity | O valor é extraído do campo de registro bruto "syslog_severity_code" e mapeado para o nível de gravidade correspondente: 5, 6, 7 -> INFORMATIONAL; 3, 4 -> MEDIUM; 0, 1, 2 -> HIGH. |
| syslog5424_pri | - | Não mapeado. |
| Vlan-Id | read_only_udm.principal.resource.id | O valor é extraído do campo de registro bruto "Vlan-Id". |
| - | read_only_udm.metadata.event_type | Lógica: se "SIP" ou "hostname" estiver presente e "Proto" estiver presente, defina como "NETWORK_CONNECTION". Caso contrário, se "SIP", "hostname" ou "syslog_host" estiverem presentes, defina como "STATUS_UPDATE". Caso contrário, defina como "GENERIC_EVENT". |
| - | read_only_udm.metadata.log_type | Lógica: definido como "CISCO_ACI". |
| - | read_only_udm.metadata.vendor_name | Lógica: definido como "Cisco". |
| - | read_only_udm.metadata.product_name | Lógica: definida como "ACI". |
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais do Google SecOps.