Registro de auditoría de Firebase Realtime Database

En este documento, se describen los registros de auditoría de Firebase Realtime Database. Los servicios de Google Cloud generan registros de auditoría que registran las actividades administrativas y de acceso dentro de tus recursos de Google Cloud. Para obtener más información sobre los Registros de auditoría de Cloud, consulta los siguientes recursos:

Notas

Puedes encontrar información adicional sobre los campos en protoPayload.metadata para las operaciones DATA_READ y DATA_WRITE en la documentación de referencia.

Nombre del servicio

Los registros de auditoría de Firebase Realtime Database usan el nombre de servicio firebasedatabase.googleapis.com. Filtra este servicio:

    protoPayload.serviceName="firebasedatabase.googleapis.com"
  

Métodos por tipo de permiso

Cada permiso de IAM tiene una propiedad type, cuyo valor es una enumeración que puede ser uno de cuatro valores: ADMIN_READ, ADMIN_WRITE, DATA_READ o DATA_WRITE. Cuando llamas a un método, Firebase Realtime Database genera un registro de auditoría cuya categoría depende de la propiedad type del permiso necesario para realizar el método. Los métodos que requieren un permiso de IAM con el valor de propiedad type de DATA_READ, DATA_WRITE o ADMIN_READ generan registros de auditoría de acceso a los datos. Los métodos que requieren un permiso de IAM con el valor de propiedad type de ADMIN_WRITE generan registros de auditoría de actividad del administrador.

Tipo de permiso Métodos
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

Registros de auditoría de la interfaz de la API

Si quieres obtener información sobre cómo y qué permisos se evalúan para cada método, consulta la documentación de Cloud Identity and Access Management para Firebase Realtime Database.

google.firebase.database.v1.RealtimeDatabase

Los siguientes registros de auditoría están asociados con métodos que pertenecen a google.firebase.database.v1.RealtimeDatabase.

Connect

  • Método: google.firebase.database.v1.RealtimeDatabase.Connect
  • Tipo de registro de auditoría: acceso a los datos
  • Permisos:
    • firebasedatabase.data.connect - DATA_READ
  • El método es una operación de larga duración o de transmisión: no.
  • Filtra para este método: protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Connect"

Disconnect

  • Método: google.firebase.database.v1.RealtimeDatabase.Disconnect
  • Tipo de registro de auditoría: acceso a los datos
  • Permisos:
    • firebasedatabase.data.connect - DATA_READ
  • El método es una operación de larga duración o de transmisión: no.
  • Filtra para este método: protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Disconnect"

Listen

  • Método: google.firebase.database.v1.RealtimeDatabase.Listen
  • Tipo de registro de auditoría: acceso a los datos
  • Permisos:
    • firebasedatabase.data.get - DATA_READ
  • El método es una operación de larga duración o de transmisión: no.
  • Filtra para este método: protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Listen"

OnDisconnectCancel

  • Método: google.firebase.database.v1.RealtimeDatabase.OnDisconnectCancel
  • Tipo de registro de auditoría: acceso a los datos
  • Permisos:
    • firebasedatabase.data.cancel - DATA_READ
  • El método es una operación de larga duración o de transmisión: no.
  • Filtra para este método: protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.OnDisconnectCancel"

OnDisconnectPut

  • Método: google.firebase.database.v1.RealtimeDatabase.OnDisconnectPut
  • Tipo de registro de auditoría: acceso a los datos
  • Permisos:
    • firebasedatabase.data.update - DATA_WRITE
  • El método es una operación de larga duración o de transmisión: no.
  • Filtra para este método: protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.OnDisconnectPut"

OnDisconnectUpdate

  • Método: google.firebase.database.v1.RealtimeDatabase.OnDisconnectUpdate
  • Tipo de registro de auditoría: acceso a los datos
  • Permisos:
    • firebasedatabase.data.update - DATA_WRITE
  • El método es una operación de larga duración o de transmisión: no.
  • Filtra para este método: protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.OnDisconnectUpdate"

Read

  • Método: google.firebase.database.v1.RealtimeDatabase.Read
  • Tipo de registro de auditoría: acceso a los datos
  • Permisos:
    • firebasedatabase.data.get - DATA_READ
  • El método es una operación de larga duración o de transmisión: no.
  • Filtra para este método: protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Read"

RunOnDisconnect

  • Método: google.firebase.database.v1.RealtimeDatabase.RunOnDisconnect
  • Tipo de registro de auditoría: acceso a los datos
  • Permisos:
    • firebasedatabase.data.update - DATA_WRITE
  • El método es una operación de larga duración o de transmisión: no.
  • Filtra para este método: protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.RunOnDisconnect"

