Raccogli e instrada i log a livello di organizzazione alle destinazioni supportate

Questo documento descrive come creare sink aggregati. Per informazioni sulla gestione dei sink esistenti, consulta Eseguire il routing dei log alle destinazioni supportate: gestire i sink.

Panoramica

I sink aggregati combinano e instradano le voci di log dalle risorse Google Cloud contenute in un'organizzazione o una cartella. Ad esempio, puoi aggregare e indirizzare le voci degli audit log da tutte le cartelle contenute da un'organizzazione a un bucket Cloud Storage.

Senza la funzionalità dei sink aggregati, i sink sono limitati alle voci di log di routing della risorsa esatta in cui è stato creato: un progetto, un'organizzazione, una cartella o un account di fatturazione Google Cloud.

Puoi creare sink aggregati per cartelle e organizzazioni Google Cloud. Poiché né i progetti Google Cloud né gli account di fatturazione contengono risorse figlio, non puoi creare sink aggregati per queste risorse.

Destinazioni supportate

Puoi utilizzare i sink aggregati per eseguire il routing dei log all'interno o tra le stesse organizzazioni e cartelle verso le seguenti destinazioni:

  • Bucket di log di Cloud Logging: fornisce spazio di archiviazione in Cloud Logging. Un bucket di log può archiviare i log ricevuti da più progetti Google Cloud. Per combinare i dati di Cloud Logging con altri dati, esegui l'upgrade di un bucket di log per utilizzare Analisi dei log, quindi crea un set di dati BigQuery collegato. Per informazioni sulla visualizzazione dei log archiviati nei bucket di log, vedi Eseguire query e visualizzare una panoramica dei log e Visualizzare i log con routing a bucket Cloud Logging.
  • Progetti Google Cloud: esegui il routing delle voci di log a un altro progetto Google Cloud. Quando esegui il routing dei log su un altro progetto Google Cloud, il router dei log del progetto di destinazione riceve i log e li elabora. I sink nel progetto di destinazione determinano il modo in cui vengono indirizzate le voci di log ricevute. Le voci di log instradate a un progetto Google Cloud diverso dai bucket di log non possono essere analizzate da Error Reporting.
  • Argomenti Pub/Sub: fornisce supporto per integrazioni di terze parti, come Splunk. Le voci dei log vengono formattate in JSON e quindi instradate a un argomento Pub/Sub. Per informazioni sulla visualizzazione dei log con routing a Pub/Sub, consulta Visualizzare i log con routing a Pub/Sub.
  • Set di dati BigQuery: fornisce l'archiviazione delle voci di log nei set di dati BigQuery. Puoi utilizzare le funzionalità di analisi dei big data sui log archiviati. Per combinare i dati di Cloud Logging con altre origini dati, ti consigliamo di eseguire l'upgrade dei bucket di log in modo da utilizzare l'analisi dei log, per poi creare un set di dati BigQuery collegato. Per informazioni sulla visualizzazione dei log con routing a BigQuery, consulta Visualizzare i log con routing a BigQuery.
  • Bucket Cloud Storage: fornisce l'archiviazione dei dati dei log in Cloud Storage. Le voci dei log vengono archiviate come file JSON. Per informazioni sulla visualizzazione dei log instradati a Cloud Storage, consulta Visualizzare i log con routing a Cloud Storage.

Sink aggregati e Controlli di servizio VPC

Quando utilizzi sink aggregati e Controlli di servizio VPC si applicano le seguenti limitazioni:

  • I sink aggregati possono accedere ai dati dei progetti all'interno di un perimetro di servizio. Per impedire ai sink aggregati di accedere ai dati all'interno di un perimetro, consigliamo di utilizzare IAM per gestire le autorizzazioni di Logging.

  • Controlli di servizio VPC non supporta l'aggiunta di risorse dell'organizzazione o di cartelle ai perimetri di servizio. Pertanto, non puoi utilizzare Controlli di servizio VPC per proteggere i log a livello di cartella e organizzazione, inclusi i log aggregati. Per gestire le autorizzazioni di Logging a livello di cartella o organizzazione, consigliamo di utilizzare IAM.

  • Se esegui il routing dei log utilizzando un sink a livello di cartella o organizzazione su una risorsa protetta da un perimetro di servizio, devi aggiungere una regola in entrata al perimetro di servizio. La regola in entrata deve consentire l'accesso alla risorsa dall'account di servizio utilizzato dal sink aggregato. Per ulteriori informazioni, consulta le seguenti pagine:

  • Quando specifichi un criterio in entrata o in uscita per un perimetro di servizio, non puoi utilizzare ANY_SERVICE_ACCOUNT e ANY_USER_ACCOUNT come tipo di identità quando utilizzi un sink di log per instradare i log alle risorse Cloud Storage. Tuttavia, puoi utilizzare ANY_IDENTITY come tipo di identità.

