Controle de acesso para o Cloud Spanner

Visão geral

O gerenciamento de identidade e acesso (IAM) permite controlar o acesso de usuários e grupos aos recursos do Cloud Spanner nos níveis do projeto, da instância do Cloud Spanner e do banco de dados do Cloud Spanner. Por exemplo, você pode especificar que um usuário tenha controle total de um banco de dados específico em uma instância do seu projeto, mas não possa criar, modificar ou excluir instâncias no projeto. O uso do IAM do Cloud Spanner permite conceder uma permissão a um usuário ou grupo sem ter que modificar cada instância do Cloud Spanner ou permissão de banco de dados individualmente.

Este documento se concentra nas permissões do IAM relevantes ao Cloud Spanner e nos papéis do IAM que concedem essas permissões. Para ver uma descrição detalhada do IAM e dos recursos dele, consulte o guia do desenvolvedor de gerenciamento de identidade e acesso. Consulte especificamente a seção Como gerenciar políticas do IAM.

Permissões

Com as permissões, os usuários podem desempenhar ações específicas nos recursos do Google Spanner. Por exemplo, com a permissão spanner.databases.read, um usuário pode ler um banco de dados usando a API de leitura do Cloud Spanner. Já spanner.databases.select permite que um usuário execute uma instrução de seleção do SQL em um banco de dados. Não é possível dar permissões diretamente a usuários. Em vez disso, concede a eles papéis predefinidos ou personalizados, com uma ou mais permissões agrupadas.

As tabelas a seguir listam as permissões do IAM associadas ao Cloud Spanner:

Configurações da instância

As permissões a seguir se aplicam às configurações de instância do Cloud Spanner. Consulte a referência de configuração da instância: REST, RPC.

Nome da permissão de configuração da instância Descrição
spanner.instanceConfigs.list Lista o conjunto de configurações de instância.
spanner.instanceConfigs.get Recebe uma configuração de instância.

Instâncias

As permissões a seguir se aplicam a instâncias do Cloud Spanner. Consulte a referência da instância: REST, RPC.

Nome da permissão de instância Descrição
spanner.instances.create Cria uma instância.
spanner.instances.list Lista instâncias.
spanner.instances.get Recebe a configuração de uma instância específica.
spanner.instances.getIamPolicy Recebe uma política do IAM da instância.
spanner.instances.update Atualiza uma instância.
spanner.instances.setIamPolicy Define a política do IAM de uma instância.
spanner.instances.delete Exclui uma instância.

Operações de instância

As permissões a seguir se aplicam às operações da instância do Cloud Spanner. Consulte a referência da instância: REST, RPC.

Nome da permissão da operação da instância Descrição
spanner.instanceOperations.list Lista operações de instâncias.
spanner.instanceOperations.get Recebe uma operação de instância específica.
spanner.instanceOperations.cancel Cancela uma operação de instância.
spanner.instanceOperations.delete Exclui uma operação de instância.

Bancos de dados

As permissões a seguir se aplicam aos bancos de dados do Cloud Spanner. Consulte a referência do banco de dados: REST, RPC.

Nome da permissão do banco de dados Descrição
spanner.databases.beginPartitionedDmlTransaction

Executa uma instrução de linguagem de manipulação de dados (DML, na sigla em inglês) particionada.

spanner.databases.create Cria um banco de dados.
spanner.databases.createBackup Cria um backup a partir do banco de dados. Também requer spanner.backups.create para criar o recurso de backup.
spanner.databases.list Lista bancos de dados
spanner.databases.update

Atualiza os metadados de um banco de dados.

spanner.databases.updateDdl Atualiza o esquema de um banco de dados.
spanner.databases.get Recebe os metadados de um banco de dados.
spanner.databases.getDdl Recebe o esquema de um banco de dados.
spanner.databases.getIamPolicy Recebe a política do IAM de um banco de dados.
spanner.databases.setIamPolicy Define a política do IAM de um banco de dados.
spanner.databases.beginReadOnlyTransaction Começa uma transação somente leitura em um banco de dados do Cloud Spanner.
spanner.databases.beginOrRollbackReadWriteTransaction Começa ou reverte uma transação de leitura e gravação em um banco de dados do Cloud Spanner.
spanner.databases.read Lê de um banco de dados usando a API de leitura.
spanner.databases.select Executa uma instrução de seleção do SQL em um banco de dados.
spanner.databases.write Grava em um banco de dados.
spanner.databases.drop Remove um banco de dados.

