Audit logging di Firebase Realtime Database

Questo documento descrive il logging di controllo per Firebase Realtime Database. Google Cloud servizi generare audit log che registrano le attività amministrative e di accesso all'interno delle tue risorse Google Cloud. Per ulteriori informazioni sugli audit log di Cloud, consulta quanto segue:

Note

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

Nome servizio

Gli audit log di Firebase Realtime Database utilizzano il nome servizio firebasedatabase.googleapis.com. Filtra per questo servizio:

    protoPayload.serviceName="firebasedatabase.googleapis.com"
  

Metodi per tipo di autorizzazione

associato.

Ogni autorizzazione IAM ha una proprietà type, il cui valore è un enum che può essere uno dei quattro valori: ADMIN_READ, ADMIN_WRITE, DATA_READ o DATA_WRITE. Quando chiami un metodo, Firebase Realtime Database genera un audit log la cui categoria dipende dal Proprietà type dell'autorizzazione richiesta per eseguire il metodo. I metodi che richiedono un'autorizzazione IAM con il valore della proprietà type corrispondente a DATA_READ, DATA_WRITE o ADMIN_READ generano log di controllo Accesso ai dati. I metodi che richiedono un'autorizzazione IAM con il valore della proprietà type ADMIN_WRITE generano log di controllo per le attività amministrative.

Tipo di autorizzazione Metodi
ADMIN_READ google.firebase.database.v1beta.RealtimeDatabaseService.GetDatabaseInstance
google.firebase.database.v1beta.RealtimeDatabaseService.ListDatabaseInstances
ADMIN_WRITE google.firebase.database.v1beta.RealtimeDatabaseService.CreateDatabaseInstance
google.firebase.database.v1beta.RealtimeDatabaseService.DeleteDatabaseInstance
google.firebase.database.v1beta.RealtimeDatabaseService.DisableDatabaseInstance
google.firebase.database.v1beta.RealtimeDatabaseService.ReenableDatabaseInstance
google.firebase.database.v1beta.RealtimeDatabaseService.UndeleteDatabaseInstance
DATA_READ google.firebase.database.v1.RealtimeDatabase.Connect
google.firebase.database.v1.RealtimeDatabase.Disconnect
google.firebase.database.v1.RealtimeDatabase.Listen
google.firebase.database.v1.RealtimeDatabase.OnDisconnectCancel
google.firebase.database.v1.RealtimeDatabase.Read
google.firebase.database.v1.RealtimeDatabase.Unlisten
DATA_WRITE google.firebase.database.v1.RealtimeDatabase.OnDisconnectPut
google.firebase.database.v1.RealtimeDatabase.OnDisconnectUpdate
google.firebase.database.v1.RealtimeDatabase.RunOnDisconnect
google.firebase.database.v1.RealtimeDatabase.Update
google.firebase.database.v1.RealtimeDatabase.Write

Audit log dell'interfaccia API

Per informazioni su come e quali autorizzazioni vengono valutate per ogni metodo, consulta la documentazione di Cloud Identity and Access Management per Firebase Realtime Database.

google.firebase.database.v1.RealtimeDatabase

I seguenti audit log sono associati a metodi appartenenti a google.firebase.database.v1.RealtimeDatabase.

Connect

  • Metodo: google.firebase.database.v1.RealtimeDatabase.Connect
  • Tipo di log di controllo: Accesso ai dati
  • Autorizzazioni:
    • firebasedatabase.data.connect - DATA_READ
  • Il metodo è un'operazione a lunga esecuzione o in streaming: No.
  • Filtra per questo metodo: protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Connect"

Disconnect

  • Metodo: google.firebase.database.v1.RealtimeDatabase.Disconnect
  • Tipo di log di controllo: Accesso ai dati
  • Autorizzazioni:
    • firebasedatabase.data.connect - DATA_READ
  • Il metodo è un'operazione a lunga esecuzione o in modalità flusso: N.
  • Filtra per questo metodo: protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Disconnect"

Listen

  • Metodo: google.firebase.database.v1.RealtimeDatabase.Listen
  • Tipo di log di controllo: Accesso ai dati
  • Autorizzazioni:
    • firebasedatabase.data.get - DATA_READ
  • Il metodo è un'operazione a lunga esecuzione o in modalità flusso: N.
  • Filtra per questo metodo: protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Listen"

OnDisconnectCancel

  • Metodo: google.firebase.database.v1.RealtimeDatabase.OnDisconnectCancel
  • Tipo di log di controllo: Accesso ai dati
  • Autorizzazioni:
    • firebasedatabase.data.cancel - DATA_READ
  • Il metodo è un'operazione a lunga esecuzione o in modalità flusso: N.
  • Filtra per questo metodo: protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.OnDisconnectCancel"

