Recoger registros de Atlassian Jira
Información general
Este analizador gestiona los registros de Atlassian Jira en formatos SYSLOG y JSON. Primero intenta analizar el mensaje como JSON. Si no funciona, usa patrones grok para analizar mensajes con formato SYSLOG, extraer varios campos (como direcciones IP, nombres de usuario, métodos HTTP y códigos de respuesta) y, a continuación, asignarlos al modelo de datos unificado. El analizador también gestiona eventos de auditoría específicos de Jira, como los inicios de sesión correctos y fallidos, y asigna los campos relevantes a los atributos de resultados de seguridad en el modelo de datos unificado.
Antes de empezar
Asegúrate de que cumples los siguientes requisitos previos:
- Instancia de Google SecOps.
 - Acceso privilegiado a Atlassian Jira.
 
Configurar feeds desde Configuración de SIEM > Feeds
Para configurar un feed, sigue estos pasos:
- Ve a Configuración de SIEM > Feeds.
 - Haz clic en Añadir feed.
 - En la página siguiente, haga clic en Configurar un solo feed.
 - En el campo Nombre del feed, introduce un nombre para el feed (por ejemplo, Registros de Atlassian Jira).
 - Selecciona Webhook como Tipo de fuente.
 - Seleccione Atlassian Jira como Tipo de registro.
 - Haz clic en Siguiente.
 - Opcional: especifica los valores de los siguientes parámetros de entrada:
- Delimitador de división: el delimitador que se usa para separar las líneas de registro, como 
\n. - Espacio de nombres de recursos: el espacio de nombres de recursos.
 - Etiquetas de ingestión: la etiqueta aplicada a los eventos de este feed.
 
 - Delimitador de división: el delimitador que se usa para separar las líneas de registro, como 
 - Haz clic en Siguiente.
 - Revise la configuración del feed en la pantalla Finalizar y, a continuación, haga clic en Enviar.
 - Haz clic en Generar clave secreta para generar una clave secreta que autentique este feed.
 - Copia y guarda la clave secreta. No podrás volver a ver esta clave secreta. Si es necesario, puedes volver a generar una clave secreta, pero esta acción hará que la clave secreta anterior quede obsoleta.
 - En la pestaña Detalles, copie la URL del endpoint del feed del campo Información del endpoint. Debes especificar esta URL de endpoint en tu aplicación cliente.
 - Haz clic en Listo.
 
Crear una clave de API para la feed de webhook
- Ve a la Google Cloud consola > Credenciales.
 - Haz clic en Crear credenciales y, a continuación, selecciona Clave de API.
 - Restringe el acceso de la clave de API a la API Google Security Operations.
 
Especificar la URL del endpoint
- En tu aplicación cliente, especifica la URL del endpoint HTTPS proporcionada en el feed de webhook.
 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 = SECRETRecomendación: Especifica la clave de API como 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 mediante parámetros de consulta con el siguiente formato:
ENDPOINT_URL?key=API_KEY&secret=SECRET
Haz los cambios siguientes:
ENDPOINT_URL: URL del endpoint del feed.API_KEY: la clave de API para autenticarte en Google Security Operations.SECRET: la clave secreta que has generado para autenticar el feed.
Crear un webhook en Atlassian Jira para Google SecOps
- Accede a tu instancia de Jira como administrador.
 - Ve a Ajustes settings > Sistema > WebHooks.
 - Haz clic en Crear un WebHook.
 - Configura los siguientes detalles del webhook:
- Nombre: proporciona un nombre descriptivo para el webhook (por ejemplo, Integración de Google SecOps).
 - URL: introduce la URL del endpoint de la API de Google SecOps.
 - Eventos: selecciona los eventos de Jira que deben activar el webhook. Elige los eventos que se ajusten a tus necesidades de monitorización de seguridad (por ejemplo, problema creado, problema actualizado o comentario añadido). Si es necesario, puede seleccionar Todos los eventos.
 - Opcional: Filtro JQL: usa un filtro JQL para acotar aún más los eventos que activan el webhook. Esto resulta útil para centrarse en proyectos, tipos de incidencias u otros criterios específicos.
 - Excluir cuerpo: deja esta opción desmarcada. El webhook debe enviar los datos de eventos en formato JSON a Google SecOps.
 
 - 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 de cada objeto de la matriz affectedObjects se asigna a una etiqueta con la clave "ID_[index]", donde [index] es la posición del objeto en la matriz. | 