Operações de banco de dados

As permissões a seguir se aplicam às operações do banco de dados do Cloud Spanner. Consulte a referência do banco de dados: REST, RPC.

Nome da permissão de operação do banco de dados Descrição
spanner.databaseOperations.list Lista banco de dados e restaura operações de banco de dados.
spanner.databaseOperations.get Recebe uma operação de banco de dados específica.
spanner.databaseOperations.cancel Cancela uma operação do banco de dados.
spanner.databaseOperations.delete

Exclui uma operação do banco de dados.

Backups

As seguintes permissões se aplicam aos backups do Cloud Spanner (consulte a referência de backups: REST, RPC).

Nome da permissão de backup Descrição
spanner.backups.create Criar um backup. Também requer spanner.databases.createBackup no banco de dados de origem.
spanner.backups.get Recebe um backup.
spanner.backups.update Atualiza um backup.
spanner.backups.delete Exclui um backup
spanner.backups.list Lista backups
spanner.backups.restoreDatabase Restaura um banco de dados a partir de um backup. Também requer spanner.databases.create para criar o banco de dados restaurado na instância de destino.
spanner.backups.getIamPolicy Recebe a política do IAM de backup.
spanner.backups.setIamPolicy Define a política do IAM de backup.

Operações de backup

As seguintes permissões se aplicam às operações de backup do Cloud Spanner (consulte a referência do banco de dados: REST, RPC).

Nome da permissão da operação de backup Descrição
spanner.backupOperations.list Lista operações de backup.
spanner.backupOperations.get Recebe uma operação de backup específica.
spanner.backupOperations.cancel Cancela uma operação de backup.

Sessões

As permissões a seguir se aplicam às sessões do Cloud Spanner. Consulte a referência do banco de dados: REST, RPC.

Nome da permissão da sessão Descrição
spanner.sessions.create Cria uma sessão.
spanner.sessions.get Recebe uma sessão.
spanner.sessions.delete Exclui uma sessão.
spanner.sessions.list Lista sessões.

Papéis predefinidos

Papel predefinido é um pacote de uma ou mais permissões. Por exemplo, o papel predefinido roles/spanner.databaseUser contém as permissões spanner.databases.read e spanner.database.write. Há dois tipos de papéis predefinidos do Cloud Spanner:

  • Papéis de pessoa: concedidos a usuários ou grupos, permitem que eles realizem ações nos recursos do projeto.
  • Papéis de máquina: concedidos a contas de serviço, permitem que as máquinas executadas como aquelas contas de serviço realizem ações nos recursos do projeto.

A seguinte tabela lista os papéis predefinidos do IAM no Cloud Spanner, inclusive uma lista das permissões associadas a cada papel:

Papel Nome Descrição Permissões Menor recurso
roles/spanner.admin Administrador do Cloud Spanner

Tem acesso completo a todos os recursos do Cloud Spanner em um projeto do Google Cloud. Um membro com esse papel pode:

  • conceder e revogar as permissões de outros membros para todos os recursos do Cloud Spanner no projeto;
  • alocar e excluir recursos que podem ser cobrados do Cloud Spanner;
  • emitir operações get/list/modify em recursos do Cloud Spanner;
  • realizar operações de leitura e gravação em todos os bancos de dados do Cloud Spanner no projeto;
  • pesquisar metadados do projeto.
  • monitoring.timeSeries.list
  • resourcemanager.projects.get
  • resourcemanager.projects.list
  • spanner.*
Projeto
roles/spanner.backupAdmin Administrador de backup do Cloud Spanner

Um membro com esse papel pode:

  • criar, visualizar, atualizar e excluir backups;
  • visualizar e gerenciar a política do IAM de um backup.