Prima di iniziare

Prima di creare un sink, verifica quanto segue:

  • Disponi di una cartella o un'organizzazione Google Cloud con log che puoi visualizzare in Esplora log.

  • Devi disporre di uno dei seguenti ruoli IAM per l'organizzazione o la cartella Google Cloud da cui esegui il routing dei log.

    • Proprietario (roles/owner)
    • Amministratore Logging (roles/logging.admin)
    • Writer configurazione log (roles/logging.configWriter)

    Le autorizzazioni contenute in questi ruoli consentono di creare, eliminare o modificare i sink. Per informazioni sull'impostazione dei ruoli IAM, consulta la guida al controllo dell'accesso di Logging.

  • Hai una risorsa in una destinazione supportata o puoi crearne una.

    La destinazione di routing deve essere creata prima del sink tramite Google Cloud CLI, la console Google Cloud o le API Google Cloud. Puoi creare la destinazione in qualsiasi progetto Google Cloud in qualsiasi organizzazione, ma devi assicurarti che l'account di servizio del sink disponga delle autorizzazioni per scrivere nella destinazione.

Crea un sink aggregato

Per utilizzare i sink aggregati, crea un sink in un'organizzazione o una cartella di Google Cloud e imposta il parametro includeChildren del sink su True. Quando imposti il parametro includeChildren, il sink può eseguire il routing delle voci di log dall'organizzazione o dalla cartella, oltre che (in modo ricorsivo) da qualsiasi cartella contenuta, account di fatturazione o progetto Google Cloud.

Per specificare le voci di log che vuoi indirizzare alla tua destinazione, imposta i filtri di inclusione ed esclusione del sink.

Puoi creare fino a 200 sink per cartella o organizzazione.

Per creare un sink aggregato per la cartella o l'organizzazione:

