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.GetDatabaseInstancegoogle.firebase.database.v1beta.RealtimeDatabaseService.ListDatabaseInstances |
ADMIN_WRITE |
google.firebase.database.v1beta.RealtimeDatabaseService.CreateDatabaseInstancegoogle.firebase.database.v1beta.RealtimeDatabaseService.DeleteDatabaseInstancegoogle.firebase.database.v1beta.RealtimeDatabaseService.DisableDatabaseInstancegoogle.firebase.database.v1beta.RealtimeDatabaseService.ReenableDatabaseInstancegoogle.firebase.database.v1beta.RealtimeDatabaseService.UndeleteDatabaseInstance |
DATA_READ |
google.firebase.database.v1.RealtimeDatabase.Connectgoogle.firebase.database.v1.RealtimeDatabase.Disconnectgoogle.firebase.database.v1.RealtimeDatabase.Listengoogle.firebase.database.v1.RealtimeDatabase.OnDisconnectCancelgoogle.firebase.database.v1.RealtimeDatabase.Readgoogle.firebase.database.v1.RealtimeDatabase.Unlisten |
DATA_WRITE |
google.firebase.database.v1.RealtimeDatabase.OnDisconnectPutgoogle.firebase.database.v1.RealtimeDatabase.OnDisconnectUpdategoogle.firebase.database.v1.RealtimeDatabase.RunOnDisconnectgoogle.firebase.database.v1.RealtimeDatabase.Updategoogle.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_WRITEfirebasedatabase.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
Connectnon registrano i dati di autenticazione perché Realtime Database esegue l'autenticazione dopo che è stata stabilita una connessione. Pertanto,Connectnon ha informazioni di autenticazione. L'oggettoAuthenticationInfocontiene un segnapostoprincipalEmaildiaudit-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
AuthenticationInfoche contiene l'email con le credenziali effettive.Firebase Authentication. Le operazioni Realtime Database che utilizzano Firebase Authentication hanno un oggetto
AuthenticationInfoche contiene un valoreprincipalEmaildiaudit-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
thirdPartyPrincipalinclude 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
AuthenticationInfoche contiene un valoreprincipalEmaildiaudit-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
AuthenticationInfoche contiene un segnapostoprincipalEmaildiaudit-secret-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com. Per il JWT firmato con secret,thirdPartyPrincipalcontiene 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 perConnecteDisconnect. Non è necessaria alcuna autorizzazione per connettersi a un'istanza Realtime Database.firebasedatabase.data.cancel: utilizzato perUnlisteneOnDisconnectCancel. 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 |