Registrazione di controllo del database in tempo reale di Firebase

Questa pagina descrive gli audit log creati da Firebase come parte degli audit log di Cloud .

Panoramica

I servizi Firebase scrivono registri di controllo per aiutarti a rispondere alle domande "Chi ha fatto cosa, dove e quando?". Si tratta di audit log di Cloud, forniti come parte del progetto Google Cloud collegato al tuo progetto Firebase .

Ciascuno dei tuoi progetti Firebase contiene solo i log di controllo per le risorse che si trovano direttamente all'interno del progetto.

Per una panoramica generale degli audit log di Cloud, vedere Panoramica degli audit log di Cloud . Per una comprensione più approfondita del formato del registro di controllo, vedere Comprendere i registri di controllo .

Registri di controllo disponibili

I seguenti tipi di log di controllo sono disponibili per Firebase Realtime Database:

  • Registri di controllo delle attività di amministrazione

    Include operazioni di "scrittura admin" che scrivono metadati o informazioni di configurazione.

    Non puoi disabilitare i log di controllo delle attività di amministrazione.

  • Registri di controllo dell'accesso ai dati

    Include operazioni di "lettura admin" che leggono metadati o informazioni di configurazione. Include anche operazioni di "lettura dati" e "scrittura dati" che leggono o scrivono dati forniti dall'utente.

    Per ricevere i log di controllo dell'accesso ai dati, è necessario abilitarli in modo esplicito.

Per descrizioni più complete dei tipi di log di controllo, vedere Tipi di log di controllo .

Operazioni controllate

Di seguito viene riepilogato quali operazioni API corrispondono a ciascun tipo di registro di controllo in Firebase Realtime Database:

Categoria dei log di controllo Operazioni del database in tempo reale di Firebase
Registri di controllo delle attività amministrative (ADMIN_WRITE)
  • Crea un'istanza di database
  • Eliminaistanza database
  • Disattivaistanza database
  • RiabilitaDatabaseInstance
Registri di controllo dell'accesso ai dati (ADMIN_READ)
  • GetDatabaseInstance
  • ListDatabaseInstances
Registri di controllo dell'accesso ai dati (DATA_READ o DATA_WRITE)
  • Collegare
  • Disconnetti
  • Esegui su disconnetti
  • Aggiorna (con precondizione) (per le operazioni di transazione). Vedere Precondition associata e WriteMetadata .
Registri di controllo dell'accesso ai dati (DATA_READ)
Registri di controllo dell'accesso ai dati (DATA_WRITE)
  • Scrivere
  • Aggiornare. Vedere WriteMetadata associato.
  • OnDisconnectPut
  • OnDisconnectAggiornamento. Vedere WriteMetadata associato.
  • OnDisconnectAnnulla

Controlla le informazioni di autenticazione

Le voci del registro di controllo includono informazioni sull'identità che ha eseguito l'operazione registrata. Per identificare un chiamante della richiesta, vedere i seguenti campi all'interno dell'oggetto AuditLog:

  • Stabilire connessioni in tempo reale. Le operazioni di Realtime Database Connect non registrano i dati di autenticazione poiché Realtime Database esegue l'autenticazione dopo che è stata stabilita una connessione. Pertanto, Connect non ha informazioni di autenticazione. L'oggetto AuthenticationInfo contiene un principalEmail segnaposto di audit-pending-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com .

  • Autenticazione Google. Le operazioni di Realtime Database che utilizzano l'autenticazione Google standard, come il traffico da Firebase Admin SDK o le richieste REST autenticate con un token OAuth standard , hanno un oggetto AuthenticationInfo che contiene l'email delle credenziali effettive.

  • Autenticazione Firebase. Le operazioni di Realtime Database che utilizzano l'autenticazione Firebase hanno un oggetto AuthenticationInfo che contiene un valore principalEmail di audit-third-party-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com . Lo stesso vale se implementi la tua soluzione di autenticazione coniando JWT personalizzati.

    • Se per l'autenticazione di terze parti è stato utilizzato un JSON Web Token (JWT), il campo thirdPartyPrincipal include l'intestazione e il payload del token. Ad esempio, i log di controllo per le richieste autenticate con Firebase Authentication includono il token Firebase Authentication di tale richiesta.
  • Nessuna autenticazione. Le operazioni di Realtime Database che non utilizzano alcuna autenticazione hanno un oggetto AuthenticationInfo che contiene un valore principalEmail di audit-no-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com di Realtime Database con regole di sicurezza aperte può concedere tali richieste . Consigliamo a tutti gli utenti di proteggere correttamente i propri database.

  • Token dei segreti legacy. Le operazioni di Realtime Database che utilizzano token legacy hanno un oggetto AuthenticationInfo che contiene un principalEmail segnaposto di audit-secret-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com . Per JWT firmato da secret, thirdPartyPrincipal contiene le intestazioni JWT e il payload.

