Recopila registros de JFrog Artifactory
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
- Ve a Configuración de SIEM > Feeds.
- Haz clic en Agregar nueva.
- En el campo Nombre del feed, ingresa un nombre para el feed (por ejemplo, Registros de JFrog Artifactory).
- Selecciona Webhook como el Tipo de origen.
- Selecciona JFrog Artifactory como el Tipo de registro.
- Haz clic en Siguiente.
- 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.
- Delimitador de división: Es el delimitador que se usa para separar las líneas de registro, como
- Haz clic en Siguiente.
- Revisa la configuración del feed en la pantalla Finalizar y, luego, haz clic en Enviar.
- Haz clic en Generate Secret Key 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 volver a generar 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.
- Haz clic en Listo.
Crea una clave de API para el feed de webhook
Ve a consola de Google Cloud > Credenciales.
Haz clic en Crear credenciales y selecciona Clave de API.
Restringe el acceso de la clave de API a la API de Google Security Operations.
Especifica la URL del extremo
- En tu aplicación cliente, especifica la URL del extremo HTTPS que se proporciona en el feed de webhook.
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.
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
- Accede a la instancia de JFrog con tus credenciales de administrador.
- Ve a Administración > General > Webhooks.
- Haz clic en + Webhook nuevo.
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.
Haz clic en Probar para enviar un evento de prueba a Google SecOps.
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.