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 a 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 |
Crie uma vinculação de tag para um banco de dados. | |
datastore.databases.deleteTagBinding |
Excluir uma vinculação de tag para um banco de dados. | |
datastore.databases.listTagBindings |
Listar 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 |
Receber detalhes sobre as verificações do Key Visualizer. | |
datastore.keyVisualizerScans.list |
Lista as verificações disponíveis do Key Visualizer. | |
Nome da permissão da programação de backup | Descrição | |
datastore.backupSchedules.get |
Receber detalhes sobre uma programação de backup. | |
datastore.backupSchedules.list |
Listar as programações de backup disponíveis. | |
datastore.backupSchedules.create |
Crie uma programação de backup. | |
datastore.backupSchedules.update |
Atualize 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 |
Receber detalhes sobre um backup. | |
datastore.backups.list |
Listar 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, a API IAM ou a 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
Use 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 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 as Condições do IAM para acesso temporário, consulte Configurar o acesso temporário.
Para saber como configurar as Condições do IAM para acesso a um ou mais bancos de dados, consulte Configurar condições de acesso a bancos 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 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.
- Saiba mais sobre autenticação.