Recopila registros de Atlassian Jira

Compatible con:

Descripción general

Este analizador controla los registros de Atlassian Jira en formatos SYSLOG y JSON. Primero, intenta analizar el mensaje como JSON. Si eso falla, usa patrones de Grok para analizar los mensajes con formato SYSLOG y extraer varios campos, como direcciones IP, nombres de usuario, métodos HTTP y códigos de respuesta, antes de asignarlos al UDM. El analizador también controla eventos de auditoría específicos de Jira, incluidos los accesos y los errores de acceso, y asigna los campos pertinentes a los atributos de resultados de seguridad dentro del UDM.

Antes de comenzar

Asegúrate de cumplir con los siguientes requisitos previos:

  • Instancia de Google SecOps.
  • Acceso privilegiado a Atlassian Jira

Configura feeds

Existen dos puntos de entrada diferentes para configurar feeds en la plataforma de Google SecOps:

  • Configuración de SIEM > Feeds
  • Centro de contenido > Paquetes de contenido

Configura feeds en Configuración del SIEM > Feeds

Para configurar un feed, sigue estos pasos:

  1. Ve a Configuración del SIEM > Feeds.
  2. Haz clic en Agregar feed nuevo.
  3. En la siguiente página, haz clic en Configurar un solo feed.
  4. En el campo Nombre del feed, ingresa un nombre para el feed (por ejemplo, Registros de Atlassian Jira).
  5. Selecciona Webhook como el Tipo de origen.
  6. Selecciona Atlassian Jira como el Tipo de registro.
  7. Haz clic en Siguiente.
  8. Opcional: Especifica valores para los siguientes parámetros de entrada:
    • Delimitador de división: Es el delimitador que se usa para separar las líneas de registro, como \n.
    • Espacio de nombres del recurso: Es el espacio de nombres del recurso.
    • Etiquetas de transferencia: Es la etiqueta que se aplica a los eventos de este feed.
  9. Haz clic en Siguiente.
  10. Revisa la configuración del feed en la pantalla Finalizar y, luego, haz clic en Enviar.
  11. Haz clic en Generar clave secreta para generar una clave secreta que autentique este feed.
  12. Copia y almacena la clave secreta. No podrás volver a ver esta clave secreta. Si es necesario, puedes regenerar una clave secreta nueva, pero esta acción hace que la clave secreta anterior quede obsoleta.
  13. En la pestaña Detalles, copia la URL del extremo del feed del campo Información del extremo. Debes especificar esta URL de extremo en tu aplicación cliente.
  14. Haz clic en Listo.

Configura feeds desde el Centro de contenido

Especifica valores para los siguientes campos:

  • Delimitador de división: Es el delimitador que se usa para separar las líneas de registro, como \n.

Opciones avanzadas

  • Nombre del feed: Es un valor completado previamente que identifica el feed.
  • Tipo de fuente: Es el método que se usa para recopilar registros en Google SecOps.
  • Espacio de nombres del activo: Es el espacio de nombres asociado con el feed.
  • Etiquetas de transferencia: Son las etiquetas que se aplican a todos los eventos de este feed.

  • Haz clic en Generar clave secreta para generar una clave secreta que autentique este feed.

  • Copia y almacena la clave secreta. No podrás volver a ver esta clave secreta. Si es necesario, puedes regenerar una clave secreta nueva, pero esta acción hace que la clave secreta anterior quede obsoleta.

  • En la pestaña Detalles, copia la URL del extremo del feed del campo Información del extremo. Debes especificar esta URL de extremo en tu aplicación cliente.

Crea una clave de API para el feed del webhook

  1. Ve a Google Cloud consola > Credenciales.

    Ir a Credenciales

  2. Haz clic en Crear credenciales y selecciona Clave de API.

  3. Restringe el acceso a la clave de API a la API de Google Security Operations.