Este papel não pode restaurar um banco de dados a partir de um backup.

  • monitoring.timeSeries.list
  • resourcemanager.projects.get
  • resourcemanager.projects.list
  • spanner.backupOperations.*
  • spanner.backups.create
  • spanner.backups.delete
  • spanner.backups.get
  • spanner.backups.getIamPolicy
  • spanner.backups.list
  • spanner.backups.setIamPolicy
  • spanner.backups.update
  • spanner.databases.createBackup
  • spanner.databases.get
  • spanner.databases.list
  • spanner.instances.get
  • spanner.instances.list
Instância
roles/spanner.backupWriter Gravador de backup do Cloud Spanner Esse papel deve ser usado por scripts que automatizam a criação de backup. Um membro com esse papel pode criar backups, mas não pode atualizá-los ou excluí-los.
  • spanner.backupOperations.get
  • spanner.backupOperations.list
  • spanner.backups.create
  • spanner.backups.get
  • spanner.backups.list
  • spanner.databases.createBackup
  • spanner.databases.get
  • spanner.databases.list
  • spanner.instances.get
Instância
roles/spanner.databaseAdmin Administrador do banco de dados do Cloud Spanner

Um membro com esse papel pode:

  • receber/listar todas as instâncias do Cloud Spanner no projeto;
  • criar/listar/remover bancos de dados em uma instância;
  • conceder/revogar o acesso a bancos de dados no projeto;
  • realizar operações de leitura e gravação em todos os bancos de dados do Cloud Spanner no projeto;
  • monitoring.timeSeries.list
  • resourcemanager.projects.get
  • resourcemanager.projects.list
  • spanner.databaseOperations.*
  • spanner.databases.beginOrRollbackReadWriteTransaction
  • spanner.databases.beginPartitionedDmlTransaction
  • spanner.databases.beginReadOnlyTransaction
  • spanner.databases.create
  • spanner.databases.drop
  • spanner.databases.get
  • spanner.databases.getDdl
  • spanner.databases.getIamPolicy
  • spanner.databases.list
  • spanner.databases.partitionQuery
  • spanner.databases.partitionRead
  • spanner.databases.read
  • spanner.databases.select
  • spanner.databases.setIamPolicy
  • spanner.databases.update
  • spanner.databases.updateDdl
  • spanner.databases.write
  • spanner.instances.get
  • spanner.instances.getIamPolicy
  • spanner.instances.list
  • spanner.sessions.*
Instância
roles/spanner.databaseReader Leitor de banco de dados do Cloud Spanner

Um membro com esse papel pode:

  • ler do banco de dados do Cloud Spanner;
  • executar consultas SQL no banco de dados;
  • ver o esquema do banco de dados.
  • spanner.databases.beginReadOnlyTransaction
  • spanner.databases.getDdl
  • spanner.databases.partitionQuery
  • spanner.databases.partitionRead
  • spanner.databases.read
  • spanner.databases.select
  • spanner.instances.get
  • spanner.sessions.*
Database
roles/spanner.databaseUser Usuário do banco de dados do Cloud Spanner

Um membro com esse papel pode:

  • ler e gravar no banco de dados do Cloud Spanner;
  • executar consultas SQL no banco de dados, incluindo DML (particionada ou não);
  • ver e atualizar o esquema do banco de dados.
  • spanner.databaseOperations.*
  • spanner.databases.beginOrRollbackReadWriteTransaction
  • spanner.databases.beginPartitionedDmlTransaction
  • spanner.databases.beginReadOnlyTransaction
  • spanner.databases.getDdl
  • spanner.databases.partitionQuery
  • spanner.databases.partitionRead
  • spanner.databases.read
  • spanner.databases.select
  • spanner.databases.updateDdl
  • spanner.databases.write
  • spanner.instances.get
  • spanner.sessions.*
Database
roles/spanner.restoreAdmin Administrador de restauração do Cloud Spanner

Um membro com esse papel pode restaurar bancos de dados a partir de backups.

Se você precisar restaurar um backup para uma instância diferente, aplique esse papel no nível do projeto ou nas duas instâncias. Esse papel não pode criar backups.

  • monitoring.timeSeries.list
  • resourcemanager.projects.get
  • resourcemanager.projects.list
  • spanner.backups.get
  • spanner.backups.list
  • spanner.backups.restoreDatabase
  • spanner.databaseOperations.cancel
  • spanner.databaseOperations.get
  • spanner.databaseOperations.list
  • spanner.databases.create
  • spanner.databases.get
  • spanner.databases.list
  • spanner.instances.get
  • spanner.instances.list