Unlisten

  • Método: google.firebase.database.v1.RealtimeDatabase.Unlisten
  • Tipo de registro de auditoría: acceso a los datos
  • Permisos:
    • firebasedatabase.data.cancel - DATA_READ
  • El método es una operación de larga duración o de transmisión: no.
  • Filtra para este método: protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Unlisten"

Update

  • Método: google.firebase.database.v1.RealtimeDatabase.Update
  • Tipo de registro de auditoría: acceso a los datos
  • Permisos:
    • firebasedatabase.data.get - DATA_WRITE
    • firebasedatabase.data.update - DATA_WRITE
  • El método es una operación de larga duración o de transmisión: no.
  • Filtra para este método: protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Update"

Write

  • Método: google.firebase.database.v1.RealtimeDatabase.Write
  • Tipo de registro de auditoría: acceso a los datos
  • Permisos:
    • firebasedatabase.data.update - DATA_WRITE
  • El método es una operación de larga duración o de transmisión: no.
  • Filtra para este método: protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Write"

google.firebase.database.v1beta.RealtimeDatabaseService

Los siguientes registros de auditoría están asociados con métodos que pertenecen a google.firebase.database.v1beta.RealtimeDatabaseService.

CreateDatabaseInstance

  • Método: google.firebase.database.v1beta.RealtimeDatabaseService.CreateDatabaseInstance
  • Tipo de registro de auditoría: actividad del administrador
  • Permisos:
    • firebasedatabase.instances.create - ADMIN_WRITE
  • El método es una operación de larga duración o de transmisión: no.
  • Filtra para este método: protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.CreateDatabaseInstance"

DeleteDatabaseInstance

  • Método: google.firebase.database.v1beta.RealtimeDatabaseService.DeleteDatabaseInstance
  • Tipo de registro de auditoría: actividad del administrador
  • Permisos:
    • firebasedatabase.instances.delete - ADMIN_WRITE
  • El método es una operación de larga duración o de transmisión: no.
  • Filtra para este método: protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.DeleteDatabaseInstance"

DisableDatabaseInstance

  • Método: google.firebase.database.v1beta.RealtimeDatabaseService.DisableDatabaseInstance
  • Tipo de registro de auditoría: actividad del administrador
  • Permisos:
    • firebasedatabase.instances.disable - ADMIN_WRITE
  • El método es una operación de larga duración o de transmisión: no.
  • Filtra para este método: protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.DisableDatabaseInstance"

GetDatabaseInstance

  • Método: google.firebase.database.v1beta.RealtimeDatabaseService.GetDatabaseInstance
  • Tipo de registro de auditoría: acceso a los datos
  • Permisos:
    • firebasedatabase.instances.get - ADMIN_READ
  • El método es una operación de larga duración o de transmisión: no.
  • Filtra para este método: protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.GetDatabaseInstance"

ListDatabaseInstances

  • Método: google.firebase.database.v1beta.RealtimeDatabaseService.ListDatabaseInstances
  • Tipo de registro de auditoría: acceso a los datos
  • Permisos:
    • firebasedatabase.instances.list - ADMIN_READ
  • El método es una operación de larga duración o de transmisión: no.
  • Filtra para este método: protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.ListDatabaseInstances"

ReenableDatabaseInstance

  • Método: google.firebase.database.v1beta.RealtimeDatabaseService.ReenableDatabaseInstance
  • Tipo de registro de auditoría: actividad del administrador
  • Permisos:
    • firebasedatabase.instances.reenable - ADMIN_WRITE
  • El método es una operación de larga duración o de transmisión: no.
  • Filtra para este método: protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.ReenableDatabaseInstance"

UndeleteDatabaseInstance

  • Método: google.firebase.database.v1beta.RealtimeDatabaseService.UndeleteDatabaseInstance
  • Tipo de registro de auditoría: actividad del administrador
  • Permisos:
    • firebasedatabase.instances.undelete - ADMIN_WRITE
  • El método es una operación de larga duración o de transmisión: no.
  • Filtra para este método: protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.UndeleteDatabaseInstance"

Información de autenticación de auditoría

