Recolha registos do Atlassian Jira
Vista geral
Este analisador processa registos do Atlassian Jira nos formatos SYSLOG e JSON. Primeiro, tenta analisar a mensagem como JSON. Se falhar, usa padrões grok para analisar mensagens formatadas em SYSLOG, extraindo vários campos, como endereços IP, nomes de utilizadores, métodos HTTP e códigos de resposta, antes de os mapear para o UDM. O analisador também processa eventos de auditoria específicos do Jira, incluindo sucessos e falhas de início de sessão, e mapeia campos relevantes para atributos de resultados de segurança no UDM.
Antes de começar
Certifique-se de que tem os seguintes pré-requisitos:
- Instância do Google SecOps.
- Acesso privilegiado ao Atlassian Jira.
Configure feeds a partir de Definições do SIEM > Feeds
Para configurar um feed, siga estes passos:
- Aceda a Definições do SIEM > Feeds.
- Clique em Adicionar novo feed.
- Na página seguinte, clique em Configurar um único feed.
- No campo Nome do feed, introduza um nome para o feed (por exemplo, Registos do Atlassian Jira).
- Selecione Webhook como o Tipo de origem.
- Selecione Atlassian Jira como o Tipo de registo.
- Clicar em Seguinte.
- Opcional: especifique valores para os seguintes parâmetros de entrada:
- Delimitador de divisão: o delimitador usado para separar linhas de registo, como
\n
. - Espaço de nomes do recurso: o espaço de nomes do recurso.
- Etiquetas de carregamento: a etiqueta aplicada aos eventos deste feed.
- Delimitador de divisão: o delimitador usado para separar linhas de registo, como
- Clicar em Seguinte.
- Reveja a configuração do feed no ecrã Finalizar e, de seguida, clique em Enviar.
- Clique em Gerar chave secreta para gerar uma chave secreta para autenticar este feed.
- 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.
- 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.
- Clique em Concluído.
Crie uma chave da API para o feed de webhook
- Aceda à Google Cloud consola > Credenciais.
- Clique em Criar credenciais e, de seguida, selecione Chave de API.
- Restrinja o acesso da chave de API à API Google Security Operations.
Especifique o URL do ponto final
- Na aplicação cliente, especifique o URL do ponto final HTTPS fornecido no feed do webhook.
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.
Crie um webhook no Atlassian Jira para o Google SecOps
- Aceda à sua instância do Jira como administrador.
- Aceda a Definições settings > Sistema > WebHooks.
- Clique em Criar um WebHook.
- Configure os seguintes detalhes do webhook:
- Nome: indique um nome descritivo para o webhook (por exemplo, Integração do Google SecOps).
- URL: introduza o URL do ponto final da API Google SecOps.
- Eventos: selecione os eventos do Jira que devem acionar o webhook. Escolha os eventos relevantes para as suas necessidades de monitorização de segurança (por exemplo, problema criado, problema atualizado, comentário adicionado). Se necessário, pode selecionar Todos os eventos.
- Opcional: filtro JQL: use um filtro JQL para refinar ainda mais os eventos que acionam o webhook. Isto é útil para se concentrar em projetos específicos, tipos de problemas ou outros critérios.
- Excluir corpo: deixe esta opção desmarcada. O webhook tem de enviar os dados de eventos no formato JSON para o Google SecOps.
- Clique em Criar para guardar a configuração do webhook.
Tabela de mapeamento da UDM
Campo de registo | Mapeamento de UDM | Lógica |
---|---|---|
affectedObjects.id |
target.resource.attribute.labels.value |
O campo id em cada objeto da matriz affectedObjects é mapeado para uma etiqueta com a chave "ID_[index]", em que [index] é a posição do objeto na matriz. |
affectedObjects.name |
target.resource.attribute.labels.value |
O campo name em cada objeto da matriz affectedObjects é mapeado para uma etiqueta com a chave "Name_[index]", em que [index] é a posição do objeto na matriz. |
affectedObjects.type |
target.resource.attribute.labels.value |
O campo type em cada objeto da matriz affectedObjects é mapeado para uma etiqueta com a chave "Type_[index]", em que [index] é a posição do objeto na matriz. |
associatedItems.0.id |
target.user.userid |
Se associatedItems.0.typeName for "USER", este campo é mapeado para target.user.userid . Caso contrário, é mapeado para uma etiqueta com a chave "associatedItems Id" em security_result.detection_fields . |
associatedItems.0.name |
target.user.user_display_name |
Se associatedItems.0.typeName for "USER", este campo é mapeado para target.user.user_display_name . Caso contrário, é mapeado para uma etiqueta com a chave "associatedItems Name" em security_result.detection_fields . |
associatedItems.0.parentId |
target.process.parent_process.pid |
Se associatedItems.0.typeName for "USER", este campo é mapeado para target.process.parent_process.pid . |
associatedItems.0.parentName |
target.resource.parent |
Se associatedItems.0.typeName for "USER", este campo é mapeado para target.resource.parent . |
associatedItems.0.typeName |
security_result.detection_fields.value |
Mapeado para uma etiqueta com a chave "associatedItems TypeName" em security_result.detection_fields . |
author.id |
principal.user.userid |
Mapeado para principal.user.userid . |
author.name |
principal.user.user_display_name |
Mapeado para principal.user.user_display_name . |
author.type |
principal.resource.attribute.labels.value |
Mapeado para uma etiqueta com a chave "Author Type" em principal.resource.attribute.labels . |
author.uri |
principal.url |
Mapeado para principal.url . |
authorAccountId |
principal.user.userid |
Mapeado para principal.user.userid . |
authorKey |
target.resource.attribute.labels.value |
Mapeado para uma etiqueta com a chave "Author Key" em target.resource.attribute.labels . |
auditType.action |
security_result.summary |
Mapeado para security_result.summary . Também é usado para derivar security_result.action e metadata.event_type (USER_LOGIN se a ação contiver "login", ALLOW se "successful", BLOCK se "failed"). |
auditType.area |
metadata.product_event_type |
Mapeado para metadata.product_event_type . |
auditType.category |
security_result.category_details |
Mapeado para security_result.category_details . |
category |
metadata.product_event_type |
Mapeado para metadata.product_event_type . |
changedValues.changedFrom |
security_result.about.resource.attribute.labels.value |
Mapeado para uma etiqueta com a chave "Alterado de" em security_result.about.resource.attribute.labels . |
changedValues.changedTo |
security_result.about.resource.attribute.labels.value |
Mapeado para uma etiqueta com a chave "Changed To" em security_result.about.resource.attribute.labels . |
changedValues.fieldName |
security_result.about.resource.attribute.labels.value |
Mapeado para uma etiqueta com a chave "FieldName" em security_result.about.resource.attribute.labels . |
changedValues.i18nKey |
security_result.about.resource.attribute.labels.value |
Mapeado para uma etiqueta com a chave "FieldName" em security_result.about.resource.attribute.labels . |
changedValues.key |
security_result.about.resource.attribute.labels.value |
Mapeado para uma etiqueta com a chave "Alterado de" em security_result.about.resource.attribute.labels . |
changedValues.to |
security_result.about.resource.attribute.labels.value |
Mapeado para uma etiqueta com a chave "Changed To" em security_result.about.resource.attribute.labels . |
created |
metadata.event_timestamp |
Analisado e mapeado para metadata.event_timestamp . |
dst_ip |
target.ip |
Mapeado para target.ip . |
extraAttributes.name |
principal.resource.attribute.labels.value |
Mapeado para uma etiqueta com a chave "Nome" em principal.resource.attribute.labels . |
extraAttributes.value |
principal.resource.attribute.labels.value |
Mapeado para uma etiqueta com a chave "Valor" em principal.resource.attribute.labels . |
http_method |
network.http.method |
Mapeado para network.http.method . |
http_referral_url |
network.http.referral_url |
Mapeado para network.http.referral_url . |
id |
metadata.product_log_id |
Mapeado para metadata.product_log_id . |
objectItem.id |
security_result.detection_fields.value |
Mapeado para uma etiqueta com a chave "objectItem Id" em security_result.detection_fields . |
objectItem.name |
security_result.detection_fields.value |
Mapeado para uma etiqueta com a chave "objectItem Name" em security_result.detection_fields . |
objectItem.typeName |
security_result.detection_fields.value |
Mapeado para uma etiqueta com a chave "objectItem TypeName" em security_result.detection_fields . |
path |
principal.url |
Se não for "-" ou "/status", é mapeado para principal.url . |
protocol |
network.ip_protocol |
Se for "HTTP", é mapeado para network.ip_protocol . |
remoteAddress |
principal.ip |
Mapeado para principal.ip . |
response_code |
network.http.response_code |
Mapeado para network.http.response_code . |
sent_bytes |
network.sent_bytes |
Mapeado para network.sent_bytes . |
source |
principal.ip |
Analisados para extrair endereços IP e unidos em principal.ip . |
src_ip1 , src_ip2 , src_ip3 |
principal.ip |
Mapeado para principal.ip . |
summary |
metadata.description |
Mapeado para metadata.description . |
user_agent |
network.http.user_agent |
Mapeado para network.http.user_agent . |
user_name |
principal.user.userid |
Mapeado para principal.user.userid . Defina como "MACHINE" se auditType.action contiver "login". Derivado de date_time se estiver a analisar o syslog ou created se estiver a analisar o JSON. Se timestamp estiver disponível em JSON, é usado em vez de created . Se nenhum destes estiver presente, é usado o create_time do lote. Derivado com base na presença de outros campos: NETWORK_HTTP se dst_ip estiver presente, USER_UNCATEGORIZED se user_name ou (associatedItems.0.typeName for "USER" e associatedItems.0.id estiver presente) estiver presente, STATUS_UPDATE se src_ip1 , src_ip2 , src_ip3 ou remoteAddress estiver presente, ou GENERIC_EVENT caso contrário. Substituído por USER_LOGIN se auditType.action contiver "login". Está sempre definido como "ATLASSIAN_JIRA". Está sempre definido como "ATLASSIAN_JIRA". Definido como "ALLOW" se auditType.action contiver "login successful" e "BLOCK" se auditType.action contiver "login failed". |
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais da Google SecOps.