Raccogliere i log di Forseti Open Source

Supportato in:

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

  1. Vai alla console Google Cloud.
  2. Seleziona il tuo progetto o creane uno nuovo.
  3. Nel menu di navigazione, vai a Cloud Storage > Bucket.
  4. Fai clic su Crea bucket.
  5. 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
  6. 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.

  1. Connettiti alla VM server Forseti tramite SSH:

    gcloud compute ssh forseti-server-vm --project=YOUR_PROJECT_ID --zone=YOUR_ZONE
    

    Sostituisci YOUR_PROJECT_ID e YOUR_ZONE con i valori di deployment di Forseti.

  2. Apri il file di configurazione del server Forseti per la modifica:

    sudo nano /home/ubuntu/forseti-security/configs/forseti_conf_server.yaml
    

    Se 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.yaml
    
  3. Vai alla sezione notifier e individua la sottosezione resources.

  4. 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 includono iam_policy_violations, firewall_rule_violations, cloudsql_acl_violations, bucket_acl_violations, config_validator_violations, groups_settings_violations e altri.
    • should_notify: impostato su true per attivare le notifiche per questo tipo di risorsa.
    • data_format: il formato dei dati esportati. I valori validi sono csv o json. Il valore predefinito è csv.
    • gcs_path: il percorso Cloud Storage in cui verranno esportate le violazioni. Il percorso deve iniziare con gs:// e deve includere una barra finale.
  5. Salva il file di configurazione.

  6. 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.yaml
    
  7. Ricarica la configurazione del server Forseti:

    forseti server configuration reload
    
  8. Verifica 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

  1. Vai a Impostazioni SIEM > Feed.
  2. Fai clic su Aggiungi nuovo feed.
  3. Fai clic su Configura un singolo feed.
  4. Nel campo Nome feed, inserisci un nome per il feed (ad esempio, Forseti Violations).
  5. Seleziona Google Cloud Storage V2 come Tipo di origine.
  6. Seleziona Forseti Open Source come Tipo di log.

  7. Fai clic su Ottieni service account.

  8. Verrà visualizzata un'email univoca del service account, ad esempio:

    chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com
    
  9. Copia l'indirizzo email. Lo utilizzerai nel prossimo passaggio.

  10. Fai clic su Avanti.

  11. 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.
  12. Fai clic su Avanti.

  13. 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

  1. Vai a Cloud Storage > Bucket.
  2. Fai clic sul nome del bucket.
  3. Vai alla scheda Autorizzazioni.
  4. Fai clic su Concedi l'accesso.
  5. Fornisci i seguenti dettagli di configurazione:
    • Aggiungi entità: incolla l'email del service account Google SecOps.
    • Assegna i ruoli: seleziona Visualizzatore oggetti Storage.
  6. 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.