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 exigidas

A tabela a seguir lista as permissões que o autor da chamada precisa ter para executar cada ação:

Método Permissões exigidas
projects.databases.documents
batchGet datastore.entities.get
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 truedatastore.entities.update
commit atualizar ou transformar sem pré-requisitodatastore.entities.create
datastore.entities.update
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
patch datastore.entities.update
rollback datastore.databases.get
runQuery datastore.entities.get
datastore.entities.list
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
datastore.entities.update
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

Papéis

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.entities.*
datastore.indexes.list
datastore.namespaces.get
datastore.namespaces.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.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.indexAdmin appengine.applications.get

datastore.indexes.*

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

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 Inicie ou reverta uma transação.
Leia metadados 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 projeto Descrição
resourcemanager.projects.get Procurar recursos no projeto.
resourcemanager.projects.list Listar projetos próprios.

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, a API IAM ou a ferramenta de linha de comando gcloud. Saiba mais em Como conceder, alterar e revogar acesso aos membros do projeto .

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 ferramenta 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 ferramenta de linha de comando gcloud em vez do Console do Cloud, porque o papel firebaserules.system fica oculto no console por padrão.

A seguir