Raccogliere gli audit log di CircleCI
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
- Vai a Impostazioni SIEM > Feed.
- Fai clic su Aggiungi nuovo.
- Nel campo Nome feed, inserisci un nome per il feed (ad esempio Log di CircleCI).
- Seleziona Webhook come Tipo di origine.
- Seleziona CircleCI come Tipo di log.
- Fai clic su Avanti.
- (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.
- Delimitatore di split: il delimitatore utilizzato per separare le righe di log, ad esempio
- Fai clic su Avanti.
- Controlla la configurazione del feed nella schermata Concludi e poi fai clic su Invia.
- Fai clic su Genera chiave segreta per generare una chiave segreta per autenticare questo feed.
- 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.
- Dalla scheda Dettagli, copia l'URL dell'endpoint del feed dal campo Informazioni endpoint. Devi specificare questo URL endpoint nell'applicazione client.
- Fai clic su Fine.
Crea una chiave API per il feed webhook
Vai alla console Google Cloud > Credenziali.
Fai clic su Crea credenziali e poi seleziona Chiave API.
Limita l'accesso della chiave API all'API Google Security Operations.
Specifica l'URL dell'endpoint
- Nell'applicazione client, specifica l'URL dell'endpoint HTTPS fornito nel feed webhook.
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.
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
- Accedi all'interfaccia web di CircleCI.
- Seleziona il progetto da cui vuoi importare i log.
- Fai clic su Impostazioni progetto.
- Seleziona Webhook.
- Fai clic su Aggiungi webhook.
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).
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.