Controle de acesso com o IAM

Mantenha tudo organizado com as coleções Salve e categorize o conteúdo com base nas suas preferências.

O Identity and Access Management (IAM) permite que você controle o acesso de usuários e grupos aos recursos do Cloud Spanner nos projetos, na instância do Spanner e nos bancos de dados do 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. Ao usar o controle de acesso com o IAM, você concede uma permissão a um usuário ou grupo sem precisar modificar cada instância do Spanner ou permissão de banco de dados individualmente.

Este documento se concentra nas permissões do IAM relevantes para o Spanner e nos papéis do IAM que concedem essas permissões. Para 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 executar ações específicas nos recursos do Spanner. Por exemplo, a permissão spanner.databases.read permite que um usuário leia de um banco de dados usando a API de leitura do Spanner, enquanto spanner.databases.select permite que um usuário execute uma instrução de seleção 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 Spanner.

Configurações da instância

As permissões a seguir se aplicam às configurações de instância do 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 às instâncias do Spanner. Consulte a referência de 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 Spanner. Consulte a referência de 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 Spanner. Consulte a referência de 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 Iniciar uma transação somente leitura em um banco de dados do Spanner.
spanner.databases.beginOrRollbackReadWriteTransaction Iniciar ou reverter uma transação de leitura e gravação em um banco de dados do 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 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 permissões a seguir se aplicam aos backups do 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 permissões a seguir se aplicam às operações de backup do 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 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.databases.write. Há dois tipos de papéis predefinidos para o 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 tabela a seguir lista o controle de acesso com papéis predefinidos do IAM, incluindo uma lista de permissões associadas a cada papel:

Papel Permissões

(roles/spanner.admin)

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

  • conceder e revogar as permissões a outros administradores 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.

Recursos de nível mais baixo em que você pode conceder esse papel:

  • Projeto

Contém três permissões de proprietário

monitoring.timeSeries.list

resourcemanager.projects.get

resourcemanager.projects.list

spanner.*

  • spanner.backupOperations.cancel
  • spanner.backupOperations.get
  • spanner.backupOperations.list
  • spanner.backups.copy
  • spanner.backups.create
  • spanner.backups.delete
  • spanner.backups.get
  • spanner.backups.getIamPolicy
  • spanner.backups.list
  • spanner.backups.restoreDatabase
  • spanner.backups.setIamPolicy
  • spanner.backups.update
  • spanner.databaseOperations.cancel
  • spanner.databaseOperations.delete
  • spanner.databaseOperations.get
  • spanner.databaseOperations.list
  • spanner.databaseRoles.list
  • spanner.databaseRoles.use
  • spanner.databases.beginOrRollbackReadWriteTransaction
  • spanner.databases.beginPartitionedDmlTransaction
  • spanner.databases.beginReadOnlyTransaction
  • spanner.databases.create
  • spanner.databases.createBackup
  • 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.useRoleBasedAccess
  • spanner.databases.write
  • spanner.instanceConfigs.get
  • spanner.instanceConfigs.list
  • spanner.instanceOperations.cancel
  • spanner.instanceOperations.delete
  • spanner.instanceOperations.get
  • spanner.instanceOperations.list
  • spanner.instances.create
  • spanner.instances.delete
  • spanner.instances.get
  • spanner.instances.getIamPolicy
  • spanner.instances.list
  • spanner.instances.setIamPolicy
  • spanner.instances.update
  • spanner.sessions.create
  • spanner.sessions.delete
  • spanner.sessions.get
  • spanner.sessions.list

(roles/spanner.backupAdmin)

Um administrador com este papel pode:

  • criar, visualizar, atualizar e excluir backups;
  • Visualizar e gerenciar a política de permissão de um backup.

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

Recursos de nível mais baixo em que você pode conceder esse papel:

  • Instância

Contém uma permissão de proprietário

monitoring.timeSeries.list

resourcemanager.projects.get

resourcemanager.projects.list

spanner.backupOperations.*

  • spanner.backupOperations.cancel
  • spanner.backupOperations.get
  • spanner.backupOperations.list

spanner.backups.copy

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

(roles/spanner.backupWriter)

Esse papel deve ser usado por scripts que automatizam a criação de backup. Um principal com esse papel pode criar backups, mas não pode atualizá-los ou excluí-los.

Recursos de nível mais baixo em que você pode conceder esse papel:

  • Instância

spanner.backupOperations.get

spanner.backupOperations.list

spanner.backups.copy

