Journaux d'audit Firebase Realtime Database

Ce document décrit la journalisation d'audit pour Firebase Realtime Database. Les services Google Cloud génèrent des journaux d'audit qui enregistrent les activités d'administration et d'accès dans vos ressources Google Cloud. Pour en savoir plus sur Cloud Audit Logs, consultez les ressources suivantes :

Remarques

Pour en savoir plus sur les champs de protoPayload.metadata pour les opérations DATA_READ et DATA_WRITE, consultez la documentation de référence.

Nom du service

Les journaux d'audit Firebase Realtime Database utilisent le nom de service firebasedatabase.googleapis.com. Filtrez les résultats pour ce service :

    protoPayload.serviceName="firebasedatabase.googleapis.com"
  

Méthodes par type d'autorisation

Chaque autorisation IAM possède une propriété type, dont la valeur est une énumération pouvant être l'une des quatre valeurs suivantes: ADMIN_READ, ADMIN_WRITE, DATA_READ ou DATA_WRITE. Lorsque vous appelez une méthode, Firebase Realtime Database génère un journal d'audit dont la catégorie dépend de la propriété type de l'autorisation requise pour exécuter la méthode. Les méthodes nécessitant une autorisation IAM avec la valeur de la propriété type de DATA_READ, DATA_WRITE ou ADMIN_READ génèrent des journaux d'audit pour l'accès aux données. Les méthodes nécessitant une autorisation IAM avec la valeur de propriété type d'ADMIN_WRITE génèrent des journaux d'audit pour les activités d'administration.

Les méthodes d'API de la liste suivante marquées (LRO) sont des opérations de longue durée (LRO). Ces méthodes génèrent généralement deux entrées de journal d'audit : une au début de l'opération et une autre à la fin. Pour en savoir plus, consultez Journaux d'audit pour les opérations de longue durée.
Type d'autorisation Méthodes
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

Journaux d'audit d'interface API

Pour en savoir plus sur la manière dont les autorisations sont évaluées pour chaque méthode, consultez la documentation Cloud Identity and Access Management pour Firebase Realtime Database.

google.firebase.database.v1.RealtimeDatabase

Les journaux d'audit suivants sont associés aux méthodes appartenant à google.firebase.database.v1.RealtimeDatabase.

Connect

  • Méthode : google.firebase.database.v1.RealtimeDatabase.Connect
  • Type de journal d'audit : Accès aux données
  • Autorisations :
    • firebasedatabase.data.connect - DATA_READ
  • La méthode est une opération de longue durée ou en flux continu: Non.
  • Filtre pour cette méthode : protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Connect"

Disconnect

  • Méthode : google.firebase.database.v1.RealtimeDatabase.Disconnect
  • Type de journal d'audit : Accès aux données
  • Autorisations :
    • firebasedatabase.data.connect - DATA_READ
  • La méthode est une opération de longue durée ou en flux continu: Non.
  • Filtre pour cette méthode : protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Disconnect"

Listen

  • Méthode : google.firebase.database.v1.RealtimeDatabase.Listen
  • Type de journal d'audit : Accès aux données
  • Autorisations :
    • firebasedatabase.data.get - DATA_READ
  • La méthode est une opération de longue durée ou en flux continu: Non.
  • Filtre pour cette méthode : protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Listen"

OnDisconnectCancel

  • Méthode : google.firebase.database.v1.RealtimeDatabase.OnDisconnectCancel
  • Type de journal d'audit : Accès aux données
  • Autorisations :
    • firebasedatabase.data.cancel - DATA_READ
  • La méthode est une opération de longue durée ou en flux continu: Non.
  • Filtre pour cette méthode : protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.OnDisconnectCancel"

OnDisconnectPut

  • Méthode : google.firebase.database.v1.RealtimeDatabase.OnDisconnectPut
  • Type de journal d'audit : Accès aux données
  • Autorisations :
    • firebasedatabase.data.update - DATA_WRITE
  • La méthode est une opération de longue durée ou en flux continu: Non.
  • Filtre pour cette méthode : protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.OnDisconnectPut"

OnDisconnectUpdate

  • Méthode : google.firebase.database.v1.RealtimeDatabase.OnDisconnectUpdate
  • Type de journal d'audit : Accès aux données
  • Autorisations :
    • firebasedatabase.data.update - DATA_WRITE
  • La méthode est une opération de longue durée ou en flux continu: Non.
  • Filtre pour cette méthode : protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.OnDisconnectUpdate"

Read

  • Méthode : google.firebase.database.v1.RealtimeDatabase.Read
  • Type de journal d'audit : Accès aux données
  • Autorisations :
    • firebasedatabase.data.get - DATA_READ
  • La méthode est une opération de longue durée ou en flux continu: Non.
  • Filtre pour cette méthode : protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Read"

