Recolha registos do Ansible AWX

Compatível com:

Vista geral

Este analisador extrai dados de registo formatados em JSON do Ansible AWX, convertendo-os no modelo de dados unificado (UDM). Processa vários formatos de registos, extrai campos relevantes, como datas/horas, endereços IP, informações do anfitrião e detalhes de eventos, e mapeia-os para os campos da UDM correspondentes. Também processa casos extremos específicos e enriquece os dados com etiquetas e metadados.

Antes de começar

Certifique-se de que tem os seguintes pré-requisitos:

  • Instância do Google SecOps.
  • Acesso privilegiado ao Ansible AWX.

Configure feeds

Para configurar um feed, siga estes passos:

  1. Aceda a Definições do SIEM > Feeds.
  2. Clique em Adicionar novo feed.
  3. Na página seguinte, clique em Configurar um único feed.
  4. No campo Nome do feed, introduza um nome para o feed (por exemplo, Registos do Ansible AWX).
  5. Selecione Webhook como o Tipo de origem.
  6. Selecione Ansible AWX como o Tipo de registo.
  7. Clicar em Seguinte.
  8. Opcional: especifique valores para os seguintes parâmetros de entrada:
    • Delimitador de divisão: o delimitador usado para separar linhas de registo, como \n.
  9. Clicar em Seguinte.
  10. Reveja a configuração do feed no ecrã Finalizar e, de seguida, clique em Enviar.
  11. Clique em Gerar chave secreta para gerar uma chave secreta para autenticar este feed.
  12. Copie e armazene a chave secreta. Não pode ver esta chave secreta novamente. Se necessário, pode regenerar uma nova chave secreta, mas esta ação torna a chave secreta anterior obsoleta.
  13. No separador Detalhes, copie o URL do ponto final do feed do campo Informações do ponto final. Tem de especificar este URL do ponto final na sua aplicação cliente.
  14. Clique em Concluído.

Crie uma chave da API para o feed de webhook

  1. Aceda à Google Cloud consola > Credenciais.

    Aceder a Credenciais

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

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

Especifique o URL do ponto final

  1. Na aplicação cliente, especifique o URL do ponto final HTTPS fornecido no feed do webhook.
  2. Ative a autenticação especificando a chave da 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 da API como um cabeçalho em vez de a especificar no URL. Se o seu cliente de webhook não suportar cabeçalhos personalizados, pode especificar a chave da API e a chave secreta através de parâmetros de consulta no seguinte formato:

    ENDPOINT_URL?key=API_KEY&secret=SECRET
    

Substitua o seguinte:

  • ENDPOINT_URL: o URL do ponto final do feed.
  • API_KEY: a chave da API para autenticar no Google Security Operations.
  • SECRET: a chave secreta que gerou para autenticar o feed.

Configure o webhook no Ansible AWX

  1. Inicie sessão na sua instância do AWX.
  2. Aceda à secção Notificações, localizada em Administração.
  3. Clique em Adicionar.
  4. Configure as definições de webhook:

    • Nome: indique um nome descritivo para o webhook (por exemplo, Webhook do Google SecOps).
    • Tipo: selecione Webhook na lista.
    • URL de destino: introduza o URL do ponto final da API Google SecOps.
    • Método de HTTP: selecione POST.

    Opcional: cabeçalhos HTTP: adicione os cabeçalhos necessários para a autenticação ou o tipo de conteúdo. Por exemplo, pode ter de incluir um cabeçalho Authorization com um token de autorização. Consulte a documentação do Google SecOps para ver os requisitos específicos dos cabeçalhos.

  5. Clique em Guardar para criar o webhook.

  6. Aceda a Projetos, localizado em Recursos.

  7. Selecione os projetos aos quais quer associar o webhook.

  8. No projeto selecionado, aceda ao separador Notificações.

  9. Selecione os acionadores que quer ATIVAR para a notificação de webhook criada anteriormente Início | Êxito | Falha.

As notificações vão ser aplicadas a todos os modelos associados ao projeto. Pode desativá-las manualmente navegando até ao campo Notificações em cada modelo.

Tabela de mapeamento da UDM

Campo de registo Mapeamento de 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. Usado como alternativa 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 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 como alternativa se host_name não estiver presente. Se for um número, é convertido numa string.
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 "Host Id: " concatenado com o valor de host.id do registo não processado.
host.ip target.asset.ip Os valores da matriz host.ip do registo não processado.
host.mac target.mac Os valores da matriz 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 Se o valor de host.os.platform for "debian", o campo UDM é definido como "LINUX".
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.
input.type network.ip_protocol Se o valor de input.type for "tcp", o campo UDM é 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 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.
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 de forma rígida como "ANSIBLE_AWX".
metadata.product_name metadata.product_name Codificado de forma rígida como "ANSIBLE_AWX".
metadata.vendor_name metadata.vendor_name Codificado de forma rígida como "ANSIBLE_AWX".
parent_uuid security_result.detection_fields.value O valor de parent_uuid do registo não processado.
principal.resource.resource_type principal.resource.resource_type Codificado de forma rígida como "VIRTUAL_MACHINE" se cloud.instance.name estiver presente.
observer.labels.key observer.labels.key Codificado de forma rígida para "ephemeral_id".
principal.resource.attribute.labels.key principal.resource.attribute.labels.key Codificado de forma rígida para "machine_type", "provider" ou "availability_zone", consoante o campo que está a ser mapeado.
security_result.detection_fields.key security_result.detection_fields.key Codificado de forma rígida para "parent_uuid", "task" ou "task_uuid", consoante o campo que está a ser mapeado.
target.asset.attribute.labels.key target.asset.attribute.labels.key Codificado de forma rígida como "codename" ou "os_name", consoante o campo que está a ser mapeado.
timestamp metadata.event_timestamp O valor de timestamp do registo não processado, analisado e convertido numa indicação de tempo.
timestamp timestamp O valor de timestamp do registo não processado, analisado e convertido numa indicação de tempo.

Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais da Google SecOps.