ANSIBLE_AWX
Este documento explica como ingerir registos do Ansible AWX no Google Security Operations através do Bindplane. O analisador extrai campos de registos do Ansible AWX formatados em JSON. Usa a análise JSON para extrair campos de registo e, em seguida, mapeia estes valores para o modelo de dados unificado (UDM). Também define valores de metadados predefinidos para a origem e o tipo do evento.
Antes de começar
Certifique-se de que tem os seguintes pré-requisitos:
- Uma instância do Google SecOps.
- Um anfitrião Windows 2016 ou posterior, ou um anfitrião Linux com
systemd
. - Se estiver a ser executado através de um proxy, certifique-se de que as portas da firewall estão abertas de acordo com os requisitos do agente Bindplane.
- Acesso privilegiado à consola de gestão ou ao dispositivo Ansible AWX com autorizações de administrador.
Obtenha o ficheiro de autenticação de carregamento do Google SecOps
- Inicie sessão na consola Google SecOps.
- Aceda a Definições do SIEM > Agentes de recolha.
- Transfira o ficheiro de autenticação de carregamento. Guarde o ficheiro de forma segura no sistema onde o Bindplane vai ser instalado.
Obtenha o ID de cliente do Google SecOps
- Inicie sessão na consola Google SecOps.
- Aceda a Definições do SIEM > Perfil.
- Copie e guarde o ID do cliente da secção Detalhes da organização.
Instale o agente do Bindplane
Instale o agente do Bindplane no seu sistema operativo Windows ou Linux de acordo com as seguintes instruções.
Instalação do Windows
- Abra a Linha de comandos ou o PowerShell como administrador.
Execute o seguinte 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 raiz ou sudo.
Execute o seguinte comando:
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
Recursos de instalação adicionais
Para ver opções de instalação adicionais, consulte o guia de instalação.
Configure o agente Bindplane para carregar o Syslog e enviá-lo para o Google SecOps
- Aceda ao ficheiro de configuração:
- Localize o ficheiro
config.yaml
. Normalmente, encontra-se no diretório/opt/observiq-otel-collector/
no Linux ou no diretórioC:Program FilesobservIQ OpenTelemetry Collector
no Windows. - Abra o ficheiro com um editor de texto (por exemplo,
nano
,vi
ou Bloco de notas).
- Localize o ficheiro
Edite o ficheiro
config.yaml
da seguinte forma:receivers: udplog: # Using high port to avoid requiring root privileges listen_address: "0.0.0.0:514" exporters: chronicle/awx: endpoint: malachiteingestion-pa.googleapis.com creds_file_path: '/path/to/ingestion-authentication-file.json' customer_id: YOUR_CUSTOMER_ID log_type: 'ANSIBLE_AWX' raw_log_field: body service: pipelines: logs/awx: receivers: - udplog exporters: - chronicle/awx
- Substitua a porta e o endereço IP conforme necessário na sua infraestrutura.
- Substitua
YOUR_CUSTOMER_ID
pelo ID de cliente real. - Atualize
/path/to/ingestion-authentication-file.json
para o caminho onde o ficheiro de autenticação foi guardado no passo 1.
Reinicie o agente do Bindplane para aplicar as alterações
Para reiniciar o agente BindPlane no Linux, execute o seguinte comando:
sudo systemctl restart observiq-otel-collector
Para reiniciar o agente Bindplane no Windows, pode usar a consola Serviços ou introduzir o seguinte comando:
sc stop observiq-otel-collector && sc start observiq-otel-collector
Configure o registo externo no Ansible AWX
- Inicie sessão na consola de gestão do Ansible AWX.
- Aceda a Definições na barra de navegação.
- Selecione Definições de registo nas opções de Sistema.
- Indique os seguintes detalhes de configuração:
- Agregador de registos: introduza o endereço IP do agente do Bindplane.
- Porta do agregador de registos: introduza o número da porta do agente do Bindplane (por exemplo,
514
). - Tipo de agregador de registos: selecione Outro na lista.
- Nome de utilizador do agregador de registos: deixe em branco (não é necessário para o syslog).
- Palavra-passe/token do agregador de registos: deixe em branco (não é necessário para o syslog).
- Protocolo de agregação de registos: selecione UDP (recomendado para syslog).
- Limite do nível do agregador de registos: selecione Informações ou o seu nível de registo preferido.
- Ativar registo externo: clique no botão para ativar .
- Registadores para enviar dados para o agregador de registos: selecione os tipos de registos relevantes:
awx
: registos genéricos do servidoractivity_stream
: registo de alterações a objetos do AWXjob_events
: dados do módulo de callback do Ansiblesystem_tracking
: factos do sistema e dados de configuração
- Registar factos de monitorização do sistema individualmente: desative a opção (predefinição).
- Clique em Guardar para aplicar as definições.
- Opcional: clique em Testar para validar a ligação ao agente Bindplane.
Tabela de mapeamento do UDM
Campo de registo | Mapeamento do UDM | Lógica |
---|---|---|
agent.ephemeral_id |
observer.labels.value |
O valor de agent.ephemeral_id do registo não processado. |
agent.hostname |
observer.hostname |
O valor de agent.hostname do registo não processado. |
agent.id |
observer.asset_id |
Concatenação de "filebeat:" e o valor de agent.id do registo não processado. |
agent.name |
observer.user.userid |
O valor de agent.name do registo não processado. |
agent.type |
observer.application |
O valor de agent.type do registo não processado. |
agent.version |
observer.platform_version |
O valor de agent.version do registo não processado. |
cloud.availability_zone |
principal.resource.attribute.labels.value |
O valor de cloud.availability_zone do registo não processado. |
cloud.instance.id |
principal.resource.product_object_id |
O valor de cloud.instance.id do registo não processado. |
cloud.instance.name |
principal.resource.name |
O valor de cloud.instance.name do registo não processado. |
cloud.machine.type |
principal.resource.attribute.labels.value |
O valor de cloud.machine.type do registo não processado. |
cloud.provider |
principal.resource.attribute.labels.value |
O valor de cloud.provider do registo não processado. |
event1 |
metadata.description |
O valor de event1 do registo não processado. Se event1 não estiver presente, é usado o valor de message . |
event1_data.host |
principal.hostname |
O valor de event1_data.host do registo não processado. |
event1_data.remote_addr |
principal.ip |
O endereço IP extraído de event1_data.remote_addr através de um padrão grok. |
event1_data.task |
security_result.detection_fields.value |
O valor de event1_data.task do registo não processado. |
event1_data.task_path |
principal.process.file.full_path |
O valor de event1_data.task_path do registo não processado. |
event1_data.task_uuid |
security_result.detection_fields.value |
O valor de event1_data.task_uuid do registo não processado. |
event1_data.uuid |
metadata.product_log_id |
O valor de event1_data.uuid do registo não processado. |
event1_display |
security_result.description |
O valor de event1_display do registo não processado. |
host |
principal.hostname |
O valor de host do registo não processado, usado se event1_data.host e host_name não estiverem presentes. |
host.architecture |
target.asset.hardware.cpu_platform |
O valor de host.architecture do registo não processado. |
host.fqdn |
target.administrative_domain |
O valor de host.fqdn do registo não processado. |
host.hostname |
target.hostname |
O valor de host.hostname do registo não processado. |
host.id |
target.asset.asset_id |
Concatenação de "Host Id: " e o valor de host.id do registo não processado. |
host.ip |
target.asset.ip |
Os valores de host.ip do registo não processado. |
host.mac |
target.mac |
Os valores de host.mac do registo não processado. |
host.os.codename |
target.asset.attribute.labels.value |
O valor de host.os.codename do registo não processado. |
host.os.kernel |
target.platform_patch_level |
O valor de host.os.kernel do registo não processado. |
host.os.name |
target.asset.attribute.labels.value |
O valor de host.os.name do registo não processado. |
host.os.platform |
target.platform |
Definido como "LINUX" se host.os.platform for "debian". |
host.os.version |
target.platform_version |
O valor de host.os.version do registo não processado. |
host_name |
principal.hostname |
O valor de host_name do registo não processado, usado se event1_data.host não estiver presente. |
input.type |
network.ip_protocol |
Definido como "TCP" se input.type for "tcp". |
level |
security_result.severity |
Mapeado com base no valor de level : "DEBUG", "INFO", "AUDIT" mapeiam para "INFORMATIONAL"; "ERROR" mapeia para "ERROR"; "WARNING" mapeia para "MEDIUM". |
level |
security_result.severity_details |
O valor de level do registo não processado. |
log.source.address |
principal.ip |
O endereço IP extraído de log.source.address através de um padrão grok. |
log.source.address |
principal.port |
A porta extraída de log.source.address através de um padrão grok. |
logger_name |
intermediary.application |
O valor de logger_name do registo não processado. |
message |
metadata.description |
O valor de message do registo não processado, usado como alternativa se event1 não estiver presente. |
parent_uuid |
security_result.detection_fields.value |
O valor de parent_uuid do registo não processado. |
timestamp |
metadata.event_timestamp |
O valor de timestamp do registo não processado, analisado através do filtro de data. Determinado pela lógica: "NETWORK_CONNECTION" se log.source.address existir e host.ip existir no JSON; "STATUS_UPDATE" se principal_hostname ou event1_data.remote_addr existir; "GENERIC_EVENT" caso contrário. Codificado de forma rígida como "ANSIBLE_AWX". Codificado de forma rígida como "ANSIBLE_AWX". Codificado de forma rígida como "ANSIBLE_AWX". Codificado de forma rígida para "ephemeral_id". Codificado de forma rígida para "machine_type", "provider" ou "availability_zone", consoante o campo que está a ser mapeado. Codificado de forma rígida para "VIRTUAL_MACHINE". Codificado de forma rígida para "parent_uuid", "task" ou "task_uuid", consoante o campo que está a ser mapeado. Codificado de forma rígida como "codename" ou "os_name", consoante o campo que está a ser mapeado. |
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais da Google SecOps.