Raccogliere i log di controllo di CircleCI
Questo parser estrae i campi dai log di controllo di CircleCI nei formati CSV e JSON, trasformandoli nel modello UDM (Unified Data Model). Gestisce entrambi i formati, esegue trasformazioni e arricchimenti dei dati e mappa i campi estratti ai campi UDM corrispondenti all'interno dell'oggetto evento. Si concentra sulle azioni degli utenti, sull'accesso alle risorse e sugli eventi di aggiornamento, classificandoli e compilando i campi UDM pertinenti come principal, target, network e metadata.
Prima di iniziare
Assicurati di disporre dei seguenti prerequisiti:
- Istanza Google SecOps.
- Accesso con privilegi a CircleCI.
Configurare i feed
Per configurare un feed:
- Vai a Impostazioni SIEM > Feed.
- Fai clic su Aggiungi nuovo feed.
- Nella pagina successiva, fai clic su Configura un singolo feed.
- 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 suddivisione: il delimitatore utilizzato per separare le righe di log, ad esempio
\n
. - Spazio dei nomi dell'asset: lo spazio dei nomi dell'asset.
- Etichette di importazione: l'etichetta applicata agli eventi di questo feed.
- Delimitatore di suddivisione: il delimitatore utilizzato per separare le righe di log, ad esempio
- Fai clic su Avanti.
- Rivedi la configurazione del feed nella schermata Finalizza 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 puoi visualizzare di nuovo questa chiave segreta. Se necessario, puoi rigenerare una nuova chiave segreta, ma questa azione rende obsoleta la chiave segreta precedente.
- Nella scheda Dettagli, copia l'URL dell'endpoint del feed dal campo Informazioni sull'endpoint. Devi specificare questo URL dell'endpoint nella tua applicazione client.
- Fai clic su Fine.
Crea una chiave API per il feed webhook
Vai alla consoleGoogle 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
- Nella tua applicazione client, specifica l'URL dell'endpoint HTTPS fornito nel feed webhook.
Attiva l'autenticazione specificando la chiave API e la chiave segreta come parte dell'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 a 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 (URL endpoint): inserisci
<ENDPOINT_URL>
dell'endpoint API Google SecOps.
- Eventi:seleziona gli eventi CircleCI che devono attivare il webhook (ad esempio, seleziona workflow-completed per inviare i dati al termine di un flusso di lavoro).
Fai clic su Salva per creare il webhook.
Tabella di mappatura UDM
Campo log | Mappatura UDM | Logic |
---|---|---|
account.id | read_only_udm.about.resource.attribute.labels.value | Il valore di account.id del 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 del 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 del 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 del 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 del 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 del log non elaborato viene assegnato al campo UDM read_only_udm.about.resource.attribute.labels.value in cui la chiave corrispondente è job_id. |
payload.job.job_name | read_only_udm.about.resource.attribute.labels.value | Il valore di payload.job.job_name del log non elaborato viene assegnato al campo UDM read_only_udm.about.resource.attribute.labels.value in cui la chiave corrispondente è job_name. |
payload.job.job_status | read_only_udm.about.resource.attribute.labels.value | Il valore di payload.job.job_status del 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 del log non elaborato viene assegnato al campo UDM read_only_udm.about.resource.attribute.labels.value in cui la chiave corrispondente è workflow_id. |
request.id | read_only_udm.network.session_id | Il valore di request.id del 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 del log non elaborato viene assegnato al campo UDM read_only_udm.about.resource.attribute.labels.value in cui la chiave corrispondente è scope_id. Il parser inizialmente imposta 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 del 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 del 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. |
Hai bisogno di ulteriore assistenza? Ricevi risposte dai membri della community e dai professionisti di Google SecOps.