Identity and Access Management (IAM)

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.

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