Recopila registros de auditoría de CircleCI

Compatible con:

Este analizador extrae campos de los registros de auditoría de CircleCI en formatos CSV y JSON, y los transforma en el modelo de datos unificado (UDM). Controla ambos formatos, realiza transformaciones y enriquecimientos de datos, y asigna los campos extraídos a sus campos de UDM correspondientes dentro del objeto event. Se enfoca en las acciones del usuario, el acceso a los recursos y los eventos de actualización, los clasifica y completa los campos relevantes de la AUA, como principal, target, network y metadata.

Antes de comenzar

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

Configura un feed en Google SecOps para transferir los registros de CircleCI

  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 CircleCI).
  4. Selecciona Webhook como el Tipo de origen.
  5. Selecciona CircleCI 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.

Cómo configurar un webhook en CircleCI

  1. Accede a la interfaz web de CircleCI.
  2. Selecciona el proyecto del que deseas transferir los registros.
  3. Haz clic en Configuración del proyecto.
  4. Selecciona Webhooks.
  5. Haz clic en Agregar webhook.
  6. Especifica valores para los siguientes parámetros de entrada:

    • Nombre del webhook: Proporciona un nombre descriptivo (por ejemplo, Google SecOps).
    • URL del extremo: Ingresa el <ENDPOINT_URL> del extremo de API de Google SecOps.
    • Eventos: Selecciona los eventos de CircleCI que deben activar el webhook (por ejemplo, selecciona 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 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 de la AUA 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 la AUA read_only_udm.principal.user.product_object_id.
actor.name read_only_udm.principal.user.userid Se quita el prefijo "github: " del campo actor.name en el registro sin procesar. El valor restante se asigna al campo de la AUA read_only_udm.principal.user.userid. Si actor.name existe en el registro sin procesar, el valor USER_RESOURCE_UPDATE_CONTENT se asigna 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 la AUA read_only_udm.metadata.product_log_id. El analizador establece read_only_udm.metadata.log_type en CIRCLECI. El analizador establece read_only_udm.metadata.product_name en CIRCLECI. El analizador establece read_only_udm.metadata.vendor_name en CIRCLECI.
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 de la AUA read_only_udm.metadata.event_timestamp.
organization.name read_only_udm.target.administrative_domain Se quita el prefijo "github: " del campo organization.name en el registro sin procesar. El valor restante se asigna al campo de la 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 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 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 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 la AUA 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 la AUA read_only_udm.about.resource.attribute.labels.value, donde la clave correspondiente es scope_id. Inicialmente, el analizador establece sec_action en BLOCK. Si el campo success del registro sin procesar es verdadero, sec_action cambia a ALLOW. Luego, el valor de sec_action se asigna al campo de la AUA 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 la AUA read_only_udm.target.resource.product_object_id.
target.name read_only_udm.target.resource.name Se quita el prefijo "github: " del campo target.name en el registro sin procesar. El valor restante se asigna al campo de la UDM read_only_udm.target.resource.name. El analizador establece read_only_udm.target.resource.resource_type en STORAGE_OBJECT.
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 de la AUA read_only_udm.target.resource.attribute.labels.value, donde la clave correspondiente es version.

Cambios

2023-03-09

  • Sin embargo, el analizador se creó recientemente.