Coletar registros do Ansible AWX

Compatível com:

Visão geral

Esse analisador extrai dados de registro no formato JSON do Ansible AWX e os converte no modelo de dados unificado (UDM, na sigla em inglês). Ele processa vários formatos de registro, extrai campos relevantes, como carimbos de data/hora, endereços IP, informações do host e detalhes do evento, e os mapeia para os campos correspondentes do UDM, além de processar casos extremos específicos e enriquecer os dados com rótulos e metadados.

Antes de começar

  • Verifique se você tem uma instância do Google SecOps.
  • Verifique se você tem acesso privilegiado ao Ansible AWX.

Configurar um feed no Google SecOps para processar registros do Ansible AWX

  1. Acesse Configurações do SIEM > Feeds.
  2. Clique em Adicionar novo.
  3. No campo Nome do feed, insira um nome para o feed (por exemplo, Logs do Ansible AWX).
  4. Selecione Webhook como o Tipo de origem.
  5. Selecione Ansible AWX como o Tipo de registro.
  6. Clique em Próxima.
  7. Opcional: especifique valores para os seguintes parâmetros de entrada:
    • Delimitador de divisão: o delimitador usado para separar linhas de registro, como \n.
    • Namespace de recursos: o namespace de recursos.
    • Rótulos de ingestão: o rótulo aplicado aos eventos desse feed.
  8. Clique em Próxima.
  9. Revise a configuração do feed na tela Finalizar e clique em Enviar.
  10. Clique em Gerar chave secreta para gerar uma chave secreta para autenticar esse feed.
  11. Copie e armazene a chave secreta. Não é possível acessar essa chave secreta novamente. Se necessário, você pode gerar uma nova chave secreta, mas essa ação torna a chave secreta anterior obsoleta.
  12. 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.
  13. Clique em Concluído.

Criar uma chave de API para o feed de webhook

  1. Acesse o console do Google Cloud > Credenciais.

    Ir para Credenciais

  2. Clique em Criar credenciais e, em seguida, selecione Chave de API.

  3. Restrinja o acesso da chave de API à API Google Security Operations.

Especificar o URL do endpoint

  1. No aplicativo cliente, especifique o URL do endpoint HTTPS fornecido no feed de webhook.
  2. 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 especificar no URL. Se o cliente do webhook não tiver suporte a 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 autenticação no Google Security Operations.
  • SECRET: a chave secreta gerada para autenticar o feed.

Configurar o webhook no Ansible AWX

  1. Faça login na sua instância do AWX.
  2. Acesse a seção Notificações, localizada em Administração.
  3. Clique em Adicionar.
  4. Configurar as configurações do webhook:

    • Nome: informe um nome descritivo para o webhook (por exemplo, Google SecOps Webhook).
    • 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 conferir os requisitos específicos de cabeçalho.

  5. Clique em Salvar para criar o webhook.

  6. Acesse Projects, localizado em Resources.

  7. Selecione os projetos que você quer associar ao webhook.

  8. No projeto selecionado, acesse a guia Notificações.

  9. Selecione os acionadores que você quer ativar para a notificação de webhook criada anteriormente Início | Sucesso | Falha.

Agora, as notificações vão ser aplicadas a todos os modelos associados ao projeto. Você pode desativar manualmente acessando 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 "ID do host: " 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" são mapeados para "INFORMATIONAL"; "ERROR" é mapeado para "ERROR"; "WARNING" é mapeado 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 Fixado em "ANSIBLE_AWX".
metadata.product_name metadata.product_name Fixado em "ANSIBLE_AWX".
metadata.vendor_name metadata.vendor_name Fixado em "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 Fixado em "VIRTUAL_MACHINE" se cloud.instance.name estiver presente.
observer.labels.key observer.labels.key Fixado em "ephemeral_id".
principal.resource.attribute.labels.key principal.resource.attribute.labels.key Fixado em "machine_type", "provider" ou "availability_zone", dependendo do campo que está sendo mapeado.
security_result.detection_fields.key security_result.detection_fields.key Fixado em "parent_uuid", "task" ou "task_uuid", dependendo do campo que está sendo mapeado.
target.asset.attribute.labels.key target.asset.attribute.labels.key Fixado em "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.

Alterações

2022-11-09

  • Parser recém-criado.