Coletar registros do JFrog Artifactory

Compatível com:

Esse analisador processa dois formatos de registro diferentes do JFrog Artifactory. Ele usa padrões grok para identificar e extrair campos de cada formato. Em seguida, ele mapeia esses campos para o UDM, processando payloads JSON em um dos formatos e descartando registros que não correspondem a nenhum formato.

Antes de começar

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

Configurar um feed no Google SecOps para ingerir os registros do JFrog Artifactory

  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, JFrog Artifactory Logs).
  4. Selecione Webhook como o Tipo de origem.
  5. Selecione JFrog Artifactory 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.

  3. 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 SecOps.
    • SECRET: a chave secreta que você gerou para autenticar o feed.

Criar um webhook no JFrog Artifactory para enviar dados ao Google SecOps

  1. Faça login na instância do JFrog usando suas credenciais de administrador.
  2. Acesse Administração > Geral > Webhooks.
  3. Clique em + Novo webhook.
  4. Defina as seguintes configurações do webhook:

    • Chave de webhook: forneça um nome descritivo (por exemplo, Google SecOps).
    • URL: insira o <ENDPOINT_URL> do endpoint de API Google SecOps.

    • Eventos: selecione os eventos do Artifactory que vão acionar o webhook e escolha os eventos relevantes para suas necessidades de monitoramento de segurança (por exemplo, implantado, feito o download, excluído).

    • Domínio: se você estiver usando um repositório virtual, selecione o domínio relevante. Caso contrário, deixe este campo como Qualquer local.

    • Repositório: selecione o repositório específico ou deixe como Qualquer remoto ou Qualquer local, dependendo dos seus requisitos.

  5. Clique em Testar para enviar um evento de teste ao Google SecOps.

  6. Clique em Salvar.

Tabela de mapeamento do UDM

Campo de registro Mapeamento do UDM Lógica
action read_only_udm.metadata.product_event_type O valor de action do registro bruto é convertido para letras minúsculas e mapeado.
datetime read_only_udm.metadata.event_timestamp O campo datetime do registro bruto é analisado e convertido em um carimbo de data/hora.
hostname read_only_udm.principal.hostname Mapeado diretamente do campo hostname do registro bruto.
id read_only_udm.metadata.product_log_id Mapeado diretamente do campo id do registro bruto (do payload JSON).
ip read_only_udm.principal.ip Mapeado diretamente do campo ip do registro bruto. Fixado em "USER_RESOURCE_ACCESS". Fixado em "JFROG_ARTIFACTORY". Fixado em "Artifactory". Fixado em "JFROG".
proprietário read_only_udm.principal.user.userid É mapeado se username não estiver presente no registro bruto (do payload JSON).
repo_name read_only_udm.target.resource.name Mapeado diretamente do campo repo_name do registro bruto.
repo_type read_only_udm.target.resource.resource_subtype Mapeado diretamente do campo repo_type do registro bruto.
escopo read_only_udm.target.resource.name Mapeado diretamente do campo escopo do registro bruto (do payload JSON).
escopo read_only_udm.target.resource.resource_subtype Fixado em "escopo" se escopo estiver presente no registro bruto.
sequenceId read_only_udm.metadata.product_log_id As aspas são removidas do campo sequenceId e mapeadas.
assunto read_only_udm.about.labels.key Fixado em "assunto" se assunto estiver presente no registro bruto.
assunto read_only_udm.about.labels.value Mapeado diretamente do campo subject do registro bruto (do payload JSON).
type read_only_udm.metadata.product_event_type Mapeado diretamente do campo type do registro bruto (do payload JSON).
user read_only_udm.principal.user.userid Mapeado diretamente do campo user do registro bruto.
username read_only_udm.principal.user.userid Mapeado diretamente do campo username do registro bruto (do payload JSON).

Alterações

2024-09-23

  • Melhoria:
  • Foi adicionado suporte para analisar os registros não analisados.
  • Mapeamos "target_ip" para "target.ip" e "target.asset.ip".
  • "Desc" foi mapeado para "metadata.description".
  • O "method" foi mapeado para "network.http.method".
  • "url" foi mapeado para "target.url".
  • "prin_url" foi associado a "principal.url".
  • "response_code" foi associado a "network.http.response_code".
  • "RequestMethod" foi mapeado para "network.http.method".
  • "RequestPath" foi associado a "target.url".
  • "DownstreamContentSize" e "DownstreamStatus" foram mapeados para "Additional.Fields".
  • "ServiceAddr" foi mapeado para "principal.hostname" e "principal.port".
  • Mapeamos "ClientAddr" para "target.ip" e "target.port".
  • "user_agent" foi mapeado para "network.http.user_agent".
  • "level" foi mapeado para "security_result.severity".
  • "msg" foi associado a "security_result.description".
  • "Protocolo" foi mapeado para "network.application_protocol".

2023-08-25

  • Parser recém-criado.