Segurança para bibliotecas de cliente do servidor
Quando usa as bibliotecas cliente de servidor para o Firestore, pode gerir o acesso aos seus recursos com a gestão de identidade e de acesso (IAM). O IAM permite-lhe conceder acesso mais detalhado a recursos específicos e impede o acesso indesejado a outros recursos. Google Cloud Esta página descreve as autorizações e as funções do IAM para o Firestore. Para uma descrição detalhada do IAM, leia a documentação do IAM.
O IAM permite-lhe adotar o princípio de segurança do menor privilégio, pelo que concede apenas o acesso necessário aos seus recursos.
O IAM permite-lhe controlar quem (utilizador) tem autorização para quê (função)
em que recursos através da definição de políticas de IAM.
As políticas de IAM concedem uma ou mais funções a um utilizador, o que lhe dá determinadas autorizações. Por exemplo, pode conceder a função datastore.indexAdmin
a um utilizador, o que lhe permite criar, modificar, eliminar, listar ou ver
índices.
Autorizações e funções
Esta secção resume as autorizações e as funções suportadas pelo Firestore.
Autorizações necessárias para métodos da API
A tabela seguinte lista as autorizações que o autor da chamada tem de ter para realizar cada ação:
Método | Autorizações necessárias |
---|---|
projects.databases.documents |
|
batchGet |
datastore.entities.get |
batchWrite atualização ou transformação com a condição prévia exists definida como false |
datastore.entities.create |
batchWrite atualização ou transformação com a condição prévia exists definida como true |
datastore.entities.create |
batchWrite atualize ou transforme sem pré-condição |
datastore.entities.create |
beginTransaction |
datastore.databases.get |
commit atualização ou transformação com a condição prévia exists definida como false |
datastore.entities.create |
commit atualização ou transformação com a condição prévia exists definida como true |
datastore.entities.update |
commit atualize ou transforme sem pré-condição |
datastore.entities.create |
commit eliminar |
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) atualização ou transformação com a condição prévia exists definida como false |
datastore.entities.create |
write (RPC) atualização ou transformação com a condição prévia exists definida como true |
datastore.entities.update |
write (RPC) atualize ou transforme sem pré-condição |
datastore.entities.create |
write (RPC) eliminar |
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 o seu pedido
Se quiser verificar se as associações de etiquetas estão definidas com êxito listando as associações, são necessárias as seguintes autorizações adicionais:
|
delete |
datastore.databases.delete |
get |
datastore.databases.getMetadata |
list |
datastore.databases.list |
patch |
datastore.databases.update |
restaurar | datastore.backups.restoreDatabase |
clone |
datastore.databases.clone Se o seu pedido
Se quiser verificar se as associações de etiquetas estão definidas com êxito listando as associações, são necessárias as seguintes autorizações adicionais:
|
projects.locations |
|
get |
datastore.locations.get |
list |
datastore.locations.list |
projects.databases.backupschedules |
|
receber | datastore.backupSchedules.get |
lista | datastore.backupSchedules.list |
criar | datastore.backupSchedules.create |
Atualizar | datastore.backupSchedules.update |
eliminar | datastore.backupSchedules.delete |
projects.locations.backups |
|
receber | datastore.backups.get |
lista | datastore.backups.list |
eliminar | datastore.backups.delete |
Funções predefinidas
Com o IAM, todos os métodos da API no Firestore requerem que a conta que faz o pedido da API tenha as autorizações adequadas para usar o recurso. As autorizações são concedidas através da definição de políticas que concedem funções a um utilizador, um grupo ou uma conta de serviço. Além das funções primitivas, proprietário, editor e leitor, pode conceder funções do Firestore aos utilizadores do seu projeto.
A tabela seguinte lista as funções da IAM do Firestore. Pode conceder várias funções a um utilizador, um grupo ou uma conta de serviço.
Função | Autorizaçõ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/escrita aos dados numa base de dados do Firestore. Destinado a programadores de aplicações 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 gerir 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 gerir operações em massa. |
roles/datastore.indexAdmin |
appengine.applications.get datastore.databases.getMetadata datastore.indexes.* datastore.operations.list datastore.operations.get resourcemanager.projects.get resourcemanager.projects.list |
Acesso total para gerir 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 análises do visualizador de chaves. |
roles/datastore.backupSchedulesViewer |
datastore.backupSchedules.get datastore.backupSchedules.list |
Acesso de leitura a agendamentos de cópias de segurança numa base 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 agendamentos de cópias de segurança numa base de dados do Firestore. |
roles/datastore.backupsViewer |
datastore.backups.get datastore.backups.list |
Acesso de leitura a informações de cópias de segurança numa localização do Firestore. |
roles/datastore.backupsAdmin |
datastore.backups.get datastore.backups.list datastore.backups.delete |
Acesso total às cópias de segurança numa localização 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 uma cópia de segurança do Firestore numa nova base de dados. Esta função também permite criar novas bases de dados, não necessariamente através do restauro a partir de uma cópia de segurança. |
roles/datastore.cloneAdmin |
datastore.databases.clone datastore.databases.list datastore.databases.create datastore.databases.getMetadata datastore.operations.list datastore.operations.get |
Capacidade de clonar uma base de dados do Firestore numa nova base de dados. Esta função também permite criar novas bases de dados, não necessariamente através da clonagem. |
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 estatísticas, informações e análises do visualizador de chaves. |
Funções personalizadas
Se as funções predefinidas não satisfizerem os requisitos da sua empresa, pode definir as suas próprias funções personalizadas com as autorizações que especificar:
Funções necessárias para criar e gerir etiquetas
Se alguma etiqueta estiver representada em ações de criação ou restauro, são necessárias algumas funções. Consulte o artigo Criar e gerir etiquetas para ver mais detalhes sobre a criação de pares chave-valor de etiquetas antes de os associar aos recursos da base de dados.
As autorizações indicadas abaixo são necessárias.
Ver etiquetas
datastore.databases.listTagBindings
datastore.databases.listEffectiveTags
Faça a gestão de etiquetas em recursos
É necessária a seguinte autorização para o recurso de base de dados ao qual está a anexar o valor da etiqueta.
datastore.databases.createTagBinding
Autorizações
A tabela seguinte indica as autorizações suportadas pelo Firestore.
Nome da autorização da base de dados | Descrição | |
---|---|---|
datastore.databases.get |
Iniciar ou reverter uma transação. | |
datastore.databases.import |
Importar entidades para uma base de dados. | |
datastore.databases.export |
Exporte entidades de uma base de dados. | |
datastore.databases.bulkDelete |
Elimine entidades em massa de uma base de dados. | |
datastore.databases.getMetadata |
Ler metadados de uma base de dados. | |
datastore.databases.list |
Apresenta as bases de dados num projeto. | |
datastore.databases.create |
Crie uma base de dados. | |
datastore.databases.update |
Atualize uma base de dados. | |
datastore.databases.delete |
Eliminar uma base de dados. | |
datastore.databases.clone |
Clone uma base de dados. | |
datastore.databases.createTagBinding |
Crie uma associação de etiquetas para uma base de dados. | |
datastore.databases.deleteTagBinding |
Elimine uma vinculação de etiqueta para uma base de dados. | |
datastore.databases.listTagBindings |
Apresenta todas as associações de etiquetas de uma base de dados. | |
datastore.databases.listEffectiveTagBindings |
Liste as associações de etiquetas eficazes para uma base de dados. | |
Nome da autorização da entidade | Descrição | |
datastore.entities.create |
Crie um documento. | |
datastore.entities.delete |
Elimine um documento. | |
datastore.entities.get |
Ler um documento. | |
datastore.entities.list |
Listar os nomes dos documentos num projeto. (É necessário datastore.entities.get para aceder aos dados do documento.) |
|
datastore.entities.update |
Atualize um documento. | |
Nome da autorização de índice | Descrição | |
datastore.indexes.create |
Crie um índice. | |
datastore.indexes.delete |
Elimine um índice. | |
datastore.indexes.get |
Ler metadados de um índice. | |
datastore.indexes.list |
Apresenta os índices num projeto. | |
datastore.indexes.update |
Atualize um índice. | |
Nome da autorização de operação | Descrição | |
datastore.operations.cancel |
Cancele uma operação de longa duração. | |
datastore.operations.delete |
Elimine uma operação de longa duração. | |
datastore.operations.get |
Obtém o estado mais recente de uma operação de execução longa. | |
datastore.operations.list |
Apresentar operações de longa duração. | |
Nome da autorização do projeto | Descrição | |
resourcemanager.projects.get |
Procurar recursos no projeto. | |
resourcemanager.projects.list |
Apresentar projetos detidos. | |
Nome da autorização de acesso à localização | Descrição | |
datastore.locations.get |
Obter detalhes sobre a localização de uma base de dados. Necessário para criar uma nova base de dados. | |
datastore.locations.list |
Indicar as localizações de bases de dados disponíveis. Necessário para criar uma nova base de dados. | |
Nome da autorização do Key Visualizer | Descrição | |
datastore.keyVisualizerScans.get |
Obtenha detalhes sobre as análises do visualizador de chaves. | |
datastore.keyVisualizerScans.list |
Indicar as análises do visualizador de chaves disponíveis. | |
Nome da autorização do agendamento de cópias de segurança | Descrição | |
datastore.backupSchedules.get |
Obter detalhes sobre uma programação de cópias de segurança. | |
datastore.backupSchedules.list |
Listar agendamentos de cópias de segurança disponíveis. | |
datastore.backupSchedules.create |
Crie um agendamento de cópias de segurança. | |
datastore.backupSchedules.update |
Atualize um agendamento de cópias de segurança. | |
datastore.backupSchedules.delete |
Elimine um agendamento de cópia de segurança. | |
Nome da autorização de cópia de segurança | Descrição | |
datastore.backups.get |
Veja detalhes sobre uma cópia de segurança. | |
datastore.backups.list |
Listar as cópias de segurança disponíveis. | |
datastore.backups.delete |
Elimine uma cópia de segurança. | |
datastore.backups.restoreDatabase |
Restaure uma base de dados a partir de uma cópia de segurança. | |
Nome da autorização de estatísticas | Descrição | |
datastore.insights.get |
Aceda a estatísticas de um recurso |
Latência da alteração de função
O Firestore armazena em cache as autorizações de IAM durante 5 minutos, pelo que uma alteração de função demora até 5 minutos a entrar em vigor.
Faça a gestão do IAM do Firestore
Pode obter e definir políticas de IAM através da Google Cloud consola,
da API IAM ou da ferramenta de linha de comandos
gcloud
. Consulte o artigo
Conceder, alterar e revogar o acesso de membros do projeto
para ver detalhes.
Configure autorizações de acesso condicional
Pode usar as condições do IAM para definir e aplicar o controlo de acesso condicional.
Por exemplo, a seguinte condição atribui a um principal a função 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 da IAM para acesso temporário, consulte o artigo Configure o acesso temporário.
Para saber como configurar as condições da IAM para o acesso a uma ou mais bases de dados, consulte o artigo Configure as condições de acesso à base 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 associação do IAM:
Conta de serviço | Função de IAM |
---|---|
service-project_number@firebase-rules.iam.gserviceaccount.com |
roles/firebaserules.system |
O Firebase configura automaticamente esta conta de serviço para si. Se remover a função firebaserules.system
desta conta de serviço, as suas regras de segurança vão recusar todos os pedidos. Para restaurar esta vinculação de 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 o seu project_id e project_number, consulte o artigo Identificar projetos.
Use a CLI do Google Cloud em vez da Google Cloud consola,
porque a funçãofirebaserules.system
está oculta na consola por predefinição.
O que se segue?
- Saiba mais sobre a IAM.
- Conceda funções de IAM.
- Saiba mais acerca da autenticação.