Controlla le valutazioni delle regole di sicurezza di Firebase

Gli audit log di Cloud possono essere utilizzati per identificare le richieste che saranno potenzialmente interessate dalle modifiche alle regole.

Nell'oggetto AuthorizationInfo , authorization.permission può essere uno di:

  • firebasedatabase.data.get : accesso in lettura concesso nel percorso specificato in resource .
  • firebasedatabase.data.update : accesso in scrittura concesso nel percorso specificato in resource .
  • firebasedatabase.data.connect : segnaposto per Connect e Disconnect . Nessuna autorizzazione richiesta per connettersi a un'istanza di Realtime Database.
  • firebasedatabase.data.cancel : Usato per Unlisten e OnDisconnectCancel . La revoca o l'annullamento di un'operazione precedentemente autorizzata non richiede alcuna autorizzazione aggiuntiva.

Correla gli audit log di Cloud con i risultati del profiler di Realtime Database

È possibile eseguire un'analisi approfondita delle prestazioni su Realtime Database utilizzando il profiler di Realtime Database in combinazione con la registrazione di audit di Realtime Database. Ogni strumento ha i suoi punti di forza.

Registrazione di audit nel cloud Profiler di database in tempo reale
  • Controlla l'accesso ai database
  • Cattura continuamente tutte le richieste
  • Consente query retrospettive
  • Contiene informazioni dettagliate sul token di autenticazione
  • Incorre in un costo di utilizzo
  • Utilizzato per l'analisi delle prestazioni
  • Fornisce strumenti utili per l'identificazione degli hotspot e quindi l'ottimizzazione delle prestazioni
  • Può misurare listener-broadcast , che non è disponibile nei log di controllo a causa del potenziale volume di dati
  • Leggero e in tempo reale, ottimo per i test di carico in tempo reale. La visualizzazione delle voci del registro di controllo potrebbe richiedere alcuni minuti.

I contenuti del registro di controllo corrispondono alle metriche del profiler come mostrato di seguito.

Nome dell'operazione di registrazione di controllo Valori speciali in
RealtimeDatabaseAuditMetadata
Nome dell'operazione del profiler
Collegare RequestType è IN TEMPO REALTIME connessione simultanea
Disconnetti RequestType è IN TEMPO REALTIME disconnessione simultanea
Leggi RequestType è IN TEMPO REALTIME lettura in tempo reale
Leggi RequestType è REST resto-leggi
Scrivere RequestType è IN TEMPO REALTIME scrittura in tempo reale
Scrivere RequestType è REST resto-scrivi
Aggiornare RequestType è REALTIME .
Controlla PreconditionType .
aggiornamento in tempo reale
transazione in tempo reale
Aggiornare RequestType è REST .
Controlla PreconditionType .
resto-aggiornamento
resto-transazione
AscoltatoreAscolta RequestType è IN TEMPO REALTIME ascoltatore-ascolta
AscoltatoreNon ascoltare RequestType è IN TEMPO REALTIME ascoltatore-non ascoltare
OnDisconnectPut RequestType è IN TEMPO REALTIME on-disconnect-put
OnDisconnectAggiornamento RequestType è IN TEMPO REALTIME aggiornamento alla disconnessione
OnDisconnectAnnulla RequestType è IN TEMPO REALTIME alla disconnessione-annullamento
Esegui su disconnetti RequestType è IN TEMPO REALTIME run-on-disconnect

