Recoger registros de auditoría de CircleCI

Disponible en:

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:

  1. Ve a Configuración de SIEM > Feeds.
  2. Haz clic en Añadir feed.
  3. En la página siguiente, haga clic en Configurar un solo feed.
  4. En el campo Nombre del feed, introduce un nombre para el feed (por ejemplo, Registros de CircleCI).
  5. Selecciona Webhook como Tipo de fuente.
  6. Seleccione CircleCI como Tipo de registro.
  7. Haz clic en Siguiente.
  8. 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.
  9. Haz clic en Siguiente.
  10. Revise la configuración del feed en la pantalla Finalizar y, a continuación, haga clic en Enviar.
  11. Haz clic en Generar clave secreta para generar una clave secreta que autentique este feed.
  12. 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.
  13. 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.
  14. Haz clic en Listo.

Crear una clave de API para la feed de webhook

  1. Ve a la Google Cloud consola > Credenciales.

    Ir a Credenciales

  2. Haz clic en Crear credenciales y, a continuación, selecciona Clave de API.

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

Especificar la URL del endpoint

  1. En tu aplicación cliente, especifica la URL del endpoint HTTPS proporcionada 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 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 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

  1. Inicia sesión en la interfaz web de CircleCI.
  2. Selecciona el proyecto del que quieras ingerir los registros.
  3. Haz clic en Configuración del proyecto.
  4. Selecciona Webhooks.
  5. Haz clic en Añadir webhook.
  6. 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).
  7. 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.