OnDisconnectPut

  • Metodo: google.firebase.database.v1.RealtimeDatabase.OnDisconnectPut
  • Tipo di log di controllo: Accesso ai dati
  • Autorizzazioni:
    • firebasedatabase.data.update - DATA_WRITE
  • Il metodo è un'operazione a lunga esecuzione o in streaming: No.
  • Filtra per questo metodo: protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.OnDisconnectPut"

OnDisconnectUpdate

  • Metodo: google.firebase.database.v1.RealtimeDatabase.OnDisconnectUpdate
  • Tipo di log di controllo: Accesso ai dati
  • Autorizzazioni:
    • firebasedatabase.data.update - DATA_WRITE
  • Il metodo è un'operazione a lunga esecuzione o in streaming: No.
  • Filtra per questo metodo: protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.OnDisconnectUpdate"

Read

  • Metodo: google.firebase.database.v1.RealtimeDatabase.Read
  • Tipo di log di controllo: Accesso ai dati
  • Autorizzazioni:
    • firebasedatabase.data.get - DATA_READ
  • Il metodo è un'operazione a lunga esecuzione o in modalità flusso: N.
  • Filtra per questo metodo: protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Read"

RunOnDisconnect

  • Metodo: google.firebase.database.v1.RealtimeDatabase.RunOnDisconnect
  • Tipo di log di controllo: Accesso ai dati
  • Autorizzazioni:
    • firebasedatabase.data.update - DATA_WRITE
  • Il metodo è un'operazione a lunga esecuzione o in modalità flusso: N.
  • Filtra per questo metodo: protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.RunOnDisconnect"

Unlisten

  • Metodo: google.firebase.database.v1.RealtimeDatabase.Unlisten
  • Tipo di log di controllo: Accesso ai dati
  • Autorizzazioni:
    • firebasedatabase.data.cancel - DATA_READ
  • Il metodo è un'operazione a lunga esecuzione o in modalità flusso: N.
  • Filtra per questo metodo: protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Unlisten"

Update

  • Metodo: google.firebase.database.v1.RealtimeDatabase.Update
  • Tipo di log di controllo: Accesso ai dati
  • Autorizzazioni:
    • firebasedatabase.data.get - DATA_WRITE
    • firebasedatabase.data.update - DATA_WRITE
  • Il metodo è un'operazione a lunga esecuzione o in streaming: No.
  • Filtra per questo metodo: protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Update"

Write

  • Metodo: google.firebase.database.v1.RealtimeDatabase.Write
  • Tipo di log di controllo: Accesso ai dati
  • Autorizzazioni:
    • firebasedatabase.data.update - DATA_WRITE
  • Il metodo è un'operazione a lunga esecuzione o in modalità flusso: N.
  • Filtra per questo metodo: protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Write"

google.firebase.database.v1beta.RealtimeDatabaseService

I seguenti audit log sono associati a metodi appartenenti a google.firebase.database.v1beta.RealtimeDatabaseService.

CreateDatabaseInstance

  • Metodo: google.firebase.database.v1beta.RealtimeDatabaseService.CreateDatabaseInstance
  • Tipo di log di controllo: Attività di amministrazione
  • Autorizzazioni:
    • firebasedatabase.instances.create - ADMIN_WRITE
  • Il metodo è un'operazione a lunga esecuzione o in streaming: No.
  • Filtra per questo metodo: protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.CreateDatabaseInstance"

DeleteDatabaseInstance

  • Metodo: google.firebase.database.v1beta.RealtimeDatabaseService.DeleteDatabaseInstance
  • Tipo di log di controllo: Attività di amministrazione
  • Autorizzazioni:
    • firebasedatabase.instances.delete - ADMIN_WRITE
  • Il metodo è un'operazione a lunga esecuzione o in streaming: No.
  • Filtra per questo metodo: protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.DeleteDatabaseInstance"

DisableDatabaseInstance

  • Metodo: google.firebase.database.v1beta.RealtimeDatabaseService.DisableDatabaseInstance
  • Tipo di log di controllo: Attività di amministrazione
  • Autorizzazioni:
    • firebasedatabase.instances.disable - ADMIN_WRITE
  • Il metodo è un'operazione a lunga esecuzione o in streaming: No.
  • Filtra per questo metodo: protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.DisableDatabaseInstance"

GetDatabaseInstance

  • Metodo: google.firebase.database.v1beta.RealtimeDatabaseService.GetDatabaseInstance
  • Tipo di log di controllo: Accesso ai dati
  • Autorizzazioni:
    • firebasedatabase.instances.get - ADMIN_READ
  • Il metodo è un'operazione a lunga esecuzione o in modalità flusso: N.
  • Filtra per questo metodo: protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.GetDatabaseInstance"

