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 |
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 |
patch |
datastore.entities.update |
rollback |
datastore.databases.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 |
|
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 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.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.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. |
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. | |
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 |
Listar os nomes dos documentos em um projeto.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 |
Veja detalhes sobre as verificações do Key Visualizer. | |
datastore.keyVisualizerScans.list |
Lista as verificações do Key Visualizer disponíveis. |
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
.
Condições do IAM
Use as Condições do IAM para definir e aplicar o controle de acesso condicional.
Por exemplo, a condição a seguir atribui um principal ao papel datastore.user
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 condições de IAM para acesso temporário, consulte Configurar acesso temporário.
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 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 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
fica oculto no console por padrão.
A seguir
- Saiba mais sobre IAM.
- Conceda papéis do IAM.