Coletar registros do Ansible AWX
Visão geral
Esse analisador extrai dados de registro formatados em JSON do Ansible AWX, convertendo-os no modelo de dados unificado (UDM). Ele processa vários formatos de registro, extrai campos relevantes, como carimbos de data/hora, endereços IP, informações de host e detalhes de eventos, e os mapeia para os campos correspondentes da UDM. Além disso, ele processa casos extremos específicos e enriquece os dados com rótulos e metadados.
Antes de começar
Verifique se você atende aos seguintes pré-requisitos:
- Instância do Google SecOps.
- Acesso privilegiado ao Ansible AWX.
Configurar feeds
Há dois pontos de entrada diferentes para configurar feeds na plataforma do Google SecOps:
- Configurações do SIEM > Feeds
- Central de conteúdo > Pacotes de conteúdo
Configure feeds em "Configurações do SIEM" > "Feeds".
Para configurar um feed, siga estas etapas:
- Acesse Configurações do SIEM > Feeds.
- Clique em Adicionar novo feed.
- Na próxima página, clique em Configurar um único feed.
- No campo Nome do feed, insira um nome para o feed (por exemplo, Registros do Ansible AWX).
- Selecione Webhook como o Tipo de origem.
- Selecione Ansible AWX como o Tipo de registro.
- Clique em Próxima.
- Opcional: especifique valores para os seguintes parâmetros de entrada:
- Delimitador de divisão: o delimitador usado para separar linhas de registro, como
\n
.
- Delimitador de divisão: o delimitador usado para separar linhas de registro, como
- Clique em Próxima.
- Revise a configuração do feed na tela Finalizar e clique em Enviar.
- Clique em Gerar chave secreta para autenticar o feed.
- Copie e armazene a chave secreta. Não é possível ver essa chave secreta novamente. Se necessário, você pode gerar uma nova chave secreta, mas isso torna a anterior obsoleta.
- Na guia Detalhes, copie o URL do endpoint do feed no campo Informações do endpoint. É necessário especificar esse URL de endpoint no aplicativo cliente.
- Clique em Concluído.
Configurar feeds na Central de conteúdo
Especifique valores para os seguintes campos:
- Delimitador de divisão: o delimitador usado para separar linhas de registro, como
\n
.
Opções avançadas
- Nome do feed: um valor pré-preenchido que identifica o feed.
- Tipo de origem: método usado para coletar registros no Google SecOps.
- Namespace do recurso: namespace associado ao feed.
Rótulos de ingestão: rótulos aplicados a todos os eventos deste feed.
Clique em Gerar chave secreta para autenticar o feed.
Copie e armazene a chave secreta. Não é possível ver essa chave secreta novamente. Se necessário, você pode gerar uma nova chave secreta, mas isso torna a anterior obsoleta.
Na guia Detalhes, copie o URL do endpoint do feed no campo Informações do endpoint. É necessário especificar esse URL de endpoint no aplicativo cliente.
Criar uma chave de API para o feed de webhook
Acesse o console doGoogle Cloud > Credenciais.
Clique em Criar credenciais e, em seguida, selecione Chave de API.
Restrinja o acesso da chave de API à API Google Security Operations.
Especifique o URL do endpoint
- No aplicativo cliente, especifique o URL do endpoint HTTPS fornecido no feed do webhook.
Ative a autenticação especificando a chave de API e a chave secreta como parte do cabeçalho personalizado no seguinte formato:
X-goog-api-key = API_KEY X-Webhook-Access-Key = SECRET
Recomendação: especifique a chave de API como um cabeçalho em vez de no URL. Se o cliente de webhook não aceitar cabeçalhos personalizados, especifique a chave de API e a chave secreta usando parâmetros de consulta no seguinte formato:
ENDPOINT_URL?key=API_KEY&secret=SECRET
Substitua:
ENDPOINT_URL
: o URL do endpoint do feed.API_KEY
: a chave de API para autenticar no Google Security Operations.SECRET
: a chave secreta gerada para autenticar o feed.
Configurar o webhook no Ansible AWX
- Faça login na sua instância do AWX.
- Acesse a seção Notificações, em Administração.
- Clique em Adicionar.
Configure as configurações do webhook:
- Nome: forneça um nome descritivo para o webhook (por exemplo, Webhook do Google SecOps).
- Tipo: selecione Webhook na lista.
- URL de destino: insira o URL do endpoint de API Google SecOps.
- Método HTTP: selecione POST.
Opcional: cabeçalhos HTTP: adicione os cabeçalhos necessários para autenticação ou tipo de conteúdo. Por exemplo, talvez seja necessário incluir um cabeçalho
Authorization
com um token de portador. Consulte a documentação do Google SecOps para ver os requisitos específicos do cabeçalho.Clique em Salvar para criar o webhook.
Acesse Projetos, em Recursos.
Selecione os projetos que você quer associar ao webhook.
No projeto selecionado, acesse a guia Notificações.
Selecione quais gatilhos ativar para a notificação de webhook criada anteriormente Início | Sucesso | Falha.
As notificações agora serão aplicadas a todos os modelos associados ao projeto. Para desativar manualmente, acesse o campo Notificações em cada modelo.
Tabela de mapeamento do UDM
Campo de registro | Mapeamento do UDM | Lógica |
---|---|---|
agent.ephemeral_id |
observer.labels.value |
O valor de agent.ephemeral_id do registro bruto. |
agent.hostname |
observer.hostname |
O valor de agent.hostname do registro bruto. |
agent.id |
observer.asset_id |
Concatenação de "filebeat:" e o valor de agent.id do registro bruto. |
agent.name |
observer.user.userid |
O valor de agent.name do registro bruto. |
agent.type |
observer.application |
O valor de agent.type do registro bruto. |
agent.version |
observer.platform_version |
O valor de agent.version do registro bruto. |
cloud.availability_zone |
principal.resource.attribute.labels.value |
O valor de cloud.availability_zone do registro bruto. |
cloud.instance.id |
principal.resource.product_object_id |
O valor de cloud.instance.id do registro bruto. |
cloud.instance.name |
principal.resource.name |
O valor de cloud.instance.name do registro bruto. |
cloud.machine.type |
principal.resource.attribute.labels.value |
O valor de cloud.machine.type do registro bruto. |
cloud.provider |
principal.resource.attribute.labels.value |
O valor de cloud.provider do registro bruto. |
event1 |
metadata.description |
O valor de event1 do registro bruto. Se event1 não estiver presente, o valor de message será usado. |
event1_data.host |
principal.hostname |
O valor de event1_data.host do registro bruto. Usado como substituto se host_name e host não estiverem presentes. |
event1_data.remote_addr |
principal.ip |
O endereço IP extraído de event1_data.remote_addr usando um padrão grok. |
event1_data.task |
security_result.detection_fields.value |
O valor de event1_data.task do registro bruto. |
event1_data.task_path |
principal.process.file.full_path |
O valor de event1_data.task_path do registro bruto. |
event1_data.task_uuid |
security_result.detection_fields.value |
O valor de event1_data.task_uuid do registro bruto. |
event1_data.uuid |
metadata.product_log_id |
O valor de event1_data.uuid do registro bruto. |
event1_display |
security_result.description |
O valor de event1_display do registro bruto. |
host |
principal.hostname |
O valor de host do registro bruto. Usado como substituto se host_name não estiver presente. Se for um número, ele será convertido em uma string. |
host.architecture |
target.asset.hardware.cpu_platform |
O valor de host.architecture do registro bruto. |
host.fqdn |
target.administrative_domain |
O valor de host.fqdn do registro bruto. |
host.hostname |
target.hostname |
O valor de host.hostname do registro bruto. |
host.id |
target.asset.asset_id |
"Host Id: " concatenado com o valor de host.id do registro bruto. |
host.ip |
target.asset.ip |
Os valores da matriz host.ip do registro bruto. |
host.mac |
target.mac |
Os valores da matriz host.mac do registro bruto. |
host.os.codename |
target.asset.attribute.labels.value |
O valor de host.os.codename do registro bruto. |
host.os.kernel |
target.platform_patch_level |
O valor de host.os.kernel do registro bruto. |
host.os.name |
target.asset.attribute.labels.value |
O valor de host.os.name do registro bruto. |
host.os.platform |
target.platform |
Se o valor de host.os.platform for "debian", o campo UDM será definido como "LINUX". |
host.os.version |
target.platform_version |
O valor de host.os.version do registro bruto. |
host_name |
principal.hostname |
O valor de host_name do registro bruto. |
input.type |
network.ip_protocol |
Se o valor de input.type for "tcp", o campo UDM será definido como "TCP". |
level |
security_result.severity |
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 registro bruto. |
log.source.address |
principal.ip |
O endereço IP extraído de log.source.address usando um padrão grok. |
log.source.address |
principal.port |
A porta extraída de log.source.address usando um padrão grok. |
logger_name |
intermediary.application |
O valor de logger_name do registro bruto. |
message |
metadata.description |
O valor de message do registro bruto. Usado como substituto se event1 não estiver presente. |
metadata.event_type |
metadata.event_type |
Determinado pela lógica do analisador com base na presença de determinados campos. "NETWORK_CONNECTION" se log.source.address e host.ip estiverem presentes. "STATUS_UPDATE" se principal_hostname ou event1_data.remote_addr estiverem presentes. "GENERIC_EVENT" caso contrário. |
metadata.log_type |
metadata.log_type |
Codificado como "ANSIBLE_AWX". |
metadata.product_name |
metadata.product_name |
Codificado como "ANSIBLE_AWX". |
metadata.vendor_name |
metadata.vendor_name |
Codificado como "ANSIBLE_AWX". |
parent_uuid |
security_result.detection_fields.value |
O valor de parent_uuid do registro bruto. |
principal.resource.resource_type |
principal.resource.resource_type |
Codificado como "VIRTUAL_MACHINE" se cloud.instance.name estiver presente. |
observer.labels.key |
observer.labels.key |
Codificado como "ephemeral_id". |
principal.resource.attribute.labels.key |
principal.resource.attribute.labels.key |
Codificado como "machine_type", "provider" ou "availability_zone", dependendo do campo mapeado. |
security_result.detection_fields.key |
security_result.detection_fields.key |
Codificado como "parent_uuid", "task" ou "task_uuid", dependendo do campo que está sendo mapeado. |
target.asset.attribute.labels.key |
target.asset.attribute.labels.key |
Codificado como "codename" ou "os_name", dependendo do campo que está sendo mapeado. |
timestamp |
metadata.event_timestamp |
O valor de timestamp do registro bruto, analisado e convertido em um carimbo de data/hora. |
timestamp |
timestamp |
O valor de timestamp do registro bruto, analisado e convertido em um carimbo de data/hora. |
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais do Google SecOps.