Console

  1. Nel pannello di navigazione della console Google Cloud, seleziona Logging, quindi Router dei log:

    Vai a Router dei log

  2. Seleziona una cartella o un'organizzazione esistente.

  3. Seleziona Crea sink.

  4. Nel riquadro Dettagli sink, inserisci i seguenti dettagli:

    • Nome sink: fornisci un identificatore per il sink. Tieni presente che, dopo aver creato il sink, non puoi rinominare quest'ultimo, ma puoi eliminarlo e crearne uno nuovo.

    • Descrizione sink (facoltativa): descrivi lo scopo o il caso d'uso del sink.

  5. Nel riquadro Destinazione sink, seleziona il servizio sink e la destinazione:

    • Seleziona servizio sink: seleziona il servizio in cui vuoi indirizzare i log.

    In base al servizio selezionato, puoi scegliere tra le seguenti destinazioni:

    • Bucket Cloud Logging: seleziona o crea un bucket Logging. Se crei un bucket di log, deve essere a livello di progetto. Non puoi creare un bucket di log a livello di cartella o organizzazione.
    • Tabella BigQuery: seleziona o crea il set di dati specifico per ricevere i log con routing. Puoi anche utilizzare le tabelle partizionate.
    • Bucket Cloud Storage: seleziona o crea il bucket Cloud Storage specifico per ricevere i log con routing.
    • Argomento Pub/Sub: seleziona o crea l'argomento specifico per ricevere i log con routing.
    • Splunk: seleziona l'argomento Pub/Sub per il tuo servizio Splunk.

      Ad esempio, se la destinazione del sink è un set di dati BigQuery, la destinazione del sink sarà la seguente:

      bigquery.googleapis.com/projects/PROJECT_ID/datasets/DATASET_ID
      
  6. Nel riquadro Scegli i log da includere nel sink:

    1. Seleziona Includi i log importati da questa risorsa e tutte le risorse figlio per creare un sink aggregato.

    2. Nel campo Crea filtro di inclusione, inserisci un'espressione di filtro corrispondente alle voci di log che vuoi includere. Se non imposti un filtro, tutti i log della risorsa selezionata vengono instradati alla destinazione.

      Ad esempio, potrebbe essere utile creare un filtro per instradare tutti gli audit log di accesso ai dati a un singolo bucket di Logging. Questo filtro ha il seguente aspetto:

      LOG_ID("cloudaudit.googleapis.com/data_access") OR LOG_ID("externalaudit.googleapis.com/data_access")
      

      Tieni presente che la lunghezza di un filtro non può superare i 20.000 caratteri.

    3. Per verificare di aver inserito il filtro corretto, seleziona Anteprima log. Si apre Esplora log in una nuova scheda con il filtro precompilato.

  7. (Facoltativo) Nel riquadro Scegli i log da escludere dal sink, segui questi passaggi:

    1. Inserisci un nome nel campo Nome filtro di esclusione.

    2. Nel campo Crea un filtro di esclusione, inserisci un'espressione di filtro che corrisponda alle voci di log da escludere. Puoi anche utilizzare la funzione sample per selezionare una parte delle voci di log da escludere.

      Ad esempio, per escludere i log di un progetto specifico dal routing alla destinazione, aggiungi il seguente filtro di esclusione:

      logName:projects/PROJECT_ID
      

      Per escludere i log da più progetti, utilizza l'operatore logico OR per unire le clausole logName.

    Puoi creare fino a 50 filtri di esclusione per sink. Tieni presente che la lunghezza di un filtro non può superare 20.000 caratteri.

  8. Seleziona Crea sink.

API

Per creare un sink, utilizza organizations.sinks.create o folders.sinks.create nell'API Logging. Prepara gli argomenti del metodo come segue:

  1. Imposta il parametro parent sull'organizzazione o sulla cartella Google Cloud in cui creare il sink. L'elemento padre deve essere uno dei seguenti:

    • organizations/ORGANIZATION_ID
    • folders/FOLDER_ID
  2. Nell'oggetto LogSink nel corpo della richiesta del metodo, procedi come segue:

  3. Chiama organizations.sinks.create o folders.sinks.create per creare il sink.

  4. Recupera il nome dell'account di servizio dal campo writer_identity restituito dalla risposta dell'API.

  5. Concedi a quell'account di servizio l'autorizzazione a scrivere nella destinazione del sink.

    Se non disponi dell'autorizzazione per apportare questa modifica alla destinazione del sink, invia il nome dell'account di servizio a qualcuno che possa apportare questa modifica per te.

    Per ulteriori informazioni sulla concessione delle autorizzazioni degli account di servizio per le risorse, consulta la sezione Impostare le autorizzazioni di destinazione.

gcloud

Per creare un sink, utilizza il comando logging sinks create.

  1. Fornisci il nome del sink, la destinazione, il filtro e l'ID della cartella o dell'organizzazione da cui esegui il routing dei log:

    gcloud logging sinks create SINK_NAME \
      SINK_DESTINATION  --include-children \
      --folder=FOLDER_ID --log-filter="LOG_FILTER"
    

    Ad esempio, se stai creando un sink aggregato a livello di cartella e la cui destinazione è un set di dati BigQuery, il comando potrebbe avere il seguente aspetto:

    gcloud logging sinks create SINK_NAME \
      bigquery.googleapis.com/projects/PROJECT_ID/datasets/DATASET_ID --include-children \
      --folder=FOLDER_ID --log-filter="logName:activity"
    

    Note:

    • Per creare un sink a livello di organizzazione, sostituisci --folder=FOLDER_ID con --organization=ORGANIZATION_ID.

    • Affinché il sink includa tutte le risorse all'interno dell'organizzazione, è necessario impostare il flag --include-children, anche quando il flag --organization viene passato a create. Se impostato su false (valore predefinito), un sink instrada solo i log dalla risorsa host.

    • Per alcuni esempi di filtri utili, consulta la pagina Creare filtri per i sink aggregati.

  2. Recupera il nome dell'account di servizio utilizzato per creare il sink dall'output comando.

  3. Concedi all'account di servizio l'autorizzazione a scrivere nella destinazione del sink.

    Se non disponi dell'autorizzazione per apportare questa modifica alla destinazione del sink, invia il nome dell'account di servizio a qualcuno che possa apportare questa modifica per te.

    Per ulteriori informazioni sulla concessione delle autorizzazioni degli account di servizio per le risorse, consulta la sezione Impostare le autorizzazioni di destinazione.

