Segurança para bibliotecas de cliente do servidor

Quando você usa as bibliotecas de cliente do servidor para o Firestore, é possível gerenciar o acesso aos seus recursos com o gerenciamento de identidade e acesso (IAM). Com o IAM, você fornece acesso mais granular a recursos específicos do Google Cloud Platform e impede 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 que você defina políticas de IAM para controlar quem (usuário) tem qual (papel) permissão para quais recursos. As políticas do IAM concedem um ou mais papéis a um usuário, que recebe determinadas permissões. Por exemplo, é possível conceder o papel datastore.indexAdmin a um usuário, o que permite que ele crie, modifique, exclua, liste ou visualize índices.

Permissões e papéis

Veja nesta seção um resumo das permissões e dos papéis compatíveis com o Firestore.

Permissões necessárias para métodos de API

A tabela abaixo 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
beginTransaction datastore.databases.get
A atualização ou transformação do commit com pré-condição existente definida como false datastore.entities.create
A atualização ou transformação do commit com pré-condição existente definida como true datastore.entities.update
commit atualizar ou transformar sem pré-condição datastore.entities.create
datastore.entities.update
Excluir 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
A atualização ou transformação do write (RPC) com pré-condição existente definida como false datastore.entities.create
A atualização ou transformação do write (RPC) com pré-condição existente definida como true datastore.entities.update
write (RPC) atualizar ou transformar sem pré-condição datastore.entities.create
datastore.entities.update
Excluir 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

Papéis predefinidos

Com o IAM, todo método de API no Firestore requer que a conta que faz a solicitação de API tenha as permissões apropriadas para usar o recurso. As permissões são concedidas pela definição de políticas que concedem papéis a um usuário, grupo ou conta de serviço. Além dos papéis primários, 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 de IAM do Firestore. É possível conceder vários papéis a um usuário, um grupo ou uma conta de serviço.

Função 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.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 Firestore. Destinado a contas de serviço e desenvolvedores de aplicativos.
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
Acesso de leitura a todos os recursos do 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
Acesso total para gerenciar importações e exportações.
roles/datastore.indexAdmin appengine.applications.get

datastore.indexes.*

resourcemanager.projects.get
resourcemanager.projects.list
Acesso total para gerenciar definições de índice.

Papéis personalizados

Se os papéis predefinidos não atenderem aos requisitos de negócios, defina papéis personalizados com as permissões especificadas:

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 Início ou reversão de uma transação.
Ler metadados de um banco de dados.
Nome da permissão da entidade descrição;
datastore.entities.create Crie um documento.
datastore.entities.delete Excluir um documento.
datastore.entities.get Leia um documento.
datastore.entities.list Liste os nomes dos documentos em um projeto.
É necessário usar datastore.entities.get para acessar os dados do documento.
datastore.entities.update Atualize um documento.
Nome da permissão de índice descrição;
datastore.indexes.create Crie um índice.
datastore.indexes.delete Excluir um índice.
datastore.indexes.get ler metadados de um índice.
datastore.indexes.list Liste os índices em um projeto.
datastore.indexes.update Atualize um índice.
Nome da permissão de projeto descrição;
resourcemanager.projects.get Procure recursos no projeto.
resourcemanager.projects.list Listar projetos próprios.
Nome da permissão de localização 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 Lista os locais de banco de dados disponíveis. Obrigatório para criar um novo banco de dados.

Latência na mudança de papel

O Firestore armazena em cache as permissões do IAM por cinco minutos. Portanto, leva até cinco minutos para uma alteração de papel entrar em vigor.

Como gerenciar o IAM do Firestore

É possível receber e definir políticas do IAM usando o Console do Google Cloud, a API IAM ou a ferramenta de linha de comando gcloud. Consulte Como conceder, alterar e revogar o acesso a membros do projeto para saber mais.

Dependência da regra de segurança no IAM

As regras de segurança do Firestore para clientes móveis/da Web dependem da seguinte conta de serviço e da vinculação do IAM:

Conta de serviço Papel de 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 negarã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 seus project_id e project_number, consulte Como identificar projetos.

Use a CLI do Google Cloud em vez do Console do Cloud, porque o papel firebaserules.system está oculto no console por padrão.

Próximas etapas