Segurança para bibliotecas de cliente do servidor
Quando você usa as bibliotecas de cliente do server para o Firestore, pode gerenciar o acesso aos seus recursos com o Gerenciamento de identidade e acesso (IAM, na sigla em inglês). Com o IAM, conceda acesso mais granular a recursos do Google Cloud Platform e previna o acesso indesejado a outros recursos. Nesta página, descrevemos as permissões e os papéis do IAM para o Firestore. Para uma descrição detalhada do IAM, leia a documentação do IAM.
Com o IAM, é possível adotar o princípio de segurança do menor privilégio para conceder apenas o acesso necessário aos recursos.
O IAM permite controlar quem (usuários) tem qual (papéis)
permissão para quais recursos. Basta definir as políticas.
As políticas do IAM concedem uma ou mais funções a um usuário, oferecendo a
ele certas permissões. Por exemplo, é possível conceder o papel datastore.indexAdmin
a um usuário, que então terá permissão para criar, modificar, excluir, listar ou visualizar
índices.
Permissões e papéis
Esta seção resume as permissões e os papéis compatíveis com o Firestore.
Permissões necessárias para métodos de API
A tabela a seguir lista as permissões que o autor da chamada precisa ter para executar cada ação:
Método | Permissões necessárias |
---|---|
projects.databases.documents |
|
batchGet |
datastore.entities.get |
batchWrite atualizar ou transformar com pré-requisito existente definido como false |
datastore.entities.create |
batchWrite atualizar ou transformar com pré-requisito existente definido como true |
datastore.entities.create |
batchWrite atualizar ou transformar sem pré-requisito | datastore.entities.create
|
beginTransaction |
datastore.databases.get |
commit atualizar ou transformar com pré-requisito existente definido como false |
datastore.entities.create |
commit atualizar ou transformar com pré-requisito existente definido como true | datastore.entities.update |
commit atualizar ou transformar sem pré-requisito | datastore.entities.create |
commit excluir |
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 |
write (RPC) atualizar ou transformar com pré-requisito existente definido como false |
datastore.entities.create |
write (RPC) atualizar ou transformar com pré-requisito existente definido como true |
datastore.entities.update |
write (RPC) atualizar ou transformar sem pré-requisito |
datastore.entities.create |
write (RPC) excluir
| 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 |
Papéis predefinidos
Com o IAM, todo método de API no Firestore requer que a conta autora da solicitação de API tenha as permissões apropriadas para usar o recurso. Defina as políticas que atribuem papéis a um usuário, grupo ou conta de serviço para conceder permissões. Além dos papéis primários de proprietário, editor e visualizador, é possível conceder papéis do Firestore aos usuários do projeto.
A tabela a seguir lista os papéis do IAM do Firestore. É possível atribuir vários papéis a um usuário, grupo ou conta de serviço.
Papel | Permissões | Descrição |
---|---|---|
roles/datastore.owner |
appengine.applications.get datastore.* resourcemanager.projects.get resourcemanager.projects.list | Acesso total ao 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 |
Acesso de leitura/gravação a dados em um banco de dados do Firestore. Destinado a desenvolvedores de apps e contas de serviço. |
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 |
Acesso de leitura a todos os recursos do 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 |
Acesso total para gerenciar importações e exportações. |
roles/datastore.indexAdmin |
appengine.applications.get datastore.databases.getMetadata datastore.indexes.* resourcemanager.projects.get resourcemanager.projects.list |
Acesso total para gerenciar definições de índice. |
roles/datastore.keyVisualizerViewer |
datastore.databases.getMetadata datastore.keyVisualizerScans.get datastore.keyVisualizerScans.list resourcemanager.projects.get resourcemanager.projects.list |
Acesso total às verificações do Key Visualizer. |
roles/datastore.backupSchedulesViewer |
datastore.backupSchedules.get datastore.backupSchedules.list |
Acesso de leitura a programações de backup em um banco de dados do 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 |
Acesso total às programações de backup em um banco de dados do Firestore. |
roles/datastore.backupsViewer |
datastore.backups.get datastore.backups.list |
Acesso de leitura a informações de backup em um local do Firestore. |
roles/datastore.backupsAdmin |
datastore.backups.get datastore.backups.list datastore.backups.delete |
Acesso total a backups em um local do 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 |
Capacidade de restaurar um backup do Firestore em um novo banco de dados. Esse papel também permite criar novos bancos de dados, não necessariamente restaurando um backup. |
Papéis personalizados
Se os papéis predefinidos não atenderem aos seus requisitos de negócios, defina seus próprios papéis personalizados com as permissões que você especificar.
Permissões
A tabela a seguir lista as permissões compatíveis com o Firestore.
Nome da permissão do banco de dados | Descrição | |
---|---|---|
datastore.databases.get |
Iniciar ou fazer rollback de uma transação. | |
datastore.databases.import |
Importar entidades para um banco de dados. | |
datastore.databases.export |
Exportar entidades de um banco de dados. | |
datastore.databases.getMetadata |
Ler metadados de um banco de dados. | |
datastore.databases.list |
Listar bancos de dados em um projeto. | |
datastore.databases.create |
Cria um banco de dados. | |
datastore.databases.update |
Atualizar um banco de dados. | |
datastore.databases.delete |
Excluir um banco de dados. | |
datastore.databases.createTagBinding |
Criar uma vinculação de tags para um banco de dados. | |
datastore.databases.deleteTagBinding |
Excluir uma vinculação de tag de um banco de dados. | |
datastore.databases.listTagBindings |
Lista todas as vinculações de tags de um banco de dados. | |
datastore.databases.listEffectiveTagBindings |
Listar as vinculações de tags eficazes de um banco de dados. | |
Nome da permissão de entidade | Descrição | |
datastore.entities.create |
Criar um documento. | |
datastore.entities.delete |
Excluir um documento. | |
datastore.entities.get |
Ler um documento. | |
datastore.entities.list |
Liste os nomes dos documentos em um projeto. O comando datastore.entities.get é necessário para acessar os dados do documento. |
|
datastore.entities.update |
Atualizar um documento. | |
Nome da permissão de índice | Descrição | |
datastore.indexes.create |
Criar um índice. | |
datastore.indexes.delete |
Excluir um índice. | |
datastore.indexes.get |
Ler metadados de um índice. | |
datastore.indexes.list |
Listar os índices de um projeto. | |
datastore.indexes.update |
Atualizar um índice. | |
Nome da permissão de operação | Descrição | |
datastore.operations.cancel |
Cancelar uma operação de longa duração. | |
datastore.operations.delete |
Excluir uma operação de longa duração. | |
datastore.operations.get |
Receber o estado mais recente de uma operação de longa duração. | |
datastore.operations.list |
Listar operações de longa duração. | |
Nome da permissão de projeto | Descrição | |
resourcemanager.projects.get |
Procurar recursos no projeto. | |
resourcemanager.projects.list |
Listar projetos próprios. | |
Nome da permissão do local | Descrição | |
datastore.locations.get |
Receber detalhes sobre um local do banco de dados. Obrigatório para criar um novo banco de dados. | |
datastore.locations.list |
Listar os locais de banco de dados disponíveis. Obrigatório para criar um novo banco de dados. | |
Nome da permissão do Key Visualizer | Descrição | |
datastore.keyVisualizerScans.get |
Receba detalhes sobre as verificações do Key Visualizer. | |
datastore.keyVisualizerScans.list |
Lista as verificações do Key Visualizer disponíveis. | |
Nome da permissão de programação de backup | Descrição | |
datastore.backupSchedules.get |
Confira detalhes sobre uma programação de backup. | |
datastore.backupSchedules.list |
Liste as programações de backup disponíveis. | |
datastore.backupSchedules.create |
Criar uma programação de backup. | |
datastore.backupSchedules.update |
Atualizar uma programação de backup. | |
datastore.backupSchedules.delete |
Excluir uma programação de backup. | |
Nome da permissão de backup | Descrição | |
datastore.backups.get |
Confira os detalhes de um backup. | |
datastore.backups.list |
Liste os backups disponíveis. | |
datastore.backups.delete |
Exclui um backup | |
datastore.backups.restoreDatabase |
Restaurar um banco de dados a partir de um backup. |
Latência na mudança de papel
O Firestore armazena em cache as permissões de IAM durante cinco minutos. Portanto, é necessário esperar até cinco minutos para que um papel entre em vigor.
Como gerenciar o IAM do Firestore
É possível receber e definir políticas do IAM usando o console do Google Cloud,
pela API IAM ou
Ferramenta de linha de comando gcloud
. Saiba
mais em Como conceder,
alterar e revogar acesso aos membros do projeto
.
Configurar permissões de acesso condicional
Você pode usar as Condições do IAM para definir e aplicar o controle de acesso condicional.
Por exemplo, a condição a seguir atribui a um principal o datastore.user
função até uma data especificada:
{
"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')"
}
}
Para saber como definir as condições do IAM para acesso temporário, consulte Configurar o acesso temporário.
Saiba como configurar as condições do IAM para acessar um ou mais em bancos de dados, consulte Configure as condições de acesso ao banco de dados.
Dependência da regra de segurança no IAM
As regras de segurança do Firestore para clientes de dispositivos móveis/Web dependem da seguinte conta de serviço e vinculação do IAM:
Conta de serviço | Papel do IAM |
---|---|
service-project_number@firebase-rules.iam.gserviceaccount.com |
roles/firebaserules.system |
O Firebase configura automaticamente essa conta de serviço para você. Se você remover o papel firebaserules.system
dessa conta de serviço, suas regras de segurança recusarão todas as solicitações. Para restaurar essa vinculação do IAM,
use o seguinte comando da CLI 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 seu project_id e project_number, consulte Como identificar projetos.
Use a Google Cloud CLI em vez do console do Google Cloud.
porque o papel firebaserules.system
está oculto no console por padrão.
A seguir
- Saiba mais sobre IAM.
- Conceda papéis do IAM.
- Saiba mais sobre autenticação.