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 |
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 |
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 |
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
- Obtén más información sobre IAM.
- Asigna funciones de IAM.