L'applicazione delle modifiche apportate a un sink potrebbe richiedere alcuni minuti.

Crea filtri per i sink aggregati

Come per qualsiasi sink, anche il sink aggregato contiene un filtro che seleziona le singole voci di log. Per esempi di filtri che potresti utilizzare per creare il sink aggregato, consulta Esempi di query utilizzando Esplora log.

Di seguito sono riportati alcuni esempi di confronti di filtri utili quando si utilizza la funzionalità dei sink aggregati. Alcuni esempi utilizzano la seguente notazione:

  • : è l'operatore di sottostringa. Non sostituire l'operatore =.
  • ... rappresenta eventuali ulteriori confronti di filtri.
  • Le variabili sono indicate da un testo colorato. Sostituiscile con valori validi.

Tieni presente che la lunghezza di un filtro non può superare i 20.000 caratteri.

Per maggiori dettagli sulla sintassi di filtro, consulta Linguaggio delle query di Logging.

Seleziona la sorgente log

Per un sink aggregato, per ogni risorsa secondaria dell'organizzazione o della cartella vengono applicati i filtri di inclusione ed esclusione del sink a ogni voce di log inviata alla risorsa figlio. Viene instradata una voce di log che corrisponde al filtro di inclusione e non è esclusa.

Se vuoi che il sink instrada i log da tutte le risorse figlio, non specificare un progetto, una cartella o un'organizzazione nei filtri di inclusione ed esclusione del sink. Ad esempio, supponi di configurare un sink aggregato per un'organizzazione con il seguente filtro:

resource.type="gce_instance"

Con il filtro precedente, i log con un tipo di risorsa di istanze di Compute Engine scritte in qualsiasi organizzazione secondaria di quell'organizzazione vengono instradati alla destinazione dal sink aggregato.

Tuttavia, potrebbero verificarsi situazioni in cui utilizzare un sink aggregato per instradare i log solo da risorse figlio specifiche. Ad esempio, per motivi di conformità, potresti voler archiviare gli audit log di cartelle o progetti specifici nel proprio bucket Cloud Storage. In queste situazioni, configura il filtro di inclusione in modo da specificare ogni risorsa figlio di cui vuoi eseguire il routing dei log. Se vuoi eseguire il routing dei log da una cartella e da tutti i progetti al suo interno, il filtro deve elencare la cartella e tutti i progetti contenuti nella cartella e anche unire le istruzioni con una clausola OR.

I seguenti filtri limitano i log a organizzazioni, cartelle o progetti specifici di Google Cloud:

logName:"projects/PROJECT_ID/logs/" AND ... 
logName:("projects/PROJECT_A_ID/logs/" OR "projects/PROJECT_B_ID/logs/") AND ... 
logName:"folders/FOLDER_ID/logs/" AND ... 
logName:"organizations/ORGANIZATION_ID/logs/" AND ... 

Ad esempio, per instradare solo i log scritti su istanze di Compute Engine scritte nella cartella my-folder, utilizza il filtro seguente:

logName:"folders/my-folder/logs/" AND resource.type="gce_instance"

Con il filtro precedente, i log scritti in qualsiasi risorsa diversa da my-folder, inclusi quelli scritti nei progetti Google Cloud figlio di my-folder, non vengono instradati alla destinazione.

Seleziona la risorsa monitorata

Per instradare i log solo da una specifica risorsa monitorata in un progetto Google Cloud, utilizza più confronti per specificare esattamente la risorsa:

