Raccogliere gli audit log di CircleCI

Supportato in:

Questo analizzatore sintattico estrae i campi dai log di controllo di CircleCI nei formati CSV e JSON, trasformandoli nell'Unified Data Model (UDM). Gestisce entrambi i formati, esegue trasformazioni e arricchimenti dei dati e mappa i campi estratti ai campi UDM corrispondenti all'interno dell'oggetto event. Si concentra sulle azioni utente, sull'accesso alle risorse e sugli eventi di aggiornamento, li classifica e compila i campi UDM pertinenti come principal, target, network e metadata.

Prima di iniziare

  • Assicurati di avere un'istanza Google SecOps.
  • Assicurati di disporre dell'accesso privilegiato a CircleCI.

Configura un feed in Google SecOps per importare i log di CircleCI

  1. Vai a Impostazioni SIEM > Feed.
  2. Fai clic su Aggiungi nuovo.
  3. Nel campo Nome feed, inserisci un nome per il feed (ad esempio Log di CircleCI).
  4. Seleziona Webhook come Tipo di origine.
  5. Seleziona CircleCI come Tipo di log.
  6. Fai clic su Avanti.
  7. (Facoltativo) Specifica i valori per i seguenti parametri di input:
    • Delimitatore di split: il delimitatore utilizzato per separare le righe di log, ad esempio \n.
    • Spazio dei nomi degli asset: lo spazio dei nomi degli asset.
    • Etichette di importazione: l'etichetta applicata agli eventi di questo feed.
  8. Fai clic su Avanti.
  9. Controlla la configurazione del feed nella schermata Concludi e poi fai clic su Invia.
  10. Fai clic su Genera chiave segreta per generare una chiave segreta per autenticare questo feed.
  11. Copia e memorizza la chiave segreta. Non potrai più visualizzare questa chiave segreta. Se necessario, puoi rigenerare una nuova chiave segreta, ma questa azione rende obsoleta la chiave segreta precedente.
  12. Dalla scheda Dettagli, copia l'URL dell'endpoint del feed dal campo Informazioni endpoint. Devi specificare questo URL endpoint nell'applicazione client.
  13. Fai clic su Fine.

Crea una chiave API per il feed webhook

  1. Vai alla console Google Cloud > Credenziali.

    Vai a credenziali

  2. Fai clic su Crea credenziali e poi seleziona Chiave API.

  3. Limita l'accesso della chiave API all'API Google Security Operations.

Specifica l'URL dell'endpoint

  1. Nell'applicazione client, specifica l'URL dell'endpoint HTTPS fornito nel feed webhook.
  2. Attiva l'autenticazione specificando la chiave API e la chiave segreta nell'intestazione personalizzata nel seguente formato:

    X-goog-api-key = API_KEY
    X-Webhook-Access-Key = SECRET
    

    Consiglio: specifica la chiave API come intestazione anziché nell'URL.

  3. Se il client webhook non supporta le intestazioni personalizzate, puoi specificare la chiave API e la chiave segreta utilizzando parametri di ricerca nel seguente formato:

    ENDPOINT_URL?key=API_KEY&secret=SECRET
    

    Sostituisci quanto segue:

    • ENDPOINT_URL: l'URL dell'endpoint del feed.
    • API_KEY: la chiave API per l'autenticazione in Google SecOps.
    • SECRET: la chiave segreta che hai generato per autenticare il feed.

Configurazione di un webhook in CircleCI

  1. Accedi all'interfaccia web di CircleCI.
  2. Seleziona il progetto da cui vuoi importare i log.
  3. Fai clic su Impostazioni progetto.
  4. Seleziona Webhook.
  5. Fai clic su Aggiungi webhook.
  6. Specifica i valori per i seguenti parametri di input:

    • Nome webhook: fornisci un nome descrittivo (ad esempio Google SecOps).
    • Endpoint URL: inserisci il <ENDPOINT_URL> dell'endpoint API Google SecOps.
    • Eventi:seleziona gli eventi CircleCI che devono attivare l'webhook (ad esempio, seleziona workflow-completed per inviare i dati al termine di un flusso di lavoro).
  7. Fai clic su Salva per creare l'webhook.

Tabella di mappatura UDM

