Seguridad para las bibliotecas cliente del servidor

Cuando usas las bibliotecas cliente del servidor para Firestore, puedes administrar los recursos con administración de identidades y accesos (IAM). IAM te permite brindar un acceso más detallado a recursos específicos de Google Cloud Platform y evita el acceso no deseado a otros recursos. En esta página, se describen las funciones y los permisos de IAM para Firestore. Para ver una descripción detallada de IAM, lee la documentación de IAM.

IAM te permite adoptar el principio de seguridad de menor privilegio, de manera que solo otorgues el acceso necesario a tus recursos.

IAM te permite configurar políticas para controlar quién (usuario) tiene qué (función) permiso para qué recursos. Las políticas de IAM asignan una o más funciones a un usuario, lo que le otorga ciertos permisos. Por ejemplo, puedes asignar la función datastore.indexAdmin a un usuario, lo que le permite crear, modificar, borrar, mostrar o ver índices.

Permisos y funciones

En esta sección, se resumen los permisos y las funciones que admite Firestore.

Permisos necesarios

La siguiente tabla muestra los permisos que debe tener el emisor para ejecutar cada acción:

Método Permisos necesarios
projects.databases.documents
batchGet datastore.entities.get
beginTransaction datastore.databases.get
Actualización o transformación de commit con la condición previa exists configurada como false datastore.entities.create
Actualización o transformación de commit con la condición previa exists configurada como truedatastore.entities.update
Actualización o transformación de commit sin condición previadatastore.entities.create
datastore.entities.update
Borrar commit datastore.entities.delete
createDocument datastore.entities.create
delete datastore.entities.delete
get datastore.entities.get
list datastore.entities.get
datastore.entities.list
listCollectionIds datastore.entities.list
patch datastore.entities.update
rollback datastore.databases.get
runQuery datastore.entities.get
datastore.entities.list
Actualización o transformación de write (RPC) con la condición previa exists configurada como false datastore.entities.create
Actualización o transformación de write (RPC) con la condición previa exists configurada como true datastore.entities.update
Actualización o transformación de write (RPC) sin condición previa datastore.entities.create
datastore.entities.update
Borrar write (RPC)datastore.entities.delete
projects.databases.indexes
create datastore.indexes.create
delete datastore.indexes.delete
get datastore.indexes.get
list datastore.indexes.list

Funciones

Con la IAM, cada método de API en Firestore exige que la cuenta que envía la solicitud a la API tenga los permisos apropiados para usar el recurso. Para otorgar los permisos, se configuran políticas que asignan funciones a un usuario, un grupo o una cuenta de servicio. Además de las funciones básicas, propietario, editor y lector, puedes otorgar funciones de Firestore a los usuarios del proyecto.

En la siguiente tabla, se muestran las funciones de IAM para Firestore. Puedes asignar varias funciones a un usuario, un grupo o una cuenta de servicio.

Función Permisos Descripción
roles/datastore.owner appengine.applications.get

datastore.*

resourcemanager.projects.get
resourcemanager.projects.list
Acceso completo a Firestore.
roles/datastore.user appengine.applications.get

datastore.databases.get
datastore.entities.*
datastore.indexes.list
datastore.namespaces.get
datastore.namespaces.list

resourcemanager.projects.get
resourcemanager.projects.list
Acceso de lectura y escritura a los datos de una base de datos de Firebase. Pensado para programadores de aplicaciones y cuentas de servicio.
roles/datastore.viewer appengine.applications.get

datastore.databases.get
datastore.entities.get
datastore.entities.list
datastore.indexes.get
datastore.indexes.list
datastore.namespaces.get
datastore.namespaces.list
datastore.statistics.get
datastore.statistics.list

resourcemanager.projects.get
resourcemanager.projects.list
Acceso de lectura a todos los recursos de Firestore.
roles/datastore.indexAdmin appengine.applications.get

datastore.indexes.*

resourcemanager.projects.get
resourcemanager.projects.list
Acceso completo para administrar definiciones de índices.

Permisos

En la siguiente tabla, se enumeran los permisos que admite Firestore.

Nombre del permiso de la base de datos Descripción
datastore.databases.get Inicia o revierte una transacción.
Lee los metadatos de una base de datos.
Nombre del permiso de la entidad Descripción
datastore.entities.create Crea un documento.
datastore.entities.delete Borra un documento.
datastore.entities.get Lee un documento.
datastore.entities.list Enumera los nombres de los documentos de un proyecto.
(datastore.entities.get es obligatorio para acceder a los datos del documento).
datastore.entities.update Actualiza un documento.
Nombre del permiso de índice Descripción
datastore.indexes.create Crea un índice.
datastore.indexes.delete Borra un índice.
datastore.indexes.get Lee metadatos de un índice.
datastore.indexes.list Muestra los índices de un proyecto.
datastore.indexes.update Actualiza un índice.
Nombre del permiso de proyecto Descripción
resourcemanager.projects.get Busca recursos en el proyecto.
resourcemanager.projects.list Muestra los proyectos propios.

Latencia del cambio de función

Firestore almacena los permisos de IAM en caché durante 5 minutos, por lo que un cambio de función tarda hasta 5 minutos en aplicarse.

Administra IAM de Firestore

Puedes obtener y configurar políticas de IAM con Google Cloud Console, la API de IAM o la herramienta de línea de comandos gcloud. Consulta cómo otorgar, cambiar y revocar el acceso de los miembros del proyecto para ver detalles.

Dependencia de las reglas de seguridad en IAM

Las reglas de seguridad de Firestore para clientes de dispositivos móviles o la Web dependen de la siguiente vinculación de IAM y la cuenta de servicio:

Cuenta de servicio Función de IAM
service-project_number@firebase-rules.iam.gserviceaccount.com roles/firebaserules.system

Firebase configura esta cuenta de servicio de forma automática. Si quitas la función firebaserules.system de esta cuenta de servicio, las reglas de seguridad rechazarán todas las solicitudes. Para restablecer esta vinculación de IAM, usa el siguiente comando de la herramienta de gcloud:

gcloud projects add-iam-policy-binding project_id \
--member=serviceAccount:service-project_number@firebase-rules.iam.gserviceaccount.com \
--role=roles/firebaserules.system

Para determinar el project_id y el project_number, consulta Identifica proyectos.

Usa la herramienta de línea de comandos de gcloud en lugar de Cloud Console, ya que la función firebaserules.system está oculta en la consola de forma predeterminada.

Próximos pasos