RunOnDisconnect

  • Méthode : google.firebase.database.v1.RealtimeDatabase.RunOnDisconnect
  • Type de journal d'audit : Accès aux données
  • Autorisations :
    • firebasedatabase.data.update - DATA_WRITE
  • La méthode est une opération de longue durée ou en flux continu: Non.
  • Filtre pour cette méthode : protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.RunOnDisconnect"

Unlisten

  • Méthode : google.firebase.database.v1.RealtimeDatabase.Unlisten
  • Type de journal d'audit : Accès aux données
  • Autorisations :
    • firebasedatabase.data.cancel - DATA_READ
  • La méthode est une opération de longue durée ou en flux continu: Non.
  • Filtre pour cette méthode : protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Unlisten"

Update

  • Méthode : google.firebase.database.v1.RealtimeDatabase.Update
  • Type de journal d'audit : Accès aux données
  • Autorisations :
    • firebasedatabase.data.get - DATA_WRITE
    • firebasedatabase.data.update - DATA_WRITE
  • La méthode est une opération de longue durée ou en flux continu: Non.
  • Filtre pour cette méthode : protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Update"

Write

  • Méthode : google.firebase.database.v1.RealtimeDatabase.Write
  • Type de journal d'audit : Accès aux données
  • Autorisations :
    • firebasedatabase.data.update - DATA_WRITE
  • La méthode est une opération de longue durée ou en flux continu: Non.
  • Filtre pour cette méthode : protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Write"

google.firebase.database.v1beta.RealtimeDatabaseService

Les journaux d'audit suivants sont associés aux méthodes appartenant à google.firebase.database.v1beta.RealtimeDatabaseService.

CreateDatabaseInstance

  • Méthode : google.firebase.database.v1beta.RealtimeDatabaseService.CreateDatabaseInstance
  • Type de journal d'audit: Activité d'administration
  • Autorisations :
    • firebasedatabase.instances.create - ADMIN_WRITE
  • La méthode est une opération de longue durée ou en flux continu: Non.
  • Filtre pour cette méthode : protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.CreateDatabaseInstance"

DeleteDatabaseInstance

  • Méthode : google.firebase.database.v1beta.RealtimeDatabaseService.DeleteDatabaseInstance
  • Type de journal d'audit: Activité d'administration
  • Autorisations :
    • firebasedatabase.instances.delete - ADMIN_WRITE
  • La méthode est une opération de longue durée ou en flux continu: Non.
  • Filtre pour cette méthode : protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.DeleteDatabaseInstance"

DisableDatabaseInstance

  • Méthode : google.firebase.database.v1beta.RealtimeDatabaseService.DisableDatabaseInstance
  • Type de journal d'audit: Activité d'administration
  • Autorisations :
    • firebasedatabase.instances.disable - ADMIN_WRITE
  • La méthode est une opération de longue durée ou en flux continu: Non.
  • Filtre pour cette méthode : protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.DisableDatabaseInstance"

GetDatabaseInstance

  • Méthode : google.firebase.database.v1beta.RealtimeDatabaseService.GetDatabaseInstance
  • Type de journal d'audit : Accès aux données
  • Autorisations :
    • firebasedatabase.instances.get - ADMIN_READ
  • La méthode est une opération de longue durée ou en flux continu: Non.
  • Filtre pour cette méthode : protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.GetDatabaseInstance"

ListDatabaseInstances

  • Méthode : google.firebase.database.v1beta.RealtimeDatabaseService.ListDatabaseInstances
  • Type de journal d'audit : Accès aux données
  • Autorisations :
    • firebasedatabase.instances.list - ADMIN_READ
  • La méthode est une opération de longue durée ou en flux continu: Non.
  • Filtre pour cette méthode : protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.ListDatabaseInstances"

ReenableDatabaseInstance

  • Méthode : google.firebase.database.v1beta.RealtimeDatabaseService.ReenableDatabaseInstance
  • Type de journal d'audit: Activité d'administration
  • Autorisations :
    • firebasedatabase.instances.reenable - ADMIN_WRITE
  • La méthode est une opération de longue durée ou en flux continu: Non.
  • Filtre pour cette méthode : protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.ReenableDatabaseInstance"

UndeleteDatabaseInstance

  • Méthode : google.firebase.database.v1beta.RealtimeDatabaseService.UndeleteDatabaseInstance
  • Type de journal d'audit: Activité d'administration
  • Autorisations :
    • firebasedatabase.instances.undelete - ADMIN_WRITE
  • La méthode est une opération de longue durée ou en flux continu: Non.
  • Filtre pour cette méthode : protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.UndeleteDatabaseInstance"

Auditer les informations d'authentification

