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:
- Tipi di audit log
- Struttura della voce di audit log
- Archiviazione e routing degli audit log
- Riepilogo dei prezzi di Cloud Logging
- Abilita gli audit log di accesso ai dati
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.
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'oggettoAuthenticationInfo
contiene un segnapostoprincipalEmail
diaudit-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 valoreprincipalEmail
diaudit-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.
- Se per l'autenticazione di terze parti è stato utilizzato un token JWT (JSON Web Token), il campo
Nessuna autenticazione. Le operazioni Realtime Database che non utilizzano alcuna autenticazione hanno un oggetto
AuthenticationInfo
che contiene un valoreprincipalEmail
diaudit-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 segnapostoprincipalEmail
diaudit-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 inresource
.firebasedatabase.data.update
: accesso in scrittura concesso nel percorso specificato inresource
.firebasedatabase.data.connect
: segnaposto perConnect
eDisconnect
. Non è necessaria alcuna autorizzazione per connettersi a un'istanza Realtime Database.firebasedatabase.data.cancel
: utilizzato perUnlisten
eOnDisconnectCancel
. 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 |
---|---|
|
|
I contenuti dei log di controllo corrispondono alle metriche del profiler come mostrato di seguito.
Nome dell'operazione di audit logging | Valori speciali inRealtimeDatabaseAuditMetadata |
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 |