Formato registro di controllo

Le voci del registro di controllo includono i seguenti oggetti:

  • La stessa voce di log, che è un oggetto di tipo LogEntry . I campi utili includono quanto segue:

    • logName contiene l'ID risorsa e il tipo di registro di controllo.
    • La resource contiene la destinazione dell'operazione controllata.
    • Il timestamp contiene l'ora dell'operazione controllata.
    • Il protoPayload contiene le informazioni controllate.
  • I dati di registrazione del controllo, che è un oggetto AuditLog contenuto nel campo protoPayload della voce di registro.

  • Informazioni di controllo facoltative specifiche del servizio, che è un oggetto specifico del servizio. Per le integrazioni precedenti, questo oggetto è contenuto nel campo serviceData dell'oggetto AuditLog ; le integrazioni più recenti utilizzano il campo dei metadata .

Per altri campi in questi oggetti e per come interpretarli, consulta Comprendere i log di controllo .

Ulteriori informazioni sui campi in protoPayload.metadata per le operazioni DATA_READ e DATA_WRITE sono disponibili nella documentazione di riferimento .

Nome registro

I nomi delle risorse di Cloud Audit Logs indicano il progetto Firebase o un'altra entità Google Cloud che possiede i log di controllo e se il log contiene dati di registrazione di controllo su attività di amministrazione, accesso ai dati, criteri negati o eventi di sistema. Ad esempio, quanto segue mostra i nomi dei log per i log di controllo delle attività di amministrazione a livello di progetto e i log di controllo dell'accesso ai dati di un'organizzazione. Le variabili denotano il progetto Firebase e gli identificatori dell'organizzazione.

projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Factivity
organizations/ORGANIZATION_ID/logs/cloudaudit.googleapis.com%2Fdata_access

Nome di Servizio

I log di controllo di Firebase Realtime Database utilizzano il nome del servizio firebasedatabase.googleapis.com .

Per un elenco completo di tutti i nomi dei servizi dell'API Cloud Logging e del tipo di risorsa monitorata corrispondente, consulta Mappare i servizi alle risorse .

Tipi di risorse

I log di controllo di Firebase Realtime Database utilizzano il tipo di risorsa audited_resource per tutti i log di controllo.

Per un elenco di tutti i tipi di risorse monitorate da Cloud Logging e informazioni descrittive, consulta Tipi di risorse monitorate .

Abilita la registrazione di controllo

I registri di controllo delle attività di amministrazione sono sempre abilitati; non puoi disabilitarli.

