Coletar registros do JFrog Artifactory
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
- Acesse Configurações do SIEM > Feeds.
- Clique em Adicionar novo.
- No campo Nome do feed, insira um nome para o feed (por exemplo, JFrog Artifactory Logs).
- Selecione Webhook como o Tipo de origem.
- Selecione JFrog Artifactory 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
. - Namespace de recursos: o namespace de recursos.
- Rótulos de ingestão: o rótulo aplicado aos eventos desse feed.
- 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 gerar uma chave secreta para autenticar esse feed.
- 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.
- 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.
Criar uma chave de API para o feed de webhook
Acesse o console do Google Cloud > Credenciais.
Clique em Criar credenciais e, em seguida, selecione Chave de API.
Restrinja o acesso da chave de API à API Google Security Operations.
Especificar o URL do endpoint
- No aplicativo cliente, especifique o URL do endpoint HTTPS fornecido no feed de 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 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 SecOps.SECRET
: a chave secreta que você gerou para autenticar o feed.
Criar um webhook no JFrog Artifactory para enviar dados ao Google SecOps
- Faça login na instância do JFrog usando suas credenciais de administrador.
- Acesse Administração > Geral > Webhooks.
- Clique em + Novo webhook.
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.
Clique em Testar para enviar um evento de teste ao Google SecOps.
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.