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 obligatorios para los métodos de API
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 |
Actualización o transformación de batchWrite con la condición previa exists configurada como false |
datastore.entities.create |
Actualización o transformación de batchWrite con la condición previa exists configurada como true |
datastore.entities.create |
Actualización o transformación de batchWrite sin condición previa | datastore.entities.create
|
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 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 |
partitionQuery |
datastore.entities.get |
patch |
datastore.entities.update |
rollback |
datastore.databases.get |
runAggregationQuery |
datastore.entities.get |
runQuery |
datastore.entities.get |
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 |
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 |
|
create |
datastore.databases.create |
delete |
datastore.databases.delete |
get |
datastore.databases.getMetadata |
list |
datastore.databases.list |
patch |
datastore.databases.update |
restore | datastore.backups.restoreDatabase |
projects.locations |
|
get |
datastore.locations.get |
list |
datastore.locations.list |
projects.databases.backupschedules |
|
get | datastore.backupSchedules.get |
list | datastore.backupSchedules.list |
create | datastore.backupSchedules.create |
update | datastore.backupSchedules.update |
delete | datastore.backupSchedules.delete |
projects.locations.backups |
|
get | datastore.backups.get |
list | datastore.backups.list |
delete | datastore.backups.delete |
Funciones predefinidas
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.databases.getMetadata datastore.databases.list 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 Firebase. Pensado para programadores de aplicaciones y cuentas de servicio. |
roles/datastore.viewer |
appengine.applications.get datastore.databases.get datastore.databases.getMetadata datastore.databases.list 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.getMetadata datastore.databases.import datastore.operations.cancel datastore.operations.get datastore.operations.list resourcemanager.projects.get resourcemanager.projects.list |
Acceso total para administrar importaciones y exportaciones |
roles/datastore.indexAdmin |
appengine.applications.get datastore.databases.getMetadata datastore.indexes.* resourcemanager.projects.get resourcemanager.projects.list |
Acceso completo para administrar definiciones de índices |
roles/datastore.keyVisualizerViewer |
datastore.databases.getMetadata datastore.keyVisualizerScans.get datastore.keyVisualizerScans.list resourcemanager.projects.get resourcemanager.projects.list |
Tiene acceso completo a los análisis de Key Visualizer. |
roles/datastore.backupSchedulesViewer |
datastore.backupSchedules.get datastore.backupSchedules.list |
Tiene acceso de lectura a las programaciones de copias de seguridad en una base de datos de Firestore. |
roles/datastore.backupSchedulesAdmin |
datastore.backupSchedules.get datastore.backupSchedules.list datastore.backupSchedules.create datastore.backupSchedules.update datastore.backupSchedules.delete datastore.databases.list datastore.databases.getMetadata |
Tiene acceso completo a las programaciones de copias de seguridad en una base de datos de Firestore. |
roles/datastore.backupsViewer |
datastore.backups.get datastore.backups.list |
Tiene acceso de lectura a la información de las copias de seguridad en una ubicación de Firestore. |
roles/datastore.backupsAdmin |
datastore.backups.get datastore.backups.list datastore.backups.delete |
Acceso completo a las copias de seguridad en una ubicación de Firestore. |
roles/datastore.restoreAdmin |
datastore.backups.get datastore.backups.list datastore.backups.restoreDatabase datastore.databases.list datastore.databases.create datastore.databases.getMetadata datastore.operations.list datastore.operations.get |
Capacidad de restablecer una copia de seguridad de Firestore en una base de datos nueva Este rol también permite crear bases de datos nuevas, no necesariamente a través del restablecimiento desde una copia de seguridad. |
Funciones personalizadas
Si las funciones predefinidas no responden a tus requisitos comerciales, 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. | |
datastore.databases.import |
Importa entidades a una base de datos. | |
datastore.databases.export |
Exporta entidades de una base de datos. | |
datastore.databases.getMetadata |
Lee metadatos de una base de datos. | |
datastore.databases.list |
Enumera las bases de datos de un proyecto. | |
datastore.databases.create |
Crea una base de datos. | |
datastore.databases.update |
Actualiza una base de datos. | |
datastore.databases.delete |
Borra una base de datos. | |
datastore.databases.createTagBinding |
Crea una vinculación de etiquetas para una base de datos. | |
datastore.databases.deleteTagBinding |
Borrar una vinculación de etiqueta para una base de datos | |
datastore.databases.listTagBindings |
Enumera todas las vinculaciones de etiquetas de una base de datos. | |
datastore.databases.listEffectiveTagBindings |
Enumerar las vinculaciones de etiquetas eficaces para 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 la operación | Descripción | |
datastore.operations.cancel |
Cancela una operación de larga duración. | |
datastore.operations.delete |
Borra una operación de larga duración. | |
datastore.operations.get |
Obtiene el último estado de una operación de larga duración. | |
datastore.operations.list |
Muestra las operaciones de larga duración. | |
Nombre del permiso de proyecto | Descripción | |
resourcemanager.projects.get |
Busca recursos en el proyecto. | |
resourcemanager.projects.list |
Muestra los proyectos propios. | |
Nombre del permiso de ubicación | Descripción | |
datastore.locations.get |
Obtén detalles sobre la ubicación de una base de datos. Obligatorio para crear una nueva base de datos. | |
datastore.locations.list |
Enumera las ubicaciones de las bases de datos disponibles. Obligatorio para crear una nueva base de datos. | |
Nombre del permiso de Key Visualizer | Descripción | |
datastore.keyVisualizerScans.get |
Obtén detalles sobre los análisis de Key Visualizer. | |
datastore.keyVisualizerScans.list |
Enumera los análisis de Key Visualizer disponibles. | |
Nombre del permiso de programación de la copia de seguridad | Descripción | |
datastore.backupSchedules.get |
Obtener detalles sobre el programa de una copia de seguridad | |
datastore.backupSchedules.list |
Enumera los programas de copias de seguridad disponibles. | |
datastore.backupSchedules.create |
Crear un programa de copia de seguridad | |
datastore.backupSchedules.update |
Actualizar un programa de copia de seguridad | |
datastore.backupSchedules.delete |
Borra una programación de copia de seguridad. | |
Nombre del permiso de la copia de seguridad | Descripción | |
datastore.backups.get |
Obtén detalles sobre una copia de seguridad. | |
datastore.backups.list |
Enumera las copias de seguridad disponibles. | |
datastore.backups.delete |
Borra una copia de seguridad. | |
datastore.backups.restoreDatabase |
Restablece una base de datos a partir de una copia de seguridad. |
Latencia del cambio de funciones
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 establecer políticas de IAM con la consola de Google Cloud,
la API de IAM o la
Herramienta de línea de comandos de gcloud
. Consulta cómo otorgar, cambiar y revocar el acceso de los miembros del proyecto para ver detalles.
Configura permisos de acceso condicional
Puedes usar las condiciones de IAM para lo siguiente: definir y aplicar el control de acceso condicional.
Por ejemplo, la siguiente condición le asigna a una principal la datastore.user
hasta una fecha específica:
{
"role": "roles/datastore.user",
"members": [
"user:travis@example.com"
],
"condition": {
"title": "Expires_December_1_2023",
"description": "Expires on December 1, 2023",
"expression":
"request.time < timestamp('2023-12-01T00:00:00.000Z')"
}
}
Si quieres aprender a definir las Condiciones de IAM para el acceso temporal, consulta Configura el acceso temporal.
Si quieres aprender a configurar las Condiciones de IAM para acceder a uno o más bases de datos, consulta Configura las condiciones de acceso a la base de datos.
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 gcloud CLI:
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 Google Cloud CLI en vez de la consola de Google Cloud
porque el rol firebaserules.system
está oculto en la consola de forma predeterminada.
¿Qué sigue?
- Obtén más información sobre IAM.
- Asigna funciones de IAM.
- Obtén más información sobre la autenticación.