logName:"projects/PROJECT_ID/logs" AND
resource.type=RESOURCE_TYPE AND
resource.labels.instance_id=INSTANCE_ID

Per un elenco dei tipi di risorse, consulta Tipi di risorse monitorate.

Seleziona un esempio di voci di log

Per instradare un campione casuale di voci di log, aggiungi la funzione integrata sample. Ad esempio, per instradare solo il dieci% delle voci di log corrispondenti al filtro attuale, utilizza questa aggiunta:

sample(insertId, 0.10) AND ...

Per ulteriori informazioni, consulta la funzione sample.

Per ulteriori informazioni sui filtri di Cloud Logging, consulta il linguaggio delle query di Logging.

Imposta le autorizzazioni della destinazione

Questa sezione descrive come concedere a Logging le autorizzazioni Identity and Access Management per scrivere i log nella destinazione del sink. Per l'elenco completo dei ruoli e delle autorizzazioni di Logging, consulta Controllo dell'accesso.

Quando crei o aggiorni un sink che indirizza i log a qualsiasi destinazione diversa da un bucket di log nel progetto attuale, è necessario un account di servizio per quel sink. Logging crea e gestisce automaticamente l'account di servizio per conto tuo:

  • A partire dal 22 maggio 2023, quando crei un sink e non esiste nessun account di servizio per la risorsa sottostante, Logging crea l'account di servizio. Logging utilizza lo stesso account di servizio per tutti i sink nella risorsa sottostante. Le risorse possono essere un progetto Google Cloud, un'organizzazione, una cartella o un account di fatturazione.
  • Prima del 22 maggio 2023, Logging ha creato un account di servizio per ogni sink. A partire dal 22 maggio 2023, Logging utilizza un account di servizio condiviso per tutti i sink nella risorsa sottostante.

L'identità autore di un sink è l'identificatore dell'account di servizio associato al sink. Tutti i sink hanno un'identità autore, a meno che non scrivono in un bucket di log nel progetto Google Cloud attuale.

Per eseguire il routing dei log su una risorsa protetta da un perimetro di servizio, devi aggiungere l'account di servizio per il sink a un livello di accesso e poi assegnarlo al perimetro di servizio di destinazione. Ciò non è necessario per i sink non aggregati. Per i dettagli, consulta Controlli di servizio VPC: Cloud Logging.

Per impostare le autorizzazioni per il routing del sink alla destinazione:

Console

  1. Per ottenere informazioni sull'account di servizio per il sink:

    1. Nel pannello di navigazione della console Google Cloud, seleziona Logging, quindi Router dei log:

      Vai a Router dei log

    2. Seleziona Menu, quindi Visualizza dettagli sink.

      Nel riquadro Dettagli sink, il campo writerIdentity contiene l'identità dell'account di servizio. La stringa serviceAccount: fa parte dell'identità dell'account di servizio. Ad esempio:

      serviceAccount:service-123456789012@gcp-sa-logging.iam.gserviceaccount.com
      
  2. Nel progetto di destinazione, concedi all'identità dell'autore il ruolo necessario all'account di servizio per scrivere nella destinazione. Per concedere un ruolo a un'entità, devi avere il ruolo di Proprietario (roles/owner):

    • Per le destinazioni Cloud Storage, aggiungi l'identità autore del sink come entità utilizzando IAM, quindi assegnale il ruolo Creatore oggetti Storage (roles/storage.objectCreator).
    • Per le destinazioni BigQuery, aggiungi l'identità autore del sink come entità utilizzando IAM, quindi assegnale il ruolo Editor dati BigQuery (roles/bigquery.dataEditor).
    • Per le destinazioni Pub/Sub, incluso Splunk, aggiungi l'identità autore del sink come entità utilizzando IAM, quindi concedi al ruolo Publisher Pub/Sub (roles/pubsub.publisher).
    • Per le destinazioni dei bucket Logging in diversi progetti Google Cloud, aggiungi l'identità autore del sink come entità utilizzando IAM, quindi concedile il ruolo Writer bucket di log (roles/logging.bucketWriter).
    • Per le destinazioni dei progetti Google Cloud, aggiungi l'identità autore del sink come entità utilizzando IAM, quindi assegnale il ruolo Writer log (roles/logging.logWriter). In particolare, un'entità ha bisogno dell'autorizzazione logging.logEntries.route.
    Se non disponi dell'accesso come Proprietario alla destinazione del sink, chiedi a un proprietario del progetto di aggiungere l'identità autore come entità.

