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 |
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 |
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 |
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
- Saiba mais sobre IAM.
- Conceder papéis do IAM.