ListDatabaseInstances

  • Metodo: google.firebase.database.v1beta.RealtimeDatabaseService.ListDatabaseInstances
  • Tipo di log di controllo: Accesso ai dati
  • Autorizzazioni:
    • firebasedatabase.instances.list - ADMIN_READ
  • Il metodo è un'operazione a lunga esecuzione o in streaming: No.
  • Filtra per questo metodo: protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.ListDatabaseInstances"

ReenableDatabaseInstance

  • Metodo: google.firebase.database.v1beta.RealtimeDatabaseService.ReenableDatabaseInstance
  • Tipo di log di controllo: Attività di amministrazione
  • Autorizzazioni:
    • firebasedatabase.instances.reenable - ADMIN_WRITE
  • Il metodo è un'operazione a lunga esecuzione o in streaming: No.
  • Filtra per questo metodo: protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.ReenableDatabaseInstance"

UndeleteDatabaseInstance

  • Metodo: google.firebase.database.v1beta.RealtimeDatabaseService.UndeleteDatabaseInstance
  • Tipo di log di controllo: Attività di amministrazione
  • Autorizzazioni:
    • firebasedatabase.instances.undelete - ADMIN_WRITE
  • Il metodo è un'operazione a lunga esecuzione o in streaming: No.
  • Filtra per questo metodo: protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.UndeleteDatabaseInstance"

Controlla le informazioni di autenticazione

Le voci degli audit log includono informazioni sull'identità che ha eseguito l'operazione registrata. Per identificare un chiamante della richiesta, consulta i seguenti campi nell'oggetto AuditLog:

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

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

  • Firebase Authentication. Le operazioni di Realtime Database che utilizzano Firebase Authentication 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 mediante minting JWT personalizzati.

    • Se per l'autenticazione di terze parti è stato utilizzato un token JWT (JSON Web Token), il valore 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 della richiesta.
  • Nessuna autenticazione. Le operazioni 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 Un'istanza Realtime Database con regole di sicurezza aperte può concedere queste richieste. consigliamo a tutti gli utenti di proteggere correttamente i propri database.

  • Token secret legacy. Operazioni Realtime Database con token legacy presentano un oggetto AuthenticationInfo che contiene un segnaposto principalEmail di audit-secret-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com, Per i JWT firmati con secret, thirdPartyPrincipal contiene le intestazioni e il payload JWT.

Controlla le valutazioni di Firebase Security Rules

Gli audit log di Cloud possono essere utilizzati per identificare le richieste potenzialmente interessate dalle modifiche Rules.

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

  • 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. Non è richiesta alcuna autorizzazione per la connessione a un'istanza Realtime Database.
  • firebasedatabase.data.cancel: utilizzata per Unlisten e OnDisconnectCancel. La revoca o l'annullamento di un'operazione precedentemente autorizzata non richiede autorizzazione.

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

Puoi eseguire un'analisi approfondita del rendimento su Realtime Database utilizzando Realtime Database profiler in combinazione con Log di controllo di Realtime Database. Ogni strumento ha i suoi punti di forza.

Audit logging di Cloud Realtime Database profiler
  • Controlla l'accesso ai database
  • Acquisisce continuamente tutte le richieste
  • Consente query retrospettive
  • Contiene informazioni dettagliate sul token di autorizzazione
  • Prevede un costo di utilizzo
  • Utilizzato per l'analisi del rendimento
  • Fornisce strumenti utili per l'identificazione degli hotspot e quindi per l'ottimizzazione del rendimento
  • Può misurare ascoltatore-trasmissione, che non è disponibile negli audit log a causa del potenziale volume di dati
  • Leggero e in tempo reale, è ideale per i test di carico in tempo reale. Controllo la visualizzazione delle voci di log potrebbe richiedere alcuni minuti.

I contenuti dei log di controllo corrispondono alle metriche del profiler, come mostrato di seguito.

Nome dell'operazione di audit logging Valori speciali in
RealtimeDatabaseAuditMetadata
Nome operazione Profiler
Connetti RequestType è REALTIME connessione simultanea
Disconnetti RequestType è REALTIME disconnessione-contemporanea
Leggi RequestType è REALTIME realtime-read
Leggi RequestType è REST riprendi leggi
Scrittura RequestType è REALTIME scrittura in tempo reale
Scrittura RequestType è REST riprendi-scrivi
Aggiorna RequestType: REALTIME.
Seleziona PreconditionType.
aggiornamento-in tempo reale
transazione-in tempo reale
Aggiorna RequestType: REST.
Seleziona PreconditionType.
aggiornamento-rest
transazione-rest
ListenerListen RequestType è REALTIME ascolta-ascoltatore
ListenerUnlisten RequestType è REALTIME listener-unlisten
OnDisconnettiPut RequestType è REALTIME on-disconnect-put
OnDisconnettiUpdate RequestType è REALTIME on-disconnect-update
OnDisconnettiAnnulla RequestType è REALTIME on-disconnect-cancel
RunOnDisconnect RequestType è REALTIME run-on-disconnect