Campo log Mappatura UDM Logica
account.id read_only_udm.about.resource.attribute.labels.value Il valore di account.id dal log non elaborato viene assegnato al campo UDM read_only_udm.about.resource.attribute.labels.value, dove la chiave corrispondente è account_id.
azione read_only_udm.metadata.product_event_type Il valore di action dal log non elaborato viene assegnato al campo UDM read_only_udm.metadata.product_event_type.
actor.id read_only_udm.principal.user.product_object_id Il valore di actor.id dal log non elaborato viene assegnato al campo UDM read_only_udm.principal.user.product_object_id.
actor.name read_only_udm.principal.user.userid Il prefisso "github: " viene rimosso dal campo actor.name nel log non elaborato. Il valore rimanente viene assegnato al campo UDM read_only_udm.principal.user.userid. Se actor.name esiste nel log non elaborato, il valore USER_RESOURCE_UPDATE_CONTENT viene assegnato a read_only_udm.metadata.event_type. In caso contrario, viene assegnato USER_RESOURCE_ACCESS.
id read_only_udm.metadata.product_log_id Il valore di id dal log non elaborato viene assegnato al campo UDM read_only_udm.metadata.product_log_id. Il parser imposta read_only_udm.metadata.log_type su CIRCLECI. Il parser imposta read_only_udm.metadata.product_name su CIRCLECI. Il parser imposta read_only_udm.metadata.vendor_name su CIRCLECI.
occurred_at read_only_udm.metadata.event_timestamp Il valore di occurred_at dal log non elaborato viene analizzato come timestamp e assegnato al campo UDM read_only_udm.metadata.event_timestamp.
organization.name read_only_udm.target.administrative_domain Il prefisso "github: " viene rimosso dal campo organization.name nel log non elaborato. Il valore rimanente viene assegnato al campo UDM read_only_udm.target.administrative_domain.
payload.job.id read_only_udm.about.resource.attribute.labels.value Il valore di payload.job.id dal log non elaborato viene assegnato al campo UDM read_only_udm.about.resource.attribute.labels.value, dove la chiave corrispondente è job_id.
payload.job.job_name read_only_udm.about.resource.attribute.labels.value Il valore di payload.job.job_name dal log non elaborato viene assegnato al campo UDM read_only_udm.about.resource.attribute.labels.value, dove la chiave corrispondente è job_name.
payload.job.job_status read_only_udm.about.resource.attribute.labels.value Il valore di payload.job.job_status dal log non elaborato viene assegnato al campo UDM read_only_udm.about.resource.attribute.labels.value, dove la chiave corrispondente è job_status.
payload.workflow.id read_only_udm.about.resource.attribute.labels.value Il valore di payload.workflow.id dal log non elaborato viene assegnato al campo UDM read_only_udm.about.resource.attribute.labels.value, dove la chiave corrispondente è workflow_id.
request.id read_only_udm.network.session_id Il valore di request.id dal log non elaborato viene assegnato al campo UDM read_only_udm.network.session_id.
scope.id read_only_udm.about.resource.attribute.labels.value Il valore di scope.id dal log non elaborato viene assegnato al campo UDM read_only_udm.about.resource.attribute.labels.value, dove la chiave corrispondente è scope_id. Il parser imposta inizialmente sec_action su BLOCK. Se il campo success nel log non elaborato è true, sec_action viene modificato in ALLOW. Il valore di sec_action viene quindi assegnato al campo UDM read_only_udm.security_result.action.
target.id read_only_udm.target.resource.product_object_id Il valore di target.id dal log non elaborato viene assegnato al campo UDM read_only_udm.target.resource.product_object_id.
target.name read_only_udm.target.resource.name Il prefisso "github: " viene rimosso dal campo target.name nel log non elaborato. Il valore rimanente viene assegnato al campo UDM read_only_udm.target.resource.name. Il parser imposta read_only_udm.target.resource.resource_type su STORAGE_OBJECT.
version read_only_udm.target.resource.attribute.labels.value Il valore di version dal log non elaborato viene convertito in una stringa e assegnato al campo UDM read_only_udm.target.resource.attribute.labels.value, dove la chiave corrispondente è version.

Modifiche

2023-03-09

  • Parser appena creato.