Audit logging di Firebase Realtime Database

Questo documento descrive l'audit logging per Firebase Realtime Database. I servizi Google Cloud generano audit log che registrano le attività amministrative e di accesso all'interno delle tue risorse Google Cloud. Per ulteriori informazioni su Cloud Audit Logs, 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

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 dalla 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 audit log degli Accessi ai dati. I metodi che richiedono un'autorizzazione IAM con il valore della proprietà type ADMIN_WRITE generano audit log delle Attività di amministrazione.

I metodi API nel seguente elenco contrassegnati con (LRO) sono operazioni a lunga esecuzione (LRO). Questi metodi in genere generano due voci del log di controllo: una all'inizio dell'operazione e un'altra al termine. Per saperne di più, consulta Audit log per le operazioni a lunga esecuzione.
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 ai metodi appartenenti a google.firebase.database.v1.RealtimeDatabase.

Connect

  • Metodo: google.firebase.database.v1.RealtimeDatabase.Connect
  • Tipo di audit log: 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 audit log: 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.Disconnect"

Listen

  • Metodo: google.firebase.database.v1.RealtimeDatabase.Listen
  • Tipo di audit log: accesso ai dati
  • Autorizzazioni:
    • firebasedatabase.data.get - DATA_READ
  • Il metodo è un'operazione a lunga esecuzione o in streaming: no.
  • Filtra per questo metodo: protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Listen"

OnDisconnectCancel

  • Metodo: google.firebase.database.v1.RealtimeDatabase.OnDisconnectCancel
  • Tipo di audit log: accesso ai dati
  • Autorizzazioni:
    • firebasedatabase.data.cancel - DATA_READ
  • Il metodo è un'operazione a lunga esecuzione o in streaming: no.
  • Filtra per questo metodo: protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.OnDisconnectCancel"

OnDisconnectPut

  • Metodo: google.firebase.database.v1.RealtimeDatabase.OnDisconnectPut
  • Tipo di audit log: 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 audit log: 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 audit log: accesso ai dati
  • Autorizzazioni:
    • firebasedatabase.data.get - DATA_READ
  • Il metodo è un'operazione a lunga esecuzione o in streaming: no.
  • Filtra per questo metodo: protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Read"

RunOnDisconnect

  • Metodo: google.firebase.database.v1.RealtimeDatabase.RunOnDisconnect
  • Tipo di audit log: 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.RunOnDisconnect"

Unlisten

  • Metodo: google.firebase.database.v1.RealtimeDatabase.Unlisten
  • Tipo di audit log: accesso ai dati
  • Autorizzazioni:
    • firebasedatabase.data.cancel - DATA_READ
  • Il metodo è un'operazione a lunga esecuzione o in streaming: no.
  • Filtra per questo metodo: protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Unlisten"

Update

  • Metodo: google.firebase.database.v1.RealtimeDatabase.Update
  • Tipo di audit log: 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 audit log: 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.Write"

google.firebase.database.v1beta.RealtimeDatabaseService

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

CreateDatabaseInstance

  • Metodo: google.firebase.database.v1beta.RealtimeDatabaseService.CreateDatabaseInstance
  • Tipo di audit log: 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 audit log: 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 audit log: 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 audit log: accesso ai dati
  • Autorizzazioni:
    • firebasedatabase.instances.get - ADMIN_READ
  • Il metodo è un'operazione a lunga esecuzione o in streaming: no.
  • Filtra per questo metodo: protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.GetDatabaseInstance"

ListDatabaseInstances

  • Metodo: google.firebase.database.v1beta.RealtimeDatabaseService.ListDatabaseInstances
  • Tipo di audit log: 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 audit log: 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 audit log: 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"

Informazioni di autenticazione di controllo

Le voci dell'audit log includono informazioni sull'identità che ha eseguito l'operazione registrata. Per identificare il chiamante di una richiesta, consulta i seguenti campi all'interno dell'oggetto AuditLog:

  • Creazione di connessioni in tempo reale. Le operazioni Realtime Database Connect non registrano i dati di autenticazione perché Realtime Database esegue l'autenticazione dopo che è stata stabilita una connessione. Pertanto, 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 da Firebase Admin SDK o le richieste REST autenticate con un token OAuth standard, hanno un oggetto AuthenticationInfo che contiene l'email con le credenziali effettive.

  • Firebase Authentication. Le operazioni 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 creando JWT personalizzati.

    • Se per l'autenticazione di terze parti è stato utilizzato un token JWT (JSON Web Token), il campo thirdPartyPrincipal include l'intestazione e il payload del token. Ad esempio, gli audit log 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 di secret legacy. Le operazioni Realtime Database che utilizzano token legacy hanno un oggetto AuthenticationInfo che contiene un segnaposto principalEmail di audit-secret-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com. Per il JWT firmato con secret, thirdPartyPrincipal contiene le intestazioni e il payload del JWT.

Valutazioni del controllo Firebase Security Rules

I log di Cloud Audit possono essere utilizzati per identificare le richieste che potrebbero essere interessate dalle modifiche di Rules.

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

  • 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 è necessaria alcuna autorizzazione per connettersi a un'istanza Realtime Database.
  • firebasedatabase.data.cancel: utilizzato per Unlisten e OnDisconnectCancel. La revoca o l'annullamento di un'operazione autorizzata in precedenza non richiede un'autorizzazione aggiuntiva.

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

Puoi eseguire un'analisi approfondita del rendimento di Realtime Database utilizzando il profiler Realtime Database in combinazione con il logging 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 di eseguire query retrospettive
  • Contiene informazioni dettagliate sul token di autorizzazione
  • Comporta un costo di utilizzo
  • Utilizzato per l'analisi del rendimento
  • Fornisce strumenti utili per l'identificazione degli hotspot e quindi l'ottimizzazione delle prestazioni
  • Può misurare la trasmissione dell'ascoltatore, che non è disponibile nei log audit a causa del potenziale volume di dati
  • Leggero e in tempo reale, il che lo rende ideale per i test di carico live. Potrebbero essere necessari alcuni minuti prima che vengano visualizzate le voci di log di controllo.

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 dell'operazione Profiler
Connetti RequestType è REALTIME concurrent-connect
Disconnetti RequestType è REALTIME concurrent-disconnect
Leggi RequestType è REALTIME realtime-read
Leggi RequestType è REST rest-read
Scrittura RequestType è REALTIME realtime-write
Scrittura RequestType è REST rest-write
Aggiorna RequestType è REALTIME.
Controlla PreconditionType.
realtime-update
realtime-transaction
Aggiorna RequestType è REST.
Controlla PreconditionType.
rest-update
rest-transaction
ListenerListen RequestType è REALTIME listener-listen
ListenerUnlisten RequestType è REALTIME listener-unlisten
OnDisconnectPut RequestType è REALTIME on-disconnect-put
OnDisconnectUpdate RequestType è REALTIME on-disconnect-update
OnDisconnectCancel RequestType è REALTIME on-disconnect-cancel
RunOnDisconnect RequestType è REALTIME run-on-disconnect