Recoger registros de auditoría de CircleCI
Este analizador extrae campos de los registros de auditoría de CircleCI en formato CSV y JSON, y los transforma en el modelo de datos unificado (UDM). Gestiona ambos formatos, realiza transformaciones y enriquecimientos de datos, y asigna los campos extraídos a sus campos UDM correspondientes en el objeto event. Se centra en las acciones de los usuarios, el acceso a los recursos y los eventos de actualización, los clasifica y rellena los campos de UDM pertinentes, como principal, target, network y metadata.
Antes de empezar
Asegúrate de que cumples los siguientes requisitos previos:
- Instancia de Google SecOps.
- Acceso privilegiado a CircleCI.
Configurar 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 CircleCI).
- Selecciona Webhook como Tipo de fuente.
- Seleccione CircleCI 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, copia 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 = SECRET
Recomendació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 SecOps.SECRET
: la clave secreta que has generado para autenticar el feed.
Configurar un webhook en CircleCI
- Inicia sesión en la interfaz web de CircleCI.
- Selecciona el proyecto del que quieras ingerir los registros.
- Haz clic en Configuración del proyecto.
- Selecciona Webhooks.
- Haz clic en Añadir webhook.
Especifique los valores de los siguientes parámetros de entrada:
- Nombre del webhook: proporciona un nombre descriptivo (por ejemplo, Google SecOps).
- URL de endpoint: introduce el
<ENDPOINT_URL>
del endpoint de la API Google SecOps.
- Eventos: selecciona los eventos de CircleCI que deben activar la webhook (por ejemplo, workflow-completed para enviar datos después de que finalice un flujo de trabajo).
Haz clic en Guardar para crear el webhook.
Tabla de asignación de UDM
Campo de registro | Asignación de UDM | Lógica |
---|---|---|
account.id | read_only_udm.about.resource.attribute.labels.value | El valor de account.id del registro sin procesar se asigna al campo de UDM read_only_udm.about.resource.attribute.labels.value, donde la clave correspondiente es account_id. |
acción | read_only_udm.metadata.product_event_type | El valor de action del registro sin procesar se asigna al campo UDM read_only_udm.metadata.product_event_type. |
actor.id | read_only_udm.principal.user.product_object_id | El valor de actor.id del registro sin procesar se asigna al campo de UDM read_only_udm.principal.user.product_object_id. |
actor.name | read_only_udm.principal.user.userid | El prefijo "github: " se elimina del campo actor.name del registro sin procesar. El valor restante se asigna al campo de UDM read_only_udm.principal.user.userid. Si actor.name existe en el registro sin procesar, se asigna el valor USER_RESOURCE_UPDATE_CONTENT a read_only_udm.metadata.event_type. De lo contrario, se asigna USER_RESOURCE_ACCESS. |
id | read_only_udm.metadata.product_log_id | El valor de id del registro sin procesar se asigna al campo de UDM read_only_udm.metadata.product_log_id. El analizador asigna el valor CIRCLECI a read_only_udm.metadata.log_type. El analizador asigna el valor CIRCLECI a read_only_udm.metadata.product_name. El analizador asigna el valor CIRCLECI a read_only_udm.metadata.vendor_name. |
occurred_at | read_only_udm.metadata.event_timestamp | El valor de occurred_at del registro sin procesar se analiza como una marca de tiempo y se asigna al campo UDM read_only_udm.metadata.event_timestamp. |
organization.name | read_only_udm.target.administrative_domain | El prefijo "github: " se elimina del campo organization.name del registro sin procesar. El valor restante se asigna al campo UDM read_only_udm.target.administrative_domain. |
payload.job.id | read_only_udm.about.resource.attribute.labels.value | El valor de payload.job.id del registro sin procesar se asigna al campo de UDM read_only_udm.about.resource.attribute.labels.value, donde la clave correspondiente es job_id. |
payload.job.job_name | read_only_udm.about.resource.attribute.labels.value | El valor de payload.job.job_name del registro sin procesar se asigna al campo UDM read_only_udm.about.resource.attribute.labels.value, donde la clave correspondiente es job_name. |
payload.job.job_status | read_only_udm.about.resource.attribute.labels.value | El valor de payload.job.job_status del registro sin procesar se asigna al campo de UDM read_only_udm.about.resource.attribute.labels.value, donde la clave correspondiente es job_status. |
payload.workflow.id | read_only_udm.about.resource.attribute.labels.value | El valor de payload.workflow.id del registro sin procesar se asigna al campo de UDM read_only_udm.about.resource.attribute.labels.value, donde la clave correspondiente es workflow_id. |
request.id | read_only_udm.network.session_id | El valor de request.id del registro sin procesar se asigna al campo de UDM read_only_udm.network.session_id. |
scope.id | read_only_udm.about.resource.attribute.labels.value | El valor de scope.id del registro sin procesar se asigna al campo de UDM read_only_udm.about.resource.attribute.labels.value, donde la clave correspondiente es scope_id. El analizador asigna inicialmente el valor BLOCK a sec_action. Si el campo success del registro sin procesar es true, sec_action cambia a ALLOW. El valor de sec_action se asigna al campo UDM read_only_udm.security_result.action. |
target.id | read_only_udm.target.resource.product_object_id | El valor de target.id del registro sin procesar se asigna al campo de UDM read_only_udm.target.resource.product_object_id. |
target.name | read_only_udm.target.resource.name | El prefijo "github: " se elimina del campo target.name del registro sin procesar. El valor restante se asigna al campo de UDM read_only_udm.target.resource.name. El analizador asigna el valor STORAGE_OBJECT a read_only_udm.target.resource.resource_type. |
version | read_only_udm.target.resource.attribute.labels.value | El valor de version del registro sin procesar se convierte en una cadena y se asigna al campo UDM read_only_udm.target.resource.attribute.labels.value, donde la clave correspondiente es version. |
¿Necesitas más ayuda? Recibe respuestas de los miembros de la comunidad y de los profesionales de Google SecOps.