Recopila registros de JFrog Artifactory

Compatible con:

Este analizador controla dos formatos de registro diferentes de JFrog Artifactory. Usa patrones de grok para identificar y extraer campos de cada formato. Luego, asigna esos campos a la UDM, controla las cargas útiles JSON dentro de uno de los formatos y descarta los registros que no coinciden con ninguno de los formatos.

Antes de comenzar

  • Asegúrate de tener una instancia de Google SecOps.
  • Asegúrate de tener acceso con privilegios a JFrog.

Configura un feed en Google SecOps para transferir los registros de JFrog Artifactory

  1. Ve a Configuración de SIEM > Feeds.
  2. Haz clic en Agregar nueva.
  3. En el campo Nombre del feed, ingresa un nombre para el feed (por ejemplo, Registros de JFrog Artifactory).
  4. Selecciona Webhook como el Tipo de origen.
  5. Selecciona JFrog Artifactory como el Tipo de registro.
  6. Haz clic en Siguiente.
  7. 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 de recursos: Es el espacio de nombres de recursos.
    • Etiquetas de transferencia: Es la etiqueta que se aplica a los eventos de este feed.
  8. Haz clic en Siguiente.
  9. Revisa la configuración del feed en la pantalla Finalizar y, luego, haz clic en Enviar.
  10. Haz clic en Generate Secret Key para generar una clave secreta que autentique este feed.
  11. Copia y almacena la clave secreta. No podrás volver a ver esta clave secreta. Si es necesario, puedes volver a generar una clave secreta nueva, pero esta acción hace que la clave secreta anterior quede obsoleta.
  12. 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.
  13. Haz clic en Listo.

Crea una clave de API para el feed de webhook

  1. Ve a consola de Google Cloud > Credenciales.

    Ir a Credenciales

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

  3. Restringe el acceso de 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. Habilita la autenticación especificando la clave de API y la clave secreta como parte del encabezado personalizado en 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.

  3. Si tu cliente de webhook no admite encabezados personalizados, puedes especificar la clave de API y la clave secreta con parámetros de consulta 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 autenticar en Google SecOps.
    • SECRET: Es la clave secreta que generaste para autenticar el feed.

Crea un webhook en JFrog Artifactory para enviar datos a Google SecOps

  1. Accede a la instancia de JFrog con tus credenciales de administrador.
  2. Ve a Administración > General > Webhooks.
  3. Haz clic en + Webhook nuevo.
  4. Establece la siguiente configuración del webhook:

    • Clave de webhook: Proporciona un nombre descriptivo (por ejemplo, Google SecOps).
    • URL: Ingresa el <ENDPOINT_URL> del extremo de API de Google SecOps.

    • Eventos: Selecciona los eventos de Artifactory que deben activar el webhook y elige los eventos relevantes para tus necesidades de supervisión de seguridad (por ejemplo, implementado, descargado, borrado).

    • Dominio: Si usas un repositorio virtual, selecciona el dominio relevante. De lo contrario, deja este campo como Cualquier dispositivo local.

    • Repositorio: Selecciona el repositorio específico o déjalo como Cualquier remoto o Cualquier local, según tus requisitos.

  5. Haz clic en Probar para enviar un evento de prueba a Google SecOps.

  6. Haz clic en Guardar.

Tabla de asignación de UDM

Campo de registro Asignación de UDM Lógica
acción read_only_udm.metadata.product_event_type El valor de action del registro sin procesar se convierte a minúsculas y se asigna.
datetime read_only_udm.metadata.event_timestamp El campo datetime del registro sin procesar se analiza y se convierte en una marca de tiempo.
hostname read_only_udm.principal.hostname Se asigna directamente desde el campo hostname del registro sin procesar.
id read_only_udm.metadata.product_log_id Se asigna directamente desde el campo id del registro sin procesar (de la carga útil de JSON).
ip read_only_udm.principal.ip Se asigna directamente desde el campo ip del registro sin procesar. Se codifica de forma fija en "USER_RESOURCE_ACCESS". Está codificado de forma fija en "JFROG_ARTIFACTORY". Se codifica de forma fija en "Artifactory". Está codificado de forma fija en "JFROG".
owner read_only_udm.principal.user.userid Se asigna si username no está presente en el registro sin procesar (de la carga útil JSON).
repo_name read_only_udm.target.resource.name Se asigna directamente desde el campo repo_name del registro sin procesar.
repo_type read_only_udm.target.resource.resource_subtype Se asigna directamente desde el campo repo_type del registro sin formato.
alcance read_only_udm.target.resource.name Se asigna directamente desde el campo scope del registro sin procesar (de la carga útil de JSON).
alcance read_only_udm.target.resource.resource_subtype Se codifica en "alcance" si alcance está presente en el registro sin procesar.
sequenceId read_only_udm.metadata.product_log_id Se quitan las comillas del campo sequenceId y, luego, se asignan.
asunto read_only_udm.about.labels.key Se codifica de forma fija en "subject" si subject está presente en el registro sin procesar.
asunto read_only_udm.about.labels.value Se asigna directamente desde el campo subject del registro sin procesar (de la carga útil de JSON).
type read_only_udm.metadata.product_event_type Se asigna directamente desde el campo type del registro sin procesar (de la carga útil de JSON).
usuario read_only_udm.principal.user.userid Se asigna directamente desde el campo user del registro sin procesar.
username read_only_udm.principal.user.userid Se asigna directamente desde el campo username del registro sin procesar (de la carga útil JSON).

Cambios

2024-09-23

  • Mejora:
  • Se agregó compatibilidad para analizar los registros sin analizar.
  • Se asignó "target_ip" a "target.ip" y "target.asset.ip".
  • Se asignó "desc" a "metadata.description".
  • Se asignó "method" a "network.http.method".
  • Se asignó "url" a "target.url".
  • Se asignó "prin_url" a "principal.url".
  • Se asignó "response_code" a "network.http.response_code".
  • Se asignó "RequestMethod" a "network.http.method".
  • Se asignó "RequestPath" a "target.url".
  • Se asignaron "DownstreamContentSize" y "DownstreamStatus" a "Additional.Fields".
  • Se asignó "ServiceAddr" a "principal.hostname" y "principal.port".
  • Se asignó "ClientAddr" a "target.ip" y "target.port".
  • Se asignó "user_agent" a "network.http.user_agent".
  • Se asignó "level" a "security_result.severity".
  • Se asignó "msg" a "security_result.description".
  • Se asignó "protocolo" a "network.application_protocol".

2023-08-25

  • Sin embargo, el analizador se creó recientemente.