Instância
roles/spanner.viewer Leitor do Cloud Spanner

Um membro com esse papel pode:

  • ver (mas não modificar) todas as instâncias do Cloud Spanner;
  • ver todos os bancos de dados do Cloud Spanner (mas não pode modificar ou ler a partir de bancos de dados).

Por exemplo, você pode combinar esse papel com o papel roles/spanner.databaseUser para conceder a um usuário acesso a um banco de dados específico, mas somente acesso de visualização a outras instâncias e bancos de dados.

Esse papel é recomendado no nível do projeto do Google Cloud para usuários que interagem com os recursos do Cloud Spanner no Google Cloud Console.

  • monitoring.timeSeries.list
  • resourcemanager.projects.get
  • resourcemanager.projects.list
  • spanner.databases.list
  • spanner.instanceConfigs.*
  • spanner.instances.get
  • spanner.instances.list
Projeto

Papéis primários

Papéis primários são aqueles no nível do projeto que antecedem o IAM. Consulte Papéis primários para mais detalhes.

O Cloud Spanner aceita os papéis primários a seguir, mas você precisa usar um dos papéis predefinidos mostrados acima sempre que possível. Os papéis primários incluem permissões amplas que se aplicam a todos os recursos do Google Cloud. Por outro lado, os papéis predefinidos do Cloud Spanner incluem permissões refinadas que se aplicam somente ao Cloud Spanner.

Papel primário Descrição
roles/viewer Pode listar e receber os metadados de esquemas e instâncias. Também pode ler e consultar usando SQL em um banco de dados.
roles/editor Pode fazer tudo que um roles/viewer faz. Também pode criar instâncias e bancos de dados e gravar dados em um banco de dados.
roles/owner Pode fazer tudo que um roles/editor faz. Também pode modificar o acesso a bancos de dados e instâncias.

Papéis personalizados

Se os papéis predefinidos do Cloud Spanner não atenderem aos requisitos de negócios, será possível definir os próprios papéis personalizados com permissões especificadas.

Antes de criar um papel personalizado, identifique as tarefas que precisam ser executadas. Em seguida, identifique as permissões necessárias para cada tarefa e adicione-as ao papel personalizado.

Papéis personalizados para tarefas da conta de serviço

Para a maioria das tarefas, é evidente quais permissões você precisa adicionar ao papel personalizado. Por exemplo, se você quer que sua conta de serviço crie um banco de dados, adicione a permissão spanner.databases.create ao papel personalizado.

No entanto, ao ler ou gravar dados em uma tabela do Cloud Spanner, você precisa adicionar várias permissões diferentes ao papel personalizado. A tabela a seguir mostra quais permissões são obrigatórias para ler e gravar dados.

Tarefa da conta de serviço Permissões obrigatórias
Ler dados spanner.databases.select
spanner.sessions.create
spanner.sessions.delete
Inserir, atualizar ou excluir dados spanner.databases.beginOrRollbackReadWriteTransaction
spanner.databases.write
spanner.sessions.create
spanner.sessions.delete
Criar backup spanner.backups.create
spanner.databases.createBackup
Restaurar um banco de dados spanner.databases.create
spanner.backups.restoreDatabase

Papéis personalizados para tarefas do Console do Google Cloud

Para identificar a lista de permissões necessárias para uma determinada tarefa no Console do Cloud, determine o fluxo de trabalho dessa tarefa e compile as permissões dele. Por exemplo, para visualizar os dados em uma tabela, siga estas etapas no Console do Cloud:

Etapa Permissões
1. Acessar o projeto resourcemanager.projects.get
2. Ver a lista de instâncias spanner.instances.list
3. Selecionar uma instância spanner.instances.get
4. Ver a lista de bancos de dados spanner.databases.list
5. Selecionar um banco de dados e uma tabela spanner.databases.get, spanner.databases.getDdl
6. Ver dados em uma tabela spanner.databases.select, spanner.sessions.create, spanner.sessions.delete