Les entrées du journal d'audit incluent des informations sur l'identité qui a effectué l'opération enregistrée. Pour identifier un appelant de requête, consultez les champs suivants dans l'objet AuditLog :

  • Établissement de connexions en temps réel. Les opérations Realtime Database Connect n'enregistrent pas les données d'authentification, car Realtime Database s'authentifie après l'établissement d'une connexion. Par conséquent, Connect ne contient aucune information d'authentification. L'objet AuthenticationInfo contient un espace réservé principalEmail de audit-pending-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com.

  • Authentification Google : Les opérations Realtime Database qui utilisent l'authentification Google standard, comme le trafic provenant de Firebase Admin SDK ou les requêtes REST authentifiées avec un jeton OAuth standard, disposent d'un objet AuthenticationInfo contenant l'adresse e-mail des identifiants réels.

  • Les opérations Realtime Database qui utilisent Firebase AuthenticationFirebase Authentication ont un objet AuthenticationInfo qui contient une valeur principalEmail de audit-third-party-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com. Il en va de même si vous implémentez votre propre solution d'authentification en générant des JWT personnalisés.

    • Si un jeton Web JSON (JWT) a été utilisé pour l'authentification tierce, le champ thirdPartyPrincipal inclut l'en-tête et la charge utile du jeton. Par exemple, les journaux d'audit des requêtes authentifiées avec Firebase Authentication incluent le jeton Firebase Authentication de cette requête.
  • Aucune authentification. Les opérations Realtime Database qui n'utilisent aucune authentification ont un objet AuthenticationInfo qui contient une valeur principalEmail de audit-no-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com. Une instance Realtime Database avec des règles de sécurité ouvertes peut accorder de telles requêtes. Nous recommandons à tous les utilisateurs de sécuriser correctement leurs bases de données.

  • Anciens jetons secrets Les opérations Realtime Database utilisant des anciens jetons comportent un objet AuthenticationInfo contenant un espace réservé principalEmail de audit-secret-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com. Pour les jetons JWT signés par des secrets, thirdPartyPrincipal contient les en-têtes et la charge utile JWT.

Auditer les évaluations Firebase Security Rules

Les journaux d'audit Cloud peuvent être utilisés pour identifier les requêtes potentiellement affectées par les modifications apportées à Rules.

Dans l'objet AuthorizationInfo, authorization.permission peut être l'une des valeurs suivantes :

  • firebasedatabase.data.get : accès en lecture accordé au chemin d'accès spécifié dans resource.
  • firebasedatabase.data.update : accès en écriture accordé au chemin d'accès spécifié dans resource.
  • firebasedatabase.data.connect : espace réservé pour Connect et Disconnect. Aucune autorisation n'est requise pour se connecter à une instance Realtime Database.
  • firebasedatabase.data.cancel : utilisé pour Unlisten et OnDisconnectCancel. La révocation ou l'annulation d'une opération précédemment autorisée ne nécessite aucune autorisation supplémentaire.

Corréler les journaux d'audit Cloud avec les résultats du profileur Realtime Database

Vous pouvez effectuer une analyse approfondie des performances sur Realtime Database à l'aide du profiler Realtime Database en combinaison avec la journalisation d'audit Realtime Database. Chaque outil possède ses propres avantages.

Cloud Audit Logging Profiler Realtime Database
  • Auditer l'accès aux bases de données
  • Capture en continu toutes les requêtes
  • Permet d'effectuer des requêtes rétrospectives
  • Contient des informations détaillées sur le jeton d'authentification
  • Des frais d'utilisation s'appliquent.
  • Utilisé pour l'analyse des performances
  • Fournit des outils utiles pour identifier les points chauds et ainsi optimiser les performances
  • Peut mesurer listener-broadcast, qui n'est pas disponible dans les journaux d'audit en raison du volume de données potentiel
  • Léger et en temps réel, il est idéal pour les tests de charge en direct. L'affichage des entrées du journal d'audit peut prendre quelques minutes.

Le contenu des journaux d'audit correspond aux métriques du profileur, comme indiqué ci-dessous.

Nom de l'opération Audit Logging Valeurs spéciales dans
RealtimeDatabaseAuditMetadata
Nom de l'opération Profiler
Connecter RequestType correspond à REALTIME. concurrent-connect
Déconnecter RequestType correspond à REALTIME. concurrent-disconnect
Lire RequestType correspond à REALTIME. realtime-read
Lire RequestType correspond à REST. rest-read
Écriture RequestType correspond à REALTIME. realtime-write
Écriture RequestType correspond à REST. rest-write
Mettre à jour RequestType correspond à REALTIME.
Cochez PreconditionType.
realtime-update
realtime-transaction
Mettre à jour RequestType correspond à REST.
Cochez PreconditionType.
rest-update
rest-transaction
ListenerListen RequestType correspond à REALTIME. listener-listen
ListenerUnlisten RequestType correspond à REALTIME. listener-unlisten
OnDisconnectPut RequestType correspond à REALTIME. on-disconnect-put
OnDisconnectUpdate RequestType correspond à REALTIME. on-disconnect-update
OnDisconnectCancel RequestType correspond à REALTIME. on-disconnect-cancel
RunOnDisconnect RequestType correspond à REALTIME. run-on-disconnect