Raccogliere i log di Forseti Open Source
Questo documento spiega come importare i log di Forseti Open Source in Google Security Operations utilizzando Google Cloud Storage V2.
Forseti Security è una raccolta di strumenti open source basati sulla community per migliorare la sicurezza degli ambienti Google Cloud Platform. Forseti acquisisce snapshot dell'inventario delle risorse GCP con una cadenza ricorrente, analizza le risorse per garantire che i controlli dell'accesso siano impostati come previsto e fornisce visibilità sui criteri Cloud IAM.
Prima di iniziare
Assicurati di disporre dei seguenti prerequisiti:
- Istanza Google SecOps.
- Progetto GCP con l'API Cloud Storage abilitata.
- Autorizzazioni per creare e gestire bucket GCS.
- Autorizzazioni per gestire le policy IAM nei bucket GCS.
- Un deployment di Forseti Security esistente (ad esempio, di cui è stato eseguito il deployment utilizzando il modulo Terraform di Forseti su Google Compute Engine).
- Accesso al file di configurazione del server Forseti (
forseti_conf_server.yaml).
Creazione di un bucket Google Cloud Storage
Utilizzo di Google Cloud Console
- Vai alla console Google Cloud.
- Seleziona il tuo progetto o creane uno nuovo.
- Nel menu di navigazione, vai a Cloud Storage > Bucket.
- Fai clic su Crea bucket.
Fornisci i seguenti dettagli di configurazione:
Impostazione Valore Assegna un nome al bucket Inserisci un nome univoco globale (ad esempio forseti-violations-export).Tipo di località Scegli in base alle tue esigenze (regione singola, doppia regione, più regioni) Località Seleziona la posizione (ad esempio, us-central1).Classe di archiviazione Standard (consigliato per i log a cui si accede di frequente) Controllo dell'accesso Uniforme (consigliato) Strumenti di protezione (Facoltativo) Attiva il controllo delle versioni degli oggetti o la policy di conservazione Fai clic su Crea.
Utilizzo dello strumento a riga di comando gcloud
In alternativa, crea un bucket utilizzando il comando gcloud:
gcloud storage buckets create gs://forseti-violations-export \
--location=us-central1 \
--default-storage-class=STANDARD
Sostituisci:
forseti-violations-export: il nome del bucket che preferisci (univoco a livello globale).us-central1: la regione che preferisci (ad esempio,us-central1,europe-west1).
Configura Forseti Security per esportare le violazioni in GCS
Forseti Security utilizza una configurazione di notifica nel file forseti_conf_server.yaml per esportare le violazioni dello scanner in Google Cloud Storage.
Connettiti alla VM server Forseti tramite SSH:
gcloud compute ssh forseti-server-vm --project=YOUR_PROJECT_ID --zone=YOUR_ZONESostituisci
YOUR_PROJECT_IDeYOUR_ZONEcon i valori di deployment di Forseti.Apri il file di configurazione del server Forseti per la modifica:
sudo nano /home/ubuntu/forseti-security/configs/forseti_conf_server.yamlSe il deployment di Forseti utilizza una configurazione basata su GCS, scarica il file dal bucket del server Forseti:
gsutil cp gs://YOUR_FORSETI_SERVER_BUCKET/configs/forseti_conf_server.yaml ~/forseti_conf_server.yamlVai alla sezione
notifiere individua la sottosezioneresources.Per ogni tipo di risorsa di violazione che vuoi esportare, configura il notifier
gcs_violations. Aggiungi o aggiorna la configurazione nel seguente modo:notifier: resources: - resource: iam_policy_violations should_notify: true notifiers: - name: gcs_violations configuration: data_format: csv gcs_path: gs://forseti-violations-export/violations/ - resource: firewall_rule_violations should_notify: true notifiers: - name: gcs_violations configuration: data_format: csv gcs_path: gs://forseti-violations-export/violations/ - resource: cloudsql_acl_violations should_notify: true notifiers: - name: gcs_violations configuration: data_format: csv gcs_path: gs://forseti-violations-export/violations/ - resource: bucket_acl_violations should_notify: true notifiers: - name: gcs_violations configuration: data_format: csv gcs_path: gs://forseti-violations-export/violations/ - resource: config_validator_violations should_notify: true notifiers: - name: gcs_violations configuration: data_format: csv gcs_path: gs://forseti-violations-export/violations/Sostituisci:
forseti-violations-export: il nome del bucket GCS creato nel passaggio precedente.violations/: Percorso del prefisso facoltativo per organizzare i file di violazione.
Parametri di configurazione:
resource: Il tipo di risorsa di violazione. I tipi di risorse disponibili dipendono dagli scanner Forseti abilitati nella tua implementazione. I tipi comuni includonoiam_policy_violations,firewall_rule_violations,cloudsql_acl_violations,bucket_acl_violations,config_validator_violations,groups_settings_violationse altri.should_notify: impostato sutrueper attivare le notifiche per questo tipo di risorsa.data_format: il formato dei dati esportati. I valori validi sonocsvojson. Il valore predefinito ècsv.gcs_path: il percorso Cloud Storage in cui verranno esportate le violazioni. Il percorso deve iniziare congs://e deve includere una barra finale.
Salva il file di configurazione.
Se hai scaricato la configurazione da GCS, carica il file aggiornato nel bucket del server Forseti:
gsutil cp ~/forseti_conf_server.yaml gs://YOUR_FORSETI_SERVER_BUCKET/configs/forseti_conf_server.yamlRicarica la configurazione del server Forseti:
forseti server configuration reloadVerifica che la configurazione sia stata caricata correttamente:
forseti server configuration get | grep gcs_violations
Recuperare il service account Google SecOps
Google SecOps utilizza un service account univoco per leggere i dati dal tuo bucket GCS. Devi concedere a questo service account l'accesso al tuo bucket.
Configura un feed in Google SecOps per importare i log open source di Forseti
- Vai a Impostazioni SIEM > Feed.
- Fai clic su Aggiungi nuovo feed.
- Fai clic su Configura un singolo feed.
- Nel campo Nome feed, inserisci un nome per il feed (ad esempio,
Forseti Violations). - Seleziona Google Cloud Storage V2 come Tipo di origine.
Seleziona Forseti Open Source come Tipo di log.
Fai clic su Ottieni service account.
Verrà visualizzata un'email univoca del service account, ad esempio:
chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.comCopia l'indirizzo email. Lo utilizzerai nel prossimo passaggio.
Fai clic su Avanti.
Specifica i valori per i seguenti parametri di input:
- URL del bucket di archiviazione: inserisci l'URI del bucket GCS con il percorso del prefisso:
gs://forseti-violations-export/violations/- Sostituisci:
forseti-violations-export: il nome del bucket GCS.violations/: (Facoltativo) prefisso/percorso della cartella in cui vengono archiviati i log (lascia vuoto per la radice).
Opzione di eliminazione dell'origine: seleziona l'opzione di eliminazione in base alle tue preferenze:
- Mai: non elimina mai i file dopo i trasferimenti (opzione consigliata per i test).
- Elimina file trasferiti: elimina i file dopo il trasferimento riuscito.
- Elimina file trasferiti e directory vuote: elimina i file e le directory vuote dopo il trasferimento riuscito.
- Età massima del file: includi i file modificati nell'ultimo numero di giorni. Il valore predefinito è 180 giorni.
- Spazio dei nomi dell'asset: lo spazio dei nomi dell'asset.
- Etichette di importazione: l'etichetta da applicare agli eventi di questo feed.
Fai clic su Avanti.
Controlla la nuova configurazione del feed nella schermata Finalizza e poi fai clic su Invia.
Concedi le autorizzazioni IAM al service account Google SecOps
Il service account Google SecOps deve avere il ruolo Visualizzatore oggetti Storage nel bucket GCS.
Utilizzo di Google Cloud Console
- Vai a Cloud Storage > Bucket.
- Fai clic sul nome del bucket.
- Vai alla scheda Autorizzazioni.
- Fai clic su Concedi l'accesso.
- Fornisci i seguenti dettagli di configurazione:
- Aggiungi entità: incolla l'email del service account Google SecOps.
- Assegna i ruoli: seleziona Visualizzatore oggetti Storage.
- Fai clic su Salva.
Utilizzo dello strumento a riga di comando gcloud
In alternativa, concedi le autorizzazioni utilizzando il comando gcloud:
gcloud storage buckets add-iam-policy-binding gs://forseti-violations-export \
--member="serviceAccount:chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com" \
--role="roles/storage.objectViewer"
Sostituisci:
forseti-violations-export: il nome del bucket.chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com: l'email del account di servizio Google SecOps.
Utilizzo dello strumento a riga di comando gsutil (legacy)
gsutil iam ch serviceAccount:chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com:objectViewer \
gs://forseti-violations-export
Verifica le autorizzazioni
Per verificare che le autorizzazioni siano state concesse correttamente:
gcloud storage buckets get-iam-policy gs://forseti-violations-export \
--flatten="bindings[].members" \
--filter="bindings.role:roles/storage.objectViewer"
Nell'output dovrebbe essere visualizzato l'indirizzo email del account di servizio Google SecOps.
Tabella di mappatura UDM
| Campo log | Mappatura UDM | Logic |
|---|---|---|
| data.resource_data.instanceGroupUrls | about | Unito dall'array di instanceGroupUrls |
| data.resource_data.nodePools.*.statusMessage | metadata.description | Valore ottenuto da nodePool.statusMessage |
| data.resource_type | metadata.event_type | Impostato su RESOURCE_PERMISSIONS_CHANGE per kms_cryptokey/serviceaccount_key, RESOURCE_DELETION per firewall, STATUS_HEARTBEAT per kubernetes_cluster, altrimenti GENERIC_EVENT |
| data.scanner_index_id | metadata.product_log_id | Valore copiato direttamente, convertito in stringa |
| metadata.product_name | Impostato su "FORSETI SECURITY" | |
| metadata.vendor_name | Impostato su "FORSETI" | |
| data.resource_data.direction | network.direction | Imposta IN ENTRATA se la direzione è INGRESSO |
| data.resource_data.endpoint | principal.ip | Valore copiato direttamente |
| data.resource_data.nodeConfig.oauthScopes.0 | principal.url | Valore copiato direttamente |
| data.full_name, serviceAccount | principal.user.userid | Estratto da data.full_name utilizzando grok o impostato su serviceAccount se non è vuoto |
| data.violation_data.protection_level, data.violation_data.purpose, data.violation_data.project_id, data.violation_data.node_pool_name, data.violation_data.violation_reason | security_result.detection_fields | Uniti da più coppie chiave-valore |
| data.violation_type | security_result.category | Impostato su POLICY_VIOLATION se FIREWALL_BLACKLIST_VIOLATION, UNKNOWN_CATEGORY se KE_VERSION_VIOLATION, altrimenti ACL_VIOLATION |
| data.rule_name | security_result.rule_name | Valore copiato direttamente |
| data.violation_type | security_result.summary | Valore copiato direttamente |
| data.resource_data.zone | target.asset.attribute.cloud.availability_zone | Valore copiato direttamente |
| target.asset.attribute.cloud.environment | Impostato su "GOOGLE_CLOUD_PLATFORM" | |
| data.full_name | target.asset.attribute.cloud.project.id | Estratto da data.full_name utilizzando grok |
| data.resource_data.subnetwork | target.asset.attribute.cloud.vpc.name | Valore copiato direttamente |
| data.resource_data.nodeConfig.machineType | target.asset.hardware | Unito da machineType e dalla piattaforma CPU costante |
| data.resource_data.privateClusterConfig.privateEndpoint | target.ip | Valore copiato direttamente |
| data.resource_data.versionTemplate.algorithm, data.resource_data.key_algorithm | target.labels | Coppia chiave-valore unita per l'algoritmo, se presente |
| data.resource_data.location | target.location.name | Valore copiato direttamente |
| data.resource_name | target.resource.name | Valore copiato direttamente |
| data.resource_id | target.resource.product_object_id | Valore copiato direttamente se diverso da resource_name |
| data.resource_type | target.resource.resource_subtype | Imposta su "gke" se resource_type è kubernetes_cluster |
| data.resource_type | target.resource.resource_type | Mappato a un tipo specifico in base a resource_type originale |
Hai bisogno di ulteriore assistenza? Ricevi risposte dai membri della community e dai professionisti di Google SecOps.