O Identity and Access Management (IAM) permite controlar o acesso de usuários e grupos aos recursos do Spanner nos níveis do projeto, da instância e do banco de dados do Spanner. Por exemplo, é possível especificar que um usuário tenha controle total de um banco de dados específico em uma instância específica no projeto, mas não possa criar, modificar ou excluir instâncias no projeto. O uso do controle de acesso com o IAM permite conceder uma permissão a um usuário ou grupo sem precisar modificar cada permissão de instância ou banco de dados do Spanner 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 ver uma descrição detalhada do IAM e dos recursos dele, consulte este Guia do desenvolvedor. Consulte especificamente a seção Como gerenciar políticas do IAM.
Permissões
Com elas, os usuários executam ações específicas nos recursos do Spanner. Por exemplo, a permissão spanner.databases.read permite que um usuário
leia um banco de dados usando a API de leitura do Spanner, enquanto
spanner.databases.select permite que um usuário execute uma instrução SQL select 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. Para mais informações, consulte as referências de configuração de instância para as APIs REST e RPC.
| Nome da permissão de configuração da instância | Descrição |
|---|---|
spanner.instanceConfigs.create |
Criar uma configuração de instância personalizada. |
spanner.instanceConfigs.delete |
Excluir uma configuração de instância personalizada. |
spanner.instanceConfigs.get |
Recebe uma configuração de instância. |
spanner.instanceConfigs.list |
Lista o conjunto de configurações de instância. |
spanner.instanceConfigs.update |
Atualizar uma configuração de instância personalizada. |
Operações de configuração de instâncias
As permissões a seguir se aplicam às operações de configuração de instância do Spanner. Para mais informações, consulte as referências de instância das APIs REST e RPC.
| Nome da permissão de operação de configuração da instância | Descrição |
|---|---|
spanner.instanceConfigOperations.cancel |
Cancelar uma operação de configuração de instância. |
spanner.instanceConfigOperations.delete |
Excluir uma operação de configuração de instância. |
spanner.instanceConfigOperations.get |
Receber uma operação de configuração de instância. |
spanner.instanceConfigOperations.list |
Listar operações de configuração de instância. |
Instâncias
As permissões a seguir se aplicam às instâncias do Spanner. Para mais informações, consulte as referências de instância das APIs REST e RPC.
| Nome da permissão de instância | Descrição |
|---|---|
spanner.instances.create |
Criar uma instância. |
spanner.instances.delete |
Excluir uma instância |
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.list |
Lista instâncias. |
spanner.instances.setIamPolicy |
Define a política do IAM de uma instância. |
spanner.instances.update |
Atualiza uma instância. |
Operações de instância
As permissões a seguir se aplicam às operações de instância do Spanner. Para mais informações, consulte as referências de instância das APIs REST e RPC.
| Nome da permissão da operação da instância | Descrição |
|---|---|
spanner.instanceOperations.cancel |
Cancela uma operação de instância. |
spanner.instanceOperations.delete |
Exclui uma operação de instância. |
spanner.instanceOperations.get |
Recebe uma operação de instância específica. |
spanner.instanceOperations.list |
Lista operações de instâncias. |
Partições de instância
As permissões a seguir se aplicam às partições de instância do Spanner. Para mais informações, consulte as referências de partição de instância para as APIs REST e RPC.
| Nome da permissão de instância | Descrição |
|---|---|
spanner.instancePartitions.create |
Criar uma partição de instância. |
spanner.instancePartitions.delete |
Excluir uma partição de instância. |
spanner.instancePartitions.get |
Receber a configuração de uma partição de instância específica. |
spanner.instancePartitions.list |
Listar partições de instância. |
spanner.instancePartitions.update |
Atualizar uma partição de instância. |
Operações de partição de instância
As permissões a seguir se aplicam às operações de partição de instância do Spanner. Para mais informações, consulte as referências de partição de instância para as APIs REST e RPC.
| Nome da permissão de operação da partição da instância | Descrição |
|---|---|
spanner.instancePartitionOperations.cancel |
Cancelar uma operação de partição de instância. |
spanner.instancePartitionOperations.delete |
Excluir uma operação de partição de instância. |
spanner.instancePartitionOperations.get |
Receber uma operação de partição de instância específica. |
spanner.instancePartitionOperations.list |
Listar operações de partição de instância. |
Bancos de dados
As permissões a seguir se aplicam aos bancos de dados do Spanner. Para mais informações, consulte as referências de banco de dados para as APIs REST e RPC.
| Nome da permissão do banco de dados | Descrição |
|---|---|
spanner.databases.adapt |
Permite que a API Spanner Adapter interaja diretamente com o Spanner. |
spanner.databases.beginOrRollbackReadWriteTransaction |
Inicie ou reverter uma transação de leitura e gravação em um banco de dados do Spanner. |
spanner.databases.beginPartitionedDmlTransaction |
Executar uma instrução de linguagem de manipulação de dados (DML) particionada de instância. Para mais informações sobre consultas particionadas de instância, consulte Ler dados em paralelo. |
spanner.databases.beginReadOnlyTransaction |
Inicie uma transação somente leitura em um banco de dados do Spanner. |
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.drop |
Remove 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 |
Receber a política do IAM de um banco de dados. |
spanner.databases.list |
Lista bancos de dados |
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.setIamPolicy |
Defina a política de IAM de um banco 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.useDataBoost |
Use os recursos de computação do Data Boost do Spanner para processar consultas particionadas de instâncias. |
spanner.databases.useRoleBasedAccess |
Use o controle de acesso refinado. |
spanner.databases.write |
Grava em um banco de dados. |
Papéis de banco de dados
As permissões a seguir se aplicam aos papéis de banco de dados do Spanner. Para mais informações, consulte as referências de banco de dados para as APIs REST e RPC.
| Nome da permissão do papel do banco de dados | Descrição |
|---|---|
spanner.databaseRoles.list |
Listar papéis de banco de dados. |
spanner.databaseRoles.use |
Use um papel de banco de dados especificado. |
Operações de banco de dados
As permissões a seguir se aplicam às operações do banco de dados do Spanner. Para mais informações, consulte as referências de banco de dados para as APIs REST e RPC.
| Nome da permissão de operação do banco de dados | Descrição |
|---|---|
spanner.databaseOperations.cancel |
Cancela uma operação do banco de dados. |
spanner.databaseOperations.get |
Recebe uma operação de banco de dados específica. |
spanner.databaseOperations.list |
Lista banco de dados e restaura operações de banco de dados. |
Backups
As permissões a seguir se aplicam aos backups do Spanner. Para mais informações, consulte as referências de backups para as APIs REST e 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.delete |
Exclui um backup |
spanner.backups.get |
Recebe um backup. |
spanner.backups.getIamPolicy |
Recebe a política do IAM de 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.setIamPolicy |
Define a política do IAM de backup. |
spanner.backups.update |
Atualiza um backup. |
Operações de backup
As permissões a seguir se aplicam às operações de backup do Spanner. Para mais informações, consulte as referências de banco de dados para as APIs REST e RPC.
| Nome da permissão da operação de backup | Descrição |
|---|---|
spanner.backupOperations.cancel |
Cancela uma operação de backup. |
spanner.backupOperations.get |
Recebe uma operação de backup específica. |
spanner.backupOperations.list |
Lista operações de backup. |
Programações de backup
As permissões a seguir se aplicam às programações de backup do Spanner. Para mais informações, consulte as referências de banco de dados das APIs REST e RPC.
| Nome da permissão da programação de backup | Descrição |
|---|---|
spanner.backupSchedules.create |
Criar uma programação de backup. Também requer spanner.databases.createBackup no banco de dados de origem. |
spanner.backupSchedules.delete |
Excluir uma programação de backup. |
spanner.backupSchedules.get |
Receber uma programação de backup. |
spanner.backupSchedules.list |
Listar programações de backup. |
spanner.backupSchedules.update |
Atualizar uma programação de backup. |
Sessões
As permissões a seguir se aplicam às sessões do Spanner. Para mais informações, consulte as referências de banco de dados para as APIs REST e RPC.
| Nome da permissão da sessão | Descrição |
|---|---|
spanner.sessions.create |
Criar uma sessão. |
spanner.sessions.delete |
Exclui uma sessão. |
spanner.sessions.get |
Recebe 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, permitindo 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:
| Role | Permissions |
|---|---|
Cloud Spanner Admin( Has complete access to all Spanner resources in a Google Cloud project. A principal with this role can:
Lowest-level resources where you can grant this role:
|
|
Cloud Spanner Editor( Editor role for Cloud Spanner |
|
Cloud Spanner Viewer( A principal with this role can:
For example, you can combine this role with the This role is recommended at the Google Cloud project level for users interacting with Cloud Spanner resources in the Google Cloud console. Lowest-level resources where you can grant this role:
|
|
Cloud Spanner Backup Admin( A principal with this role can:
This role cannot restore a database from a backup. Lowest-level resources where you can grant this role:
|
|
Cloud Spanner Backup Writer( This role is intended to be used by scripts that automate backup creation. A principal with this role can create backups, but cannot update or delete them. Lowest-level resources where you can grant this role:
|
|
Cloud Spanner Database Admin( A principal with this role can:
Lowest-level resources where you can grant this role:
|
|
Cloud Spanner Database Reader( A principal with this role can:
Lowest-level resources where you can grant this role:
|
|
Cloud Spanner Database Reader with DataBoost( Includes all permissions in the spanner.databaseReader role enabling access to read and/or query a Cloud Spanner database using instance resources, as well as the permission to access the database with Data Boost, a fully managed serverless service that provides independent compute resources. Lowest-level resources where you can grant this role:
|
|
Cloud Spanner Database Role User( In conjunction with the IAM role Cloud Spanner Fine-grained Access User, grants permissions to individual Spanner database roles. Add a condition for each desired Spanner database role that includes the resource type of `spanner.googleapis.com/DatabaseRole` and the resource name ending with `/YOUR_SPANNER_DATABASE_ROLE`. Lowest-level resources where you can grant this role:
|
|
Cloud Spanner Database User( A principal with this role can:
Lowest-level resources where you can grant this role:
|
|
Cloud Spanner Fine-grained Access User( Grants permissions to use Spanner's fine-grained access control framework. To grant access to specific database roles, also add the `roles/spanner.databaseRoleUser` IAM role and its necessary conditions. Lowest-level resources where you can grant this role:
|
|
Cloud Spanner Database Graph Intelligence features user( Access to Graph Intelligence features. |
|
Cloud Spanner Restore Admin( A principal with this role can restore databases from backups. If you need to restore a backup to a different instance, apply this role at the project level or to both instances. This role cannot create backups. Lowest-level resources where you can grant this role:
|
|
Service agent roles
Service agent roles should only be granted to service agents.
| Role | Permissions |
|---|---|
Cloud Spanner API Service Agent( Cloud Spanner API Service Agent |
|
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.
Embora o Spanner seja compatível com os papéis básicos a seguir, use um dos papéis predefinidos mostrados anteriormente 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 detalhadas que se aplicam apenas ao Spanner.
| Papel básico | Descrição |
|---|---|
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. |
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. |
Papéis personalizados
Se os papéis predefinidos do Spanner não atenderem aos requisitos de negócios, você poderá definir as próprias funções personalizadas com as permissões que especificar.
Antes de criar uma função personalizada, identifique as tarefas que você precisa realizar. Em seguida, identifique as permissões necessárias para cada tarefa e adicione-as à função personalizada.
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, é necessário adicionar várias permissões diferentes à sua função personalizada. 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 |
|---|---|
| Criar backup | spanner.backups.createspanner.databases.createBackup |
| Ler dados | spanner.databases.selectspanner.sessions.createspanner.sessions.delete |
| Restaurar um banco de dados | spanner.backups.restoreDatabasespanner.databases.create |
| Inserir, atualizar ou excluir dados | spanner.databases.beginOrRollbackReadWriteTransactionspanner.sessions.createspanner.sessions.deletespanner.databases.write |
Funções personalizadas para tarefas do console do Google Cloud
Para identificar a lista de permissões necessárias para uma determinada tarefa no console doGoogle Cloud , determine o fluxo de trabalho dessa tarefa e compile as permissões para esse 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.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.getspanner.databases.getDdlspanner.databases.listspanner.databases.selectspanner.instances.getspanner.instances.listspanner.sessions.createspanner.sessions.delete
A tabela a seguir lista as permissões necessárias para ações no console doGoogle Cloud .
| Permissões | Ação |
|---|---|
spanner.databases.setIamPolicy |
Adicionar membros na guia "Permissões" da página "Detalhes do banco de dados" |
spanner.instances.setIamPolicy |
Adicionar membros na guia "Permissões" da página "Instâncias" |
spanner.backups.createspanner.databases.createBackupspanner.databases.list1spanner.backupOperations.list1 |
Criar backup |
spanner.backupSchedules.createspanner.databases.createBackup |
Criar uma programação de backup |
spanner.databases.create |
Criar um banco de dados |
spanner.instancePartitions.listspanner.instancePartitionOperations.getspanner.instancePartitions.create |
Criar uma partição de instância |
spanner.databaseOperations.getspanner.databaseOperations.listspanner.databases.updateDdl |
Criar uma tabela Atualizar um esquema de tabela |
spanner.instanceConfigs.listspanner.instanceOperations.getspanner.instances.create |
Criar uma instância |
spanner.backups.delete |
Excluir um backup |
spanner.backupSchedules.delete |
Excluir uma programação de backup |
spanner.databases.drop |
Excluir um banco de dados |
spanner.instancePartitions.delete |
Excluir uma partição de instância |
spanner.instances.delete |
Excluir uma instância |
spanner.instancePartitionOperations.getspanner.instancePartitions.update |
Modificar uma partição de instância |
spanner.instanceOperations.getspanner.instances.update |
Modificar uma instância |
spanner.databases.beginOrRollbackReadWriteTransactionspanner.databases.selectspanner.databases.writespanner.sessions.createspanner.sessions.delete |
Modificar dados em uma tabela |
spanner.instanceConfigs.listspanner.instances.getspanner.backups.getspanner.backups.restoreDatabasespanner.instances.listspanner.databases.create |
Restaurar um banco de dados a partir de um backup |
spanner.databases.getspanner.databases.getDdl |
Selecionar um banco de dados na lista de bancos de dados e ver o esquema na página "Detalhes do banco de dados" |
spanner.instances.get |
Selecionar uma instância na lista correspondente para visualizar a página "Detalhes da instância" |
spanner.backups.update |
Atualizar um backup |
spanner.backupSchedules.update |
Atualizar uma programação de backup |
spanner.databases.selectspanner.sessions.createspanner.sessions.delete |
Visualizar dados na guia "Dados" da página de detalhes do banco de dados Criar e executar uma consulta |
spanner.backups.listspanner.backups.get |
Acessar a página de backup/restauração |
monitoring.metricDescriptors.getmonitoring.metricDescriptors.listmonitoring.timeSeries.listspanner.instances.get |
Ver os gráficos na guia "Monitor" da página "Detalhes da instância" ou na página "Detalhes do banco de dados" |
spanner.backupOperations.list |
Ver a lista de operações de backup |
spanner.databases.list |
Ver a lista de bancos de dados na página "Detalhes da instância" |
resourcemanager.projects.getspanner.instances.list |
Ver a lista de instâncias na página "Instâncias" |
spanner.databaseOperations.list |
Ver a lista de operações de restauração |
spanner.databases.getIamPolicy |
Ver a lista na guia "Permissões" da página "Detalhes do banco de dados" |
spanner.instances.getIamPolicy |
Ver a lista na guia "Permissões" da página "Instâncias" |
Gerenciamento de políticas do IAM do Spanner
É possível receber, definir e testar 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
- Aprenda mais sobre o IAM.
- Saiba como aplicar papéis do IAM para um banco de dados, uma instância ou um projeto Google Cloud do Spanner.
- Saiba como controlar o acesso aos recursos do Google Cloud , incluindo o Spanner, pela Internet.