API

  1. Per ottenere informazioni sull'account di servizio per il sink, chiama il metodo API organizations.sinks.get o folders.sinks.get.

    Il campo writerIdentity contiene l'identità dell'account di servizio. La stringa serviceAccount: fa parte dell'identità dell'account di servizio. Ad esempio:

    serviceAccount:service-123456789012@gcp-sa-logging.iam.gserviceaccount.com
    
  2. Nel progetto di destinazione, concedi all'identità dell'autore il ruolo necessario all'account di servizio per scrivere nella destinazione. Per concedere un ruolo a un'entità, devi avere il ruolo di Proprietario (roles/owner):

    • Per le destinazioni Cloud Storage, aggiungi l'identità autore del sink come entità utilizzando IAM, quindi assegnale il ruolo Creatore oggetti Storage (roles/storage.objectCreator).
    • Per le destinazioni BigQuery, aggiungi l'identità autore del sink come entità utilizzando IAM, quindi assegnale il ruolo Editor dati BigQuery (roles/bigquery.dataEditor).
    • Per le destinazioni Pub/Sub, incluso Splunk, aggiungi l'identità autore del sink come entità utilizzando IAM, quindi concedi al ruolo Publisher Pub/Sub (roles/pubsub.publisher).
    • Per le destinazioni dei bucket Logging in diversi progetti Google Cloud, aggiungi l'identità autore del sink come entità utilizzando IAM, quindi concedile il ruolo Writer bucket di log (roles/logging.bucketWriter).
    • Per le destinazioni dei progetti Google Cloud, aggiungi l'identità autore del sink come entità utilizzando IAM, quindi assegnale il ruolo Writer log (roles/logging.logWriter). In particolare, un'entità ha bisogno dell'autorizzazione logging.logEntries.route.
    Se non disponi dell'accesso come Proprietario alla destinazione del sink, chiedi a un proprietario del progetto di aggiungere l'identità autore come entità.

gcloud

  1. Per ottenere informazioni sull'account di servizio per il sink, esegui questo comando:

    gcloud logging sinks describe SINK_NAME
    

    Il campo writerIdentity contiene l'identità dell'account di servizio. La stringa serviceAccount: fa parte dell'identità dell'account di servizio. Ad esempio:

    serviceAccount:service-123456789012@gcp-sa-logging.iam.gserviceaccount.com
    
  2. Nel progetto di destinazione, concedi all'identità dell'autore il ruolo necessario all'account di servizio per scrivere nella destinazione. Per concedere un ruolo a un'entità, devi avere il ruolo di Proprietario (roles/owner):

    • Per le destinazioni Cloud Storage, aggiungi l'identità autore del sink come entità utilizzando IAM, quindi assegnale il ruolo Creatore oggetti Storage (roles/storage.objectCreator).
    • Per le destinazioni BigQuery, aggiungi l'identità autore del sink come entità utilizzando IAM, quindi assegnale il ruolo Editor dati BigQuery (roles/bigquery.dataEditor).
    • Per le destinazioni Pub/Sub, incluso Splunk, aggiungi l'identità autore del sink come entità utilizzando IAM, quindi concedi al ruolo Publisher Pub/Sub (roles/pubsub.publisher).
    • Per le destinazioni dei bucket Logging in diversi progetti Google Cloud, aggiungi l'identità autore del sink come entità utilizzando IAM, quindi concedile il ruolo Writer bucket di log (roles/logging.bucketWriter).
    • Per le destinazioni dei progetti Google Cloud, aggiungi l'identità autore del sink come entità utilizzando IAM, quindi assegnale il ruolo Writer log (roles/logging.logWriter). In particolare, un'entità ha bisogno dell'autorizzazione logging.logEntries.route.
    Se non disponi dell'accesso come Proprietario alla destinazione del sink, chiedi a un proprietario del progetto di aggiungere l'identità autore come entità.

Passaggi successivi