spanner.backups.create

spanner.backups.get

spanner.backups.list

spanner.databases.createBackup

spanner.databases.get

spanner.databases.list

spanner.instances.get

(roles/spanner.databaseAdmin)

Um administrador com este 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;

Recursos de nível mais baixo em que você pode conceder esse papel:

  • Instância

Contém uma permissão de proprietário

monitoring.timeSeries.list

resourcemanager.projects.get

resourcemanager.projects.list

spanner.databaseOperations.*

  • spanner.databaseOperations.cancel
  • spanner.databaseOperations.delete
  • spanner.databaseOperations.get
  • spanner.databaseOperations.list

spanner.databaseRoles.*

  • spanner.databaseRoles.list
  • spanner.databaseRoles.use

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.useRoleBasedAccess

spanner.databases.write

spanner.instances.get

spanner.instances.getIamPolicy

spanner.instances.list

spanner.sessions.*

  • spanner.sessions.create
  • spanner.sessions.delete
  • spanner.sessions.get
  • spanner.sessions.list

(roles/spanner.databaseReader)

Um administrador com este papel pode:

  • ler do banco de dados do Cloud Spanner;
  • executar consultas SQL no banco de dados;
  • ver o esquema do banco de dados.

Recursos de nível mais baixo em que você pode conceder esse papel:

  • 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.*

  • spanner.sessions.create
  • spanner.sessions.delete
  • spanner.sessions.get
  • spanner.sessions.list

(roles/spanner.databaseRoleUser)

Junto com o papel do IAM de usuário de acesso minucioso do Cloud Spanner, concede permissões para papéis individuais de bancos de dados do Spanner. Adicione uma condição para cada papel desejado do banco de dados do Spanner que incluir o tipo de recurso `spanner.googleapis.com/DatabaseRole` e o nome do recurso terminado em `/YOUR_SPANNER_DATABASE_ROLE`.

spanner.databaseRoles.use

(roles/spanner.databaseUser)

Um administrador com este papel pode:

  • realizar operações de leitura e gravação 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.

Recursos de nível mais baixo em que você pode conceder esse papel:

  • Banco de dados

spanner.databaseOperations.*

  • spanner.databaseOperations.cancel
  • spanner.databaseOperations.delete
  • spanner.databaseOperations.get
  • spanner.databaseOperations.list

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.*

  • spanner.sessions.create
  • spanner.sessions.delete
  • spanner.sessions.get
  • spanner.sessions.list

(roles/spanner.fineGrainedAccessUser)

Concede permissões para usar o framework de controle de acesso minucioso do Spanner. É necessário adicionar o papel do IAM de usuário do papel de banco de dados do Cloud Spanner e as condições necessárias para conceder acesso aos papéis específicos do banco de dados.

spanner.databaseRoles.list

spanner.databases.useRoleBasedAccess

(roles/spanner.restoreAdmin)

Um principal 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.

Recursos de nível mais baixo em que você pode conceder esse papel:

  • Instância

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

(roles/spanner.viewer)

Um administrador com este 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.

Recursos de nível mais baixo em que você pode conceder esse papel:

  • Projeto

monitoring.timeSeries.list

resourcemanager.projects.get

resourcemanager.projects.list

spanner.databases.list

spanner.instanceConfigs.*

  • spanner.instanceConfigs.get
  • spanner.instanceConfigs.list

spanner.instances.get

spanner.instances.list

Papéis básicos

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

O Spanner é compatível com os seguintes papéis básicos, mas use um dos papéis predefinidos mostrados acima sempre que possível. Os papéis básicos incluem permissões amplas que se aplicam a todos os seus recursos do Google Cloud. Por outro lado, os papéis predefinidos do Spanner incluem permissões refinadas que se aplicam somente ao Spanner.

Papel básico 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 Spanner não atenderem aos requisitos de negócios, defina seus 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 Spanner, você precisa adicionar várias permissões diferentes ao seu 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 necessá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 Google Cloud, você determina o fluxo de trabalho dessa tarefa e compila as permissões desse fluxo de trabalho. Por exemplo, para visualizar os dados em uma tabela, siga estas etapas no console do Google 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 as ações no Console do Google 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 da guia "Backup/restauração" no nível da instância em vez de no nível do banco de dados.

Gerenciamento de políticas do IAM do Spanner

É possível receber, definir e testar as políticas do IAM usando as APIs REST ou RPC nos recursos de instância, banco de dados e backup do 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