Las entradas de registro de auditoría incluyen información sobre la identidad que realizó la operación registrada. Para identificar un llamador de solicitudes, consulta los siguientes campos dentro del objeto AuditLog:

  • Establece conexiones en tiempo real. Las operaciones Connect de Realtime Database no registran datos de autenticación, ya que Realtime Database se autentica después de que se establece una conexión. Por lo tanto, Connect no tiene información de autenticación. El objeto AuthenticationInfo contiene un principalEmail de marcador de posición de audit-pending-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com.

  • Autenticación de Google. Las operaciones de Realtime Database que usan la autenticación estándar de Google, como el tráfico de Firebase Admin SDK o las solicitudes de REST autenticadas con un token estándar de OAuth, tienen un objeto AuthenticationInfo que contiene el correo electrónico de las credenciales reales.

  • Firebase Authentication. Las operaciones de Realtime Database que usan Firebase Authentication tienen un objeto AuthenticationInfo que contiene un valor principalEmail de audit-third-party-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com. Lo mismo sucede si implementas tu propia solución de autenticación mediante la creación de JWT personalizados.

    • Si se usó un token web JSON (JWT) para la autenticación de terceros, el campo thirdPartyPrincipal incluye el encabezado y la carga útil del token. Por ejemplo, los registros de auditoría para solicitudes autenticadas con Firebase Authentication incluyen el token de Firebase Authentication de esa solicitud.
  • Sin autenticación. Las operaciones de Realtime Database que no usan autenticación tienen un objeto AuthenticationInfo que contiene un valor principalEmail de audit-no-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com. Una instancia de Realtime Database con reglas de seguridad abiertas puede otorgar acceso a esas solicitudes. Recomendamos a todos los usuarios que protejan sus bases de datos de forma adecuada.

  • Tokens de secretos heredados. Las operaciones de Realtime Database que usan tokens heredados tienen un objeto AuthenticationInfo que contiene un marcador de posición principalEmail de audit-secret-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com. Para los JWT firmados con Secrets, thirdPartyPrincipal contiene los encabezados y la carga útil de JWT.

Audita las evaluaciones de Firebase Security Rules

Los Registros de auditoría de Cloud se pueden usar para identificar las solicitudes que podrían verse afectadas por los cambios en Rules.

En el objeto AuthorizationInfo, authorization.permission puede ser una de las siguientes opciones:

  • firebasedatabase.data.get: El acceso de lectura se otorga en la ruta de acceso especificada en resource.
  • firebasedatabase.data.update: El acceso de escritura se otorga en la ruta de acceso especificada en resource.
  • firebasedatabase.data.connect: Marcador de posición para Connect y Disconnect. No se requiere autorización para conectarse a una instancia de Realtime Database.
  • firebasedatabase.data.cancel: Se usa para Unlisten y OnDisconnectCancel. Revocar o cancelar una operación autorizada con anterioridad no requiere una autorización adicional.

Correlaciona los Registros de auditoría de Cloud con los resultados del generador de perfiles de Realtime Database

Puedes realizar un análisis de rendimiento detallado en Realtime Database con el generador de perfiles de Realtime Database en combinación con los registros de auditoría de Realtime Database. Cada herramienta tiene sus puntos fuertes.

Registros de auditoría de Cloud Generador de perfiles de Realtime Database
  • Audita el acceso a las bases de datos
  • Captura continuamente todas las solicitudes
  • Permite las consultas retrospectivas
  • Contiene información detallada del token de autenticación
  • Tiene un costo de uso
  • Se usa para el análisis de rendimiento
  • Proporciona herramientas útiles para la identificación de hotspots y, por lo tanto, la optimización del rendimiento
  • Puede medir listener-broadcast, que no está disponible en los registros de auditoría debido a los posibles volúmenes de datos
  • Diseño liviano y en tiempo real, ideal para pruebas de carga en vivo Las entradas del registro de auditoría pueden tardar unos minutos en aparecer

El contenido de los registros de auditoría corresponde a las métricas del generador de perfiles, como se muestra a continuación.

Nombre de la operación de registro de auditoría Valores especiales en
RealtimeDatabaseAuditMetadata
Nombre de la operación del generador de perfiles
Conectar RequestType es REALTIME concurrent-connect
Desconectar RequestType es REALTIME concurrent-disconnect
Leer RequestType es REALTIME realtime-read
Leer RequestType es REST rest-read
Escribir RequestType es REALTIME realtime-write
Escribir RequestType es REST rest-write
Actualizar RequestType es REALTIME.
Revisa PreconditionType.
realtime-update
realtime-transaction
Actualizar RequestType es REST.
Revisa PreconditionType.
rest-update
rest-transaction
ListenerListen RequestType es REALTIME listener-listen
ListenerUnlisten RequestType es REALTIME listener-unlisten
OnDisconnectPut RequestType es REALTIME on-disconnect-put
OnDisconnectUpdate RequestType es REALTIME on-disconnect-update
OnDisconnectCancel RequestType es REALTIME on-disconnect-cancel
RunOnDisconnect RequestType es REALTIME run-on-disconnect