Especifica la URL del extremo

  1. En tu aplicación cliente, especifica la URL del extremo HTTPS que se proporciona en el feed de webhook.
  2. Para habilitar la autenticación, especifica la clave de API y la clave secreta como parte del encabezado personalizado con el siguiente formato:

    X-goog-api-key = API_KEY
    X-Webhook-Access-Key = SECRET
    

    Recomendación: Especifica la clave de API como un encabezado en lugar de hacerlo en la URL. Si tu cliente de webhook no admite encabezados personalizados, puedes especificar la clave de API y la clave secreta con parámetros de búsqueda en el siguiente formato:

    ENDPOINT_URL?key=API_KEY&secret=SECRET
    

Reemplaza lo siguiente:

  • ENDPOINT_URL: Es la URL del extremo del feed.
  • API_KEY: Es la clave de API para autenticarse en Google Security Operations.
  • SECRET: Es la clave secreta que generaste para autenticar el feed.

Crea un webhook en Atlassian Jira para Google SecOps

  1. Accede a tu instancia de Jira como administrador.
  2. Ve a Configuración settings > Sistema > WebHooks.
  3. Haz clic en Crear un webhook.
  4. Configura los siguientes detalles del webhook:
    • Nombre: Proporciona un nombre descriptivo para el webhook (por ejemplo, Integración de Google SecOps).
    • URL: Ingresa la URL del extremo de API de Google SecOps.
    • Eventos: Selecciona los eventos de Jira que deben activar el webhook. Elige los eventos relevantes para tus necesidades de supervisión de seguridad (por ejemplo, se creó un problema, se actualizó un problema, se agregó un comentario). Si es necesario, puedes seleccionar Todos los eventos.
    • Opcional: Filtro JQL: Usa un filtro JQL para definir con mayor precisión qué eventos activan el webhook. Esto es útil para enfocarse en proyectos específicos, tipos de problemas o cualquier otro criterio.
    • Exclude body: Deja esta opción sin marcar. El webhook debe enviar los datos del evento en formato JSON a Google SecOps.
  5. Haz clic en Crear para guardar la configuración del webhook.

Tabla de asignación de UDM

Campo de registro Asignación de UDM Lógica
affectedObjects.id target.resource.attribute.labels.value El campo id dentro de cada objeto del array affectedObjects se asigna a una etiqueta con la clave "ID_[índice]", donde [índice] es la posición del objeto en el array.
affectedObjects.name target.resource.attribute.labels.value El campo name dentro de cada objeto del array affectedObjects se asigna a una etiqueta con la clave "Name_[índice]", donde [índice] es la posición del objeto en el array.
affectedObjects.type target.resource.attribute.labels.value El campo type dentro de cada objeto del array affectedObjects se asigna a una etiqueta con la clave "Type_[index]", donde [index] es la posición del objeto en el array.
associatedItems.0.id target.user.userid Si associatedItems.0.typeName es "USER", este campo se asigna a target.user.userid. De lo contrario, se asigna a una etiqueta con la clave "associatedItems Id" en security_result.detection_fields.
associatedItems.0.name target.user.user_display_name Si associatedItems.0.typeName es "USER", este campo se asigna a target.user.user_display_name. De lo contrario, se asigna a una etiqueta con la clave "associatedItems Name" en security_result.detection_fields.
associatedItems.0.parentId target.process.parent_process.pid Si associatedItems.0.typeName es "USER", este campo se asigna a target.process.parent_process.pid.
associatedItems.0.parentName target.resource.parent Si associatedItems.0.typeName es "USER", este campo se asigna a target.resource.parent.
associatedItems.0.typeName security_result.detection_fields.value Se asigna a una etiqueta con la clave "associatedItems TypeName" en security_result.detection_fields.
author.id principal.user.userid Se asignó a principal.user.userid.
author.name principal.user.user_display_name Se asignó a principal.user.user_display_name.
author.type principal.resource.attribute.labels.value Se asigna a una etiqueta con la clave "Tipo de autor" en principal.resource.attribute.labels.
author.uri principal.url Se asignó a principal.url.
authorAccountId principal.user.userid Se asignó a principal.user.userid.
authorKey target.resource.attribute.labels.value Se asignó a una etiqueta con la clave "Author Key" en target.resource.attribute.labels.
auditType.action security_result.summary Se asignó a security_result.summary. También se usa para derivar security_result.action y metadata.event_type (USER_LOGIN si la acción contiene "login", ALLOW si es "successful" y BLOCK si es "failed").
auditType.area metadata.product_event_type Se asignó a metadata.product_event_type.
auditType.category security_result.category_details Se asignó a security_result.category_details.
category metadata.product_event_type Se asignó a metadata.product_event_type.
changedValues.changedFrom security_result.about.resource.attribute.labels.value Se asignó a una etiqueta con la clave "Changed From" en security_result.about.resource.attribute.labels.
changedValues.changedTo security_result.about.resource.attribute.labels.value Se asigna a una etiqueta con la clave "Changed To" en security_result.about.resource.attribute.labels.
changedValues.fieldName security_result.about.resource.attribute.labels.value Se asignó a una etiqueta con la clave "FieldName" en security_result.about.resource.attribute.labels.
changedValues.i18nKey security_result.about.resource.attribute.labels.value Se asignó a una etiqueta con la clave "FieldName" en security_result.about.resource.attribute.labels.
changedValues.key security_result.about.resource.attribute.labels.value Se asignó a una etiqueta con la clave "Changed From" en security_result.about.resource.attribute.labels.
changedValues.to security_result.about.resource.attribute.labels.value Se asigna a una etiqueta con la clave "Changed To" en security_result.about.resource.attribute.labels.
created metadata.event_timestamp Se analizó y se asignó a metadata.event_timestamp.
dst_ip target.ip Se asignó a target.ip.
extraAttributes.name principal.resource.attribute.labels.value Se asignó a una etiqueta con la clave "Nombre" en principal.resource.attribute.labels.
extraAttributes.value principal.resource.attribute.labels.value Se asigna a una etiqueta con la clave "Value" en principal.resource.attribute.labels.
http_method network.http.method Se asignó a network.http.method.
http_referral_url network.http.referral_url Se asignó a network.http.referral_url.
id metadata.product_log_id Se asignó a metadata.product_log_id.
objectItem.id security_result.detection_fields.value Se asigna a una etiqueta con la clave "objectItem Id" en security_result.detection_fields.
objectItem.name security_result.detection_fields.value Se asigna a una etiqueta con la clave "objectItem Name" en security_result.detection_fields.
objectItem.typeName security_result.detection_fields.value Se asigna a una etiqueta con la clave "objectItem TypeName" en security_result.detection_fields.
path principal.url Si no es "-" o "/status", se asigna a principal.url.
protocol network.ip_protocol Si es "HTTP", se asigna a network.ip_protocol.
remoteAddress principal.ip Se asignó a principal.ip.
response_code network.http.response_code Se asignó a network.http.response_code.
sent_bytes network.sent_bytes Se asignó a network.sent_bytes.
source principal.ip Se analizó para extraer direcciones IP y se combinó en principal.ip.
src_ip1, src_ip2, src_ip3 principal.ip Se asignó a principal.ip.
summary metadata.description Se asignó a metadata.description.
user_agent network.http.user_agent Se asignó a network.http.user_agent.
user_name principal.user.userid Se asignó a principal.user.userid. Se establece en "MACHINE" si auditType.action contiene "login". Se deriva de date_time si se analiza el registro del sistema o de created si se analiza JSON. Si timestamp está disponible en JSON, se usa en lugar de created. Si no hay ninguno de estos presentes, se usa el create_time del lote. Se deriva en función de la presencia de otros campos: NETWORK_HTTP si dst_ip está presente, USER_UNCATEGORIZED si user_name o (associatedItems.0.typeName es "USER" y associatedItems.0.id está presente) está presente, STATUS_UPDATE si src_ip1, src_ip2, src_ip3 o remoteAddress está presente, o GENERIC_EVENT en otros casos. Se anula y se establece en USER_LOGIN si auditType.action contiene "login". Siempre se establece en "ATLASSIAN_JIRA". Siempre se establece en "ATLASSIAN_JIRA". Se establece en "ALLOW" si auditType.action contiene "login successful" y en "BLOCK" si auditType.action contiene "login failed".

¿Necesitas más ayuda? Obtén respuestas de miembros de la comunidad y profesionales de Google SecOps.