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, você tem acesso mais granular a recursos específicos do Google Cloud 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 de privilégio mínimo 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 Se a solicitação
Se você quiser verificar se as vinculações de tag foram definidas com sucesso listando as vinculações, as seguintes permissões adicionais serão necessárias:
|
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 |
excluir | datastore.backupSchedules.delete |
projects.locations.backups |
|
get | datastore.backups.get |
list | datastore.backups.list |
excluir | 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 datastore.insights.get |
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.bulkAdmin |
resourcemanager.projects.get resourcemanager.projects.list datastore.databases.getMetadata datastore.databases.bulkDelete datastore.operations.cancel datastore.operations.get datastore.operations.list |
Acesso total para gerenciar operações em massa. |
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 aos 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. Essa função também permite criar novos bancos de dados, não necessariamente restaurando de um backup. |
roles/datastore.statisticsViewer |
resourcemanager.projects.get resourcemanager.projects.list datastore.databases.getMetadata datastore.insights.get datastore.keyVisualizerScans.get datastore.keyVisualizerScans.list datastore.statistics.list datastore.statistics.get |
Acesso de leitura a verificações do Key Visualizer, insights e estatísticas. |
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:
Papéis necessários para criar e gerenciar tags
Se alguma tag for representada em ações de criação ou restauração, algumas funções serão necessárias. Consulte Como criar e gerenciar tags para mais detalhes sobre a criação de pares de chave-valor de tag antes de associá-los aos recursos do banco de dados.
As seguintes permissões são obrigatórias:
Visualizar tags
datastore.databases.listTagBindings
datastore.databases.listEffectiveTags
Gerenciar tags em recursos
A permissão a seguir é necessária para o recurso de banco de dados ao qual você está anexando o valor da tag.
datastore.databases.createTagBinding
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.bulkDelete |
Excluir entidades em massa de um banco de dados. | |
datastore.databases.getMetadata |
Ler metadados de um banco de dados. | |
datastore.databases.list |
Liste 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 |
Cria uma vinculação de tag para um banco de dados. | |
datastore.databases.deleteTagBinding |
Exclui uma vinculação de tag para um banco de dados. | |
datastore.databases.listTagBindings |
Lista todas as vinculações de tags de um banco de dados. | |
datastore.databases.listEffectiveTagBindings |
Lista as vinculações de tags efetivas 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 do Key Visualizer disponíveis. | |
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 |
Liste as programações de backup disponíveis. | |
datastore.backupSchedules.create |
Crie uma programação de backup. | |
datastore.backupSchedules.update |
Atualiza uma programação de backup. | |
datastore.backupSchedules.delete |
Exclui uma programação de backup. | |
Nome da permissão de backup | Descrição | |
datastore.backups.get |
Receber detalhes sobre um backup. | |
datastore.backups.list |
Liste os backups disponíveis. | |
datastore.backups.delete |
Exclui um backup | |
datastore.backups.restoreDatabase |
Restaurar um banco de dados a partir de um backup. | |
Nome da permissão de insights | Descrição | |
datastore.insights.get |
Receber insights de um recurso |
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.
Gerenciar o IAM do Firestore
É possível receber e definir políticas do IAM usando o console Google Cloud ,
a API IAM ou a
ferramenta de linha de comando gcloud
. Para mais detalhes, consulte Como conceder, alterar e revogar o acesso a 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 condições do IAM para acesso temporário, consulte Configurar 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 ao banco 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 Google Cloud ,
porque a funçãofirebaserules.system
fica oculta no console por padrão.
A seguir
- Saiba mais sobre IAM.
- Conceda papéis do IAM.
- Saiba mais sobre autenticação.