Gli audit log di accesso ai dati sono disabilitati per impostazione predefinita e non vengono scritti a meno che non siano esplicitamente abilitati (l'eccezione sono gli audit log di accesso ai dati per BigQuery, che non possono essere disabilitati).

I log di controllo dell'accesso ai dati per Realtime Database vengono attivati ​​controllando DATA_READ e/o DATA_WRITE nella console GCP. C'è un ritardo massimo di un'ora tra il momento in cui i log vengono abilitati/disabilitati nella console di GCP e il momento in cui i log iniziano/interrompono la consegna.

Per istruzioni su come abilitare alcuni o tutti i log di controllo dell'accesso ai dati, consulta Configurare i log di accesso ai dati .

Autorizzazioni e ruoli

Le autorizzazioni e i ruoli di Cloud IAM determinano la tua capacità di accedere ai dati dei log di controllo nelle risorse di Google Cloud.

Quando decidi quali autorizzazioni e ruoli specifici di Logging si applicano al tuo caso d'uso, considera quanto segue:

  • Il ruolo Visualizzatore log ( roles/logging.viewer ) consente l'accesso in sola lettura ai log di controllo delle attività dell'amministratore, dei criteri negati e degli eventi di sistema. Se disponi solo di questo ruolo, non puoi visualizzare gli audit log di accesso ai dati che si trovano nel bucket _Default .

  • Il ruolo Visualizzatore di log privati (roles/logging.privateLogViewer ) include le autorizzazioni contenute in roles/logging.viewer , oltre alla possibilità di leggere i log di controllo dell'accesso ai dati nel bucket _Default .

    Tieni presente che se questi log privati ​​vengono archiviati in bucket definiti dall'utente, qualsiasi utente che dispone delle autorizzazioni per leggere i log in tali bucket può leggere i log privati. Per ulteriori informazioni sui bucket di log, consulta Panoramica su routing e archiviazione .

Per ulteriori informazioni sulle autorizzazioni e sui ruoli di Cloud IAM che si applicano ai dati dei log di controllo, consulta Controllo degli accessi .

Visualizza i log

Per trovare e visualizzare i log di controllo, devi conoscere l'identificatore del progetto, della cartella o dell'organizzazione Firebase per cui desideri visualizzare le informazioni di log di controllo. Puoi specificare ulteriormente altri campi LogEntry indicizzati, come resource.type ; per i dettagli, consultare Trova rapidamente voci di registro .

Di seguito sono riportati i nomi dei log di controllo; includono variabili per gli identificatori del progetto, della cartella o dell'organizzazione Firebase:

   projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Factivity
   projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fdata_access
   projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fsystem_event
   projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fpolicy

   folders/FOLDER_ID/logs/cloudaudit.googleapis.com%2Factivity
   folders/FOLDER_ID/logs/cloudaudit.googleapis.com%2Fdata_access
   folders/FOLDER_ID/logs/cloudaudit.googleapis.com%2Fsystem_event
   folders/FOLDER_ID/logs/cloudaudit.googleapis.com%2Fpolicy

   organizations/ORGANIZATION_ID/logs/cloudaudit.googleapis.com%2Factivity
   organizations/ORGANIZATION_ID/logs/cloudaudit.googleapis.com%2Fdata_access
   organizations/ORGANIZATION_ID/logs/cloudaudit.googleapis.com%2Fsystem_event
   organizations/ORGANIZATION_ID/logs/cloudaudit.googleapis.com%2Fpolicy

Puoi visualizzare gli audit log in Cloud Logging utilizzando la console di GCP, lo strumento a riga di comando gcloud o l'API Logging.

Consolle

Puoi utilizzare Esplora log nella console di GCP per recuperare le voci del log di controllo per il progetto, la cartella o l'organizzazione Firebase:

  1. Nella console di GCP, vai alla pagina Logging > Esplora log .

    Vai alla pagina Esplora log

  2. Nella pagina Logs Explorer , seleziona un progetto, una cartella o un'organizzazione Firebase esistente.

  3. Nel riquadro Generatore di query , procedi come segue:

    • In Tipo di risorsa , seleziona la risorsa Google Cloud di cui vuoi visualizzare gli audit log.

    • In Nome registro , seleziona il tipo di registro di controllo che desideri visualizzare:

      • Per i log di controllo delle attività di amministrazione, seleziona activity .
      • Per i log di controllo dell'accesso ai dati, seleziona data_access .
      • Per i log di controllo degli eventi di sistema, seleziona system_event .
      • Per i registri di controllo dei criteri negati, selezionare policy .

    Se non vedi queste opzioni, significa che non ci sono log di controllo di quel tipo disponibili nel progetto, nella cartella o nell'organizzazione Firebase.

    Per ulteriori dettagli sull'esecuzione di query tramite Esplora log, vedere Creare query di log .

gcloud

Lo strumento a riga di comando gcloud fornisce un'interfaccia a riga di comando per l'API Cloud Logging. Fornisci un PROJECT_ID , FOLDER_ID o ORGANIZATION_ID valido in ciascuno dei nomi di log.

Per leggere le voci del registro di controllo a livello di progetto Firebase, esegui il seguente comando:

gcloud logging read "logName : projects/PROJECT_ID/logs/cloudaudit.googleapis.com" --project=PROJECT_ID

Per leggere le voci del registro di controllo a livello di cartella, eseguire il comando seguente:

gcloud logging read "logName : folders/FOLDER_ID/logs/cloudaudit.googleapis.com" --folder=FOLDER_ID

Per leggere le voci del log di controllo a livello di organizzazione, eseguire il seguente comando:

gcloud logging read "logName : organizations/ORGANIZATION_ID/logs/cloudaudit.googleapis.com" --organization=ORGANIZATION_ID

Per ulteriori informazioni sull'utilizzo dello strumento gcloud , consulta Leggere voci di log .

API

Quando crei le tue query, sostituisci le variabili con valori validi, sostituisci il nome o gli identificatori del registro di controllo appropriato a livello di progetto, cartella o organizzazione come elencato nei nomi del registro di controllo. Ad esempio, se la tua query include un PROJECT_ID , l'identificatore di progetto che fornisci deve fare riferimento al progetto Firebase attualmente selezionato.

Per utilizzare l'API di registrazione per esaminare le voci del log di controllo, procedi come segue:

  1. Vai alla sezione Prova questa API nella documentazione per il metodo entries.list .

  2. Inserisci quanto segue nella parte del corpo della richiesta del modulo Prova questa API . Facendo clic su questo modulo precompilato si riempie automaticamente il corpo della richiesta, ma è necessario fornire un PROJECT_ID valido in ciascuno dei nomi di log.

    {
      "resourceNames": [
        "projects/PROJECT_ID"
      ],
      "pageSize": 5,
      "filter": "logName : projects/PROJECT_ID/logs/cloudaudit.googleapis.com"
    }
    
  3. Fare clic su Esegui .

Per ulteriori dettagli sull'esecuzione di query, vedere Registrazione del linguaggio di query .

Per un esempio di voce del registro di controllo e come trovare le informazioni più importanti al suo interno, vedere Voce del registro di controllo di esempio .

Registri di controllo del percorso

Puoi instradare i log di controllo alle destinazioni supportate nello stesso modo in cui puoi instradare altri tipi di log. Ecco alcuni motivi per cui potresti voler instradare i log di controllo:

  • Per conservare i log di controllo per un periodo di tempo più lungo o per utilizzare funzionalità di ricerca più potenti, puoi indirizzare le copie dei log di controllo a Google Cloud Storage, BigQuery o Google Cloud Pub/Sub. Utilizzando Cloud Pub/Sub, puoi indirizzare ad altre applicazioni, altri repository e a terze parti.

  • Per gestire i log di controllo in un'intera organizzazione, puoi creare sink aggregati in grado di instradare i log da uno o tutti i progetti Firebase nell'organizzazione.

  • Se i log di controllo dell'accesso ai dati abilitati eseguono il push dei progetti Firebase sulle assegnazioni dei log, puoi creare sink che escludono i log di controllo dell'accesso ai dati dalla registrazione.

Per istruzioni sui log di routing, vedere configurare i sink .

Prezzi

I registri di controllo delle attività di amministrazione e i registri di controllo degli eventi di sistema sono gratuiti.

I registri di controllo dell'accesso ai dati e i registri di controllo dei criteri negati sono a pagamento.

Per ulteriori informazioni sui prezzi di Cloud Logging, consulta i prezzi della suite operativa di Google Cloud: Cloud Logging .