O Google Cloud oferece o Gerenciamento de acesso e identidade (IAM Identity and Access Management), que permite a concessão de acesso mais granular a recursos específicos do Google Cloud e impede o acesso indesejado a outros recursos. Nesta página, descrevemos os papéis do IAM referentes ao Firestore no modo Datastore. Para uma descrição detalhada do IAM, leia a documentação do IAM.
Com o IAM, você pode 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 de IAM concedem
papéis específicos a um usuário, que recebe determinadas
permissões. Por exemplo, é possível conceder o papel datastore.indexAdmin
a um
usuário, que poderá criar, modificar, excluir, listar ou visualizar índices.
Permissões e papéis
Nesta seção, resumimos as permissões e os papéis compatíveis com o Firestore no modo Datastore.
Permissões
Na tabela a seguir, veja as permissões compatíveis com o Firestore no modo Datastore.
Nome da permissão do banco de dados | Descrição | |
---|---|---|
datastore.databases.export |
Exportar entidades de um banco de dados. | |
datastore.databases.get |
Iniciar ou reverter uma transação. Confirmar com mutações vazias. |
|
datastore.databases.import |
Importar entidades para 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.allocateIds |
Alocar códigos para chaves com caminho de chave incompleto. | |
datastore.entities.create |
Criar uma entidade. | |
datastore.entities.delete |
Excluir uma entidade. | |
datastore.entities.get |
Ler uma entidade. | |
datastore.entities.list |
Listar as chaves das entidades de um projeto.datastore.entities.get é necessária para acessar os dados da entidade. |
|
datastore.entities.update |
Atualizar uma entidade. | |
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 namespace | Descrição | |
datastore.namespaces.get |
Recuperar metadados de um namespace. | |
datastore.namespaces.list |
Listar os namespaces de um projeto. | |
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 de estatística | Descrição | |
datastore.statistics.get |
Recuperar entidades de estatística. | |
datastore.statistics.list |
Listar as chaves de entidades de estatística.datastore.statistics.get é necessária para acessar os dados da entidade de estatística. |
|
Nome da permissão do App Engine | Descrição | |
appengine.applications.get |
Acesso somente leitura a todas as definições e configurações dos aplicativos no App Engine. | |
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. |
Papéis predefinidos
Com o IAM, cada método de API Datastore exige que a conta responsável pela 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 básicos, proprietário, editor e leitor, é possível conceder papéis do Firestore no modo Datastore aos usuários do projeto.
Na tabela a seguir, veja os papéis de IAM no Firestore no Datastore. É 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 à instância do banco de dados. Para ter acesso de Administrador do Datastore, conceda a função appengine.appAdmin ao principal. |
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 modo Datastore. 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 banco de dados do modo Datastore. |
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 modo Datastore. |
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 modo Datastore. |
roles/datastore.backupsViewer |
datastore.backups.get datastore.backups.list |
Acesso de leitura a informações de backup em um local do modo Datastore. |
roles/datastore.backupsAdmin |
datastore.backups.get datastore.backups.list datastore.backups.delete |
Acesso total a backups em um local do modo Datastore. |
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 modo Datastore 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 necessárias para métodos de API
A tabela a seguir lista as permissões que o solicitante precisa ter para chamar cada método:
Método | Permissões necessárias |
---|---|
allocateIds |
datastore.entities.allocateIds |
beginTransaction |
datastore.databases.get |
commit com mutações vazias |
datastore.databases.get |
commit para um comando insert |
datastore.entities.create |
commit para um comando upsert |
datastore.entities.create datastore.entities.update |
commit para um comando update |
datastore.entities.update |
commit para um comando delete |
datastore.entities.delete |
commit para um comando lookup |
datastore.entities.get Em caso de busca relacionada a metadados ou estatísticas, consulte Permissões necessárias para metadados e estatísticas. |
commit para um comando query |
datastore.entities.list datastore.entities.get (caso não seja uma consulta apenas de chave)Em caso de consulta relacionada a metadados ou estatísticas, consulte Permissões necessárias para metadados e estatísticas. |
lookup |
datastore.entities.get Em caso de busca relacionada a metadados ou estatísticas, consulte Permissões necessárias para metadados e estatísticas. |
rollback |
datastore.databases.get |
runQuery |
datastore.entities.list datastore.entities.get (caso não seja uma consulta apenas de chave)Em caso de consulta relacionada a metadados ou estatísticas, consulte Permissões necessárias para metadados e estatísticas. |
runQuery por uma consulta sem tipo |
datastore.entities.get datastore.entities.list datastore.statistics.get datastore.statistics.list |
Permissões necessárias para metadados e estatísticas
A tabela a seguir mostra uma lista de permissões que o autor da chamada precisa ter para chamar métodos em Metadados e Estatísticas.
Método | Permissão exigida |
---|---|
lookup de entidades com nomes de tipo correspondentes a __Stat_*__ |
datastore.statistics.get |
runQuery usando tipos com nomes correspondentes a __Stat_*__ |
datastore.statistics.get datastore.statistics.list |
runQuery usando o tipo __namespace__ |
datastore.namespaces.get datastore.namespaces.list |
Papéis necessários para criar uma instância de banco de dados do modo Datastore
Para criar uma nova instância de banco de dados do modo Datastore, é necessário ter o papel Proprietário ou Proprietário do Datastore.
Os bancos de dados do modo Datastore exigem um aplicativo ativo do App Engine.
Se o projeto não tiver um aplicativo, o Firestore no modo Datastore criará um
para você. Nesse caso, é necessária a permissão
appengine.applications.create
do papel Proprietário
ou de um
papel personalizado de IAM que contenha
a permissão.
Latência na mudança de papel
O Firestore no modo Datastore armazena em cache as permissões de IAM por cinco minutos, ou seja, levará até cinco minutos para que uma alteração de papel seja efetivada.
Como gerenciar o IAM
É possível receber e definir políticas do IAM usando o Console do Google Cloud, os métodos do IAM ou a Google Cloud CLI.
- Para o console do Google Cloud, consulte Controle de acesso por meio do console do Google Cloud.
- Para usar os métodos de IAM, consulte Controle de acesso via API.
- Para a CLI gcloud, consulte Controle de acesso por meio da ferramenta gcloud.
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.
A seguir
- Saiba mais sobre IAM.
- Conceda papéis do IAM.