Neste exemplo, são necessárias estas permissões:

  • resourcemanager.projects.get
  • spanner.databases.get
  • spanner.databases.getDdl
  • spanner.databases.list
  • spanner.databases.select
  • spanner.instances.get
  • spanner.instances.list
  • spanner.sessions.create
  • spanner.sessions.delete

A tabela a seguir lista as permissões necessárias para ações no Console do Cloud.

Ação Permissões
Ver a lista de instâncias na página "Instâncias"

resourcemanager.projects.get
spanner.instances.list

Ver a lista na guia "Permissões" da página "Instâncias"

spanner.instances.getIamPolicy

Adicionar membros na guia "Permissões" da página "Instâncias"

spanner.instances.setIamPolicy

Selecionar uma instância na lista correspondente para visualizar a página "Detalhes da instância"

spanner.instances.get

Criar uma instância

spanner.instanceConfigs.list
spanner.instanceOperations.get
spanner.instances.create

Excluir uma instância

spanner.instances.delete

Modificar uma instância

spanner.instanceOperations.get
spanner.instances.update

Ver os gráficos na guia "Monitor" da página "Detalhes da instância" ou na página "Detalhes do banco de dados"

monitoring.metricDescriptors.get
monitoring.metricDescriptors.list
monitoring.timeSeries.list
spanner.instances.get

Ver a lista de bancos de dados na página "Detalhes da instância"

spanner.databases.list

Ver a lista na guia "Permissões" da página "Detalhes do banco de dados"

spanner.databases.getIamPolicy

Adicionar membros na guia "Permissões" da página "Detalhes do banco de dados"

spanner.databases.setIamPolicy

Selecionar um banco de dados na lista de bancos de dados e ver o esquema na página "Detalhes do banco de dados"

spanner.databases.get
spanner.databases.getDdl

Criar um banco de dados

spanner.databases.create

Excluir um banco de dados

spanner.databases.drop

Criar uma tabela

Atualizar um esquema de tabela

spanner.databaseOperations.get
spanner.databaseOperations.list
spanner.databases.updateDdl

Visualizar dados na guia "Dados" da página "Detalhes do banco de dados"

Criar e executar uma consulta

spanner.databases.select
spanner.sessions.create
spanner.sessions.delete

Modificar dados em uma tabela

spanner.databases.beginOrRollbackReadWriteTransaction
spanner.databases.select
spanner.databases.write
spanner.sessions.create
spanner.sessions.delete

Visualizar a guia Backup/Restauração

spanner.backups.list
spanner.backups.get

Ver a lista de operações de backup

spanner.backupOperations.list

Ver a lista de operações de restauração

spanner.databaseOperations.list

Criar backup

spanner.backups.create
spanner.databases.createBackup
spanner.databases.list1
spanner.backupOperations.list1

Restaurar um banco de dados a partir de um backup

spanner.instanceConfigs.list
spanner.instances.get
spanner.backups.get
spanner.backups.restoreDatabase
spanner.instances.list
spanner.databases.create

Atualizar um backup

spanner.backups.update

Excluir um backup

spanner.backups.delete

1 Obrigatório se você estiver criando um backup na guia "Backup/Restauração" no nível da instância em vez do nível do banco de dados.

Gerenciamento de políticas do IAM no Cloud Spanner

É possível receber, definir e testar políticas do IAM usando as APIs REST ou RPC em recursos de instância, banco de dados e backup do Cloud Spanner.

Instâncias

API REST API RPC
projects.instances.getIamPolicy GetIamPolicy
projects.instances.setIamPolicy SetIamPolicy
projects.instances.testIamPermissions TestIamPermissions

Bancos de dados

API REST API RPC
projects.instances.databases.getIamPolicy GetIamPolicy
projects.instances.databases.setIamPolicy SetIamPolicy
projects.instances.databases.testIamPermissions TestIamPermissions

Backups

API REST API RPC
projects.instances.backups.getIamPolicy GetIamPolicy
projects.instances.backups.setIamPolicy SetIamPolicy
projects.instances.backups.testIamPermissions TestIamPermissions

A seguir