Seguridad para las bibliotecas cliente del servidor

Cuando usas las bibliotecas cliente del servidor para Firestore, puedes administrar el acceso a tus recursos con la administración de identidades y accesos (IAM). IAM te permite brindar 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 los permisos y las funciones de IAM para Firestore. Para obtener una descripción detallada de esta función, consulta 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 controlar quién (usuario) tiene qué (función) permiso para qué recursos mediante la configuración de políticas de IAM. Las políticas de IAM otorgan una o más funciones a un usuario, lo que le otorga ciertos permisos. Por ejemplo, puedes otorgar la función datastore.indexAdmin a un usuario, lo que le permite crear, modificar, borrar, enumerar o ver índices.

Permisos y funciones

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

Permisos obligatorios para los métodos de la API

En la siguiente tabla, se muestran los permisos que debe tener el llamador para realizar 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 existente establecida en false datastore.entities.create
Actualización o transformación de commit con la condición previa existente establecida en true datastore.entities.update
Actualización o transformación de commit sin condición previa datastore.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 existente establecida en false datastore.entities.create
Actualización o transformación de write (RPC) con la condición previa existente establecida en 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
projects.databases
get datastore.databases.getMetadata
list datastore.databases.list
patch datastore.databases.update
projects.locations
get datastore.locations.get
list datastore.locations.list

Funciones predefinidas

Con la IAM, cada método de la API en Firestore requiere que la cuenta que realiza la solicitud a la API tenga los permisos adecuados para usar el recurso. Los permisos se asignan mediante la configuración de políticas que otorgan funciones a un usuario, grupo o cuenta de servicio. Además de las funciones básicas, propietario, editor y visualizador, puedes otorgar funciones de Firestore a los usuarios de tu proyecto.

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

Rol 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
datastore.statistics.get
datastore.statistics.list

resourcemanager.projects.get
resourcemanager.projects.list
Acceso de lectura y escritura a los datos de una base de datos de Firestore. Está destinada a los desarrolladores 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.importExportAdmin appengine.applications.get
datastore.databases.export
datastore.databases.import
datastore.operations.cancel
datastore.operations.get
datastore.operations.list
resourcemanager.projects.get
resourcemanager.projects.list
Tiene acceso completo para administrar las importaciones y exportaciones.
roles/datastore.indexAdmin appengine.applications.get

datastore.indexes.*

resourcemanager.projects.get
resourcemanager.projects.list
Tiene acceso completo para administrar las definiciones de índices.

Funciones personalizadas

Si las funciones predefinidas no abordan los requisitos de tu empresa, puedes definir tus propias funciones personalizadas con los permisos que especifiques:

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 Leer metadatos de un índice.
datastore.indexes.list Genera una lista de los índices de un proyecto.
datastore.indexes.update Actualiza un índice.
Nombre del permiso del proyecto Descripción
resourcemanager.projects.get Explora los recursos del proyecto.
resourcemanager.projects.list Enumerar proyectos propios
Nombre del permiso de ubicación Descripción
datastore.locations.get Obtén detalles sobre la ubicación de la base de datos. Es obligatorio para crear una base de datos nueva.
datastore.locations.list Enumera las ubicaciones de bases de datos disponibles. Es obligatorio para crear una base de datos nueva.

Latencia del cambio de función

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

Administra IAM de Firestore

Puedes obtener y configurar políticas de IAM mediante Google Cloud Console, la API de IAM o la herramienta de línea de comandos de gcloud. Consulta Cómo otorgar, cambiar y revocar el acceso a los recursos para obtener más información.

Dependencia de regla de seguridad en IAM

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

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

Firebase configura esta cuenta de servicio por ti automáticamente. 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 CLI 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 tu project_id y project_number, consulta Identifica proyectos.

Usa la CLI de Google Cloud en lugar de Cloud Console, ya que la función firebaserules.system está oculta en la consola de forma predeterminada.

Próximos pasos