affectedObjects.name | 
target.resource.attribute.labels.value | 
El campo name de cada objeto de la matriz affectedObjects se asigna a una etiqueta con la clave "Name_[index]", donde [index] es la posición del objeto en la matriz. | 
affectedObjects.type | 
target.resource.attribute.labels.value | 
El campo type de cada objeto de la matriz affectedObjects se asigna a una etiqueta con la clave "Type_[index]", donde [index] es la posición del objeto en la matriz. | 
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 | 
Asignado a una etiqueta con la clave "associatedItems TypeName" en security_result.detection_fields. | 
author.id | 
principal.user.userid | 
Asignado a principal.user.userid. | 
author.name | 
principal.user.user_display_name | 
Asignado a principal.user.user_display_name. | 
author.type | 
principal.resource.attribute.labels.value | 
Asignado a una etiqueta con la clave "Author Type" en principal.resource.attribute.labels. | 
author.uri | 
principal.url | 
Asignado a principal.url. | 
authorAccountId | 
principal.user.userid | 
Asignado a principal.user.userid. | 
authorKey | 
target.resource.attribute.labels.value | 
Asignado a una etiqueta con la clave "Author Key" en target.resource.attribute.labels. | 
auditType.action | 
security_result.summary | 
Asignado 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 contiene "successful" y BLOCK si contiene "failed"). | 
auditType.area | 
metadata.product_event_type | 
Asignado a metadata.product_event_type. | 
auditType.category | 
security_result.category_details | 
Asignado a security_result.category_details. | 
category | 
metadata.product_event_type | 
Asignado a metadata.product_event_type. | 
changedValues.changedFrom | 
security_result.about.resource.attribute.labels.value | 
Se ha asignado 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 ha asignado 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 ha asignado a una etiqueta con la clave "FieldName" en security_result.about.resource.attribute.labels. | 
changedValues.i18nKey | 
security_result.about.resource.attribute.labels.value | 
Se ha asignado a una etiqueta con la clave "FieldName" en security_result.about.resource.attribute.labels. | 
changedValues.key | 
security_result.about.resource.attribute.labels.value | 
Se ha asignado 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 ha asignado a una etiqueta con la clave "Changed To" en security_result.about.resource.attribute.labels. | 
created | 
metadata.event_timestamp | 
Analizado y asignado a metadata.event_timestamp. | 
dst_ip | 
target.ip | 
Asignado a target.ip. | 
extraAttributes.name | 
principal.resource.attribute.labels.value | 
Asignado a una etiqueta con la clave "Name" en principal.resource.attribute.labels. | 
extraAttributes.value | 
principal.resource.attribute.labels.value | 
Asignado a una etiqueta con la clave "Value" en principal.resource.attribute.labels. | 
http_method | 
network.http.method | 
Asignado a network.http.method. | 
http_referral_url | 
network.http.referral_url | 
Asignado a network.http.referral_url. | 
id | 
metadata.product_log_id | 
Asignado a metadata.product_log_id. | 
objectItem.id | 
security_result.detection_fields.value | 
Asignado a una etiqueta con la clave "objectItem Id" en security_result.detection_fields. | 
objectItem.name | 
security_result.detection_fields.value | 
Asignado a una etiqueta con la clave "objectItem Name" en security_result.detection_fields. | 
objectItem.typeName | 
security_result.detection_fields.value | 
Asignado 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 | 
Asignado a principal.ip. | 
response_code | 
network.http.response_code | 
Asignado a network.http.response_code. | 
sent_bytes | 
network.sent_bytes | 
Asignado a network.sent_bytes. | 
source | 
principal.ip | 
Se ha analizado para extraer direcciones IP y se ha combinado en principal.ip. | 
src_ip1, src_ip2, src_ip3 | 
principal.ip | 
Asignado a principal.ip. | 
summary | 
metadata.description | 
Asignado a metadata.description. | 
user_agent | 
network.http.user_agent | 
Asignado a network.http.user_agent. | 
user_name | 
principal.user.userid | 
Asignado a principal.user.userid. Se define como "MACHINE" si auditType.action contiene "login". Se deriva de date_time si se analiza syslog o de created si se analiza JSON. Si timestamp está disponible en JSON, se usa en lugar de created.  Si no se incluye ninguno de estos atributos, 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 caso contrario.  Se sustituye por USER_LOGIN si auditType.action contiene "login". Siempre se define como "ATLASSIAN_JIRA". Siempre se define como "ATLASSIAN_JIRA". Asigna el valor "ALLOW" si auditType.action contiene "login successful" y "BLOCK" si auditType.action contiene "login failed". | 
¿Necesitas más ayuda? Recibe respuestas de los miembros de la comunidad y de los profesionales de Google SecOps.