Quando você usa as bibliotecas de cliente do servidor para Cloud Firestore, pode gerenciar o acesso aos seus recursos com o Identity and Access Management (IAM). 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 Cloud 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 Cloud 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.getdatastore.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 |
executePipeline (RPC)com qualquer uma das seguintes etapas: - collection(...)- collection_group(...)- database()
|
datastore.entities.get
|
executePipeline (RPC)com qualquer uma das seguintes etapas: - documents(...) |
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.schemas.create |
delete |
datastore.schemas.delete |
get |
datastore.schemas.get |
list |
datastore.schemas.list |
projects.databases |
|
create |
datastore.databases.createSe 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 |
clone |
datastore.databases.cloneSe 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:
|
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 Cloud 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 primitivos, proprietário, editor e leitor, é possível conceder papéis do Cloud Firestore aos usuários do seu projeto.
A tabela a seguir lista os papéis do IAM do Cloud 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.getdatastore.*resourcemanager.projects.getresourcemanager.projects.list |
Acesso total ao Cloud Firestore. |
roles/datastore.user |
appengine.applications.getdatastore.databases.getdatastore.databases.getMetadatadatastore.databases.listdatastore.entities.*datastore.schemas.listdatastore.namespaces.getdatastore.namespaces.listdatastore.statistics.getdatastore.statistics.listresourcemanager.projects.getresourcemanager.projects.list |
Acesso de leitura/gravação a dados em um banco de dados do Cloud Firestore. Destinado a desenvolvedores de apps e contas de serviço. |
roles/datastore.viewer |
appengine.applications.getdatastore.databases.getdatastore.databases.getMetadatadatastore.databases.listdatastore.entities.getdatastore.entities.listdatastore.schemas.getdatastore.schemas.listdatastore.namespaces.getdatastore.namespaces.listdatastore.statistics.getdatastore.statistics.listresourcemanager.projects.getresourcemanager.projects.listdatastore.insights.get |
Acesso de leitura a todos os recursos do Cloud Firestore. |
roles/datastore.importExportAdmin |
appengine.applications.getdatastore.databases.exportdatastore.databases.getMetadatadatastore.databases.importdatastore.operations.canceldatastore.operations.getdatastore.operations.listresourcemanager.projects.getresourcemanager.projects.list |
Acesso total para gerenciar importações e exportações. |
roles/datastore.bulkAdmin |
resourcemanager.projects.getresourcemanager.projects.listdatastore.databases.getMetadatadatastore.databases.bulkDeletedatastore.operations.canceldatastore.operations.getdatastore.operations.list |
Acesso total para gerenciar operações em massa. |
roles/datastore.indexAdmin |
appengine.applications.getdatastore.databases.getMetadatadatastore.schemas.*datastore.operations.listdatastore.operations.getresourcemanager.projects.getresourcemanager.projects.list |
Acesso total para gerenciar definições de índice. |
roles/datastore.keyVisualizerViewer |
datastore.databases.getMetadatadatastore.keyVisualizerScans.getdatastore.keyVisualizerScans.listresourcemanager.projects.getresourcemanager.projects.list |
Acesso total às verificações do Key Visualizer. |
roles/datastore.backupSchedulesViewer |
datastore.backupSchedules.getdatastore.backupSchedules.list |
Acesso de leitura a programações de backup em um banco de dados do Cloud Firestore. |
roles/datastore.backupSchedulesAdmin |
datastore.backupSchedules.getdatastore.backupSchedules.listdatastore.backupSchedules.createdatastore.backupSchedules.updatedatastore.backupSchedules.deletedatastore.databases.listdatastore.databases.getMetadata |
Acesso total às programações de backup em um banco de dados do Cloud Firestore. |
roles/datastore.backupsViewer |
datastore.backups.getdatastore.backups.list |
Acesso de leitura a informações de backup em um local do Cloud Firestore. |
roles/datastore.backupsAdmin |
datastore.backups.getdatastore.backups.listdatastore.backups.delete |
Acesso total a backups em um local do Cloud Firestore. |
roles/datastore.restoreAdmin |
datastore.backups.getdatastore.backups.listdatastore.backups.restoreDatabasedatastore.databases.listdatastore.databases.createdatastore.databases.getMetadatadatastore.operations.listdatastore.operations.get |
Capacidade de restaurar um backup do Cloud Firestore em um novo banco de dados. Essa função também permite criar novos bancos de dados sem precisar restaurar um backup. |
roles/datastore.cloneAdmin |
datastore.databases.clonedatastore.databases.listdatastore.databases.createdatastore.databases.getMetadatadatastore.operations.listdatastore.operations.get |
Capacidade de clonar um banco de dados do Cloud Firestore em um novo banco de dados. Essa função também permite criar novos bancos de dados sem precisar clonar. |
roles/datastore.statisticsViewer |
resourcemanager.projects.getresourcemanager.projects.listdatastore.databases.getMetadatadatastore.insights.getdatastore.keyVisualizerScans.getdatastore.keyVisualizerScans.listdatastore.statistics.listdatastore.statistics.get |
Acesso de leitura a verificações do Visualizador de chaves, 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, alguns papéis serão necessários. 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:
Ver tags
datastore.databases.listTagBindingsdatastore.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 Cloud 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 |
Listar bancos de dados em um projeto. | |
datastore.databases.create |
Crie um banco de dados. | |
datastore.databases.update |
Atualizar um banco de dados. | |
datastore.databases.delete |
Excluir um banco de dados. | |
datastore.databases.clone |
Clonar um banco de dados. | |
datastore.databases.createTagBinding |
Criar uma vinculação de tag para um banco de dados. | |
datastore.databases.deleteTagBinding |
Excluir uma vinculação de tag de 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 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.schemas.create |
Criar um índice. | |
datastore.schemas.delete |
Excluir um índice. | |
datastore.schemas.get |
Ler metadados de um índice. | |
datastore.schemas.list |
Listar os índices de um projeto. | |
datastore.schemas.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 |
Obter detalhes sobre as verificações do Key Visualizer. | |
datastore.keyVisualizerScans.list |
Listar as verificações do Key Visualizer disponíveis. | |
| Nome da permissão da programação de backup | Descrição | |
datastore.backupSchedules.get |
Obter detalhes sobre uma programação de backup. | |
datastore.backupSchedules.list |
Listar as programações de backup disponíveis. | |
datastore.backupSchedules.create |
Criar uma programação de backup. | |
datastore.backupSchedules.update |
Atualizar 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 |
Obter 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. | |
| Nome da permissão de insights | Descrição | |
datastore.insights.get |
Obter insights de um recurso |
Latência na mudança de papel
O Cloud Firestore armazena em cache as permissões do IAM durante 5 minutos. Portanto, é necessário aguardar esse tempo para que um papel entre em vigor.
Gerenciar o IAM do Cloud Firestore
É possível acessar 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 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
O Cloud Firestore Security Rules para clientes de dispositivos móveis/Web depende 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 vão negar 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 o Google Cloud CLI em vez do console do Google Cloud,
porque a função firebaserules.system fica oculta no console por padrão.
A seguir
- Saiba mais sobre IAM.
- Conceda papéis do IAM.
- Saiba mais sobre autenticação.