Controle de acesso ao projeto

Nesta página, você encontra as instruções para controlar o acesso e as permissões de projetos do Cloud SQL com o Identity and Access Management (IAM).

Visão geral

O Google Cloud oferece o Gerenciamento de identidade e acesso (IAM), que permite a concessão de acesso mais granular a recursos específicos do Google Cloud e impede o acesso indesejado a outros recursos. Saiba mais sobre os papéis e permissões do IAM do Google Cloud SQL. Para uma descrição detalhada do Google Cloud IAM, consulte a documentação do IAM.

O Cloud SQL fornece um conjunto de papéis predefinidos, projetados para ajudar você a controlar o acesso aos recursos do Cloud SQL. Também é possível criar papéis personalizados próprios se os papéis predefinidos não fornecerem os conjuntos de permissões necessárias. Além disso, os papéis básicos de legado (Editor, Leitor e Proprietário) também estão disponíveis, mas não fornecem o mesmo controle granular que os papéis do Cloud SQL. Em particular, os papéis básicos fornecem acesso a recursos no Google Cloud e não apenas para o Cloud SQL. Para mais informações sobre papéis básicos, consulte Papéis básicos.

É possível definir uma política do IAM em qualquer nível da hierarquia de recursos: no nível da organização, da pasta, do projeto ou do recurso. Os recursos herdam as políticas de todos os recursos pai.

O Cloud SQL também é compatível com as Condições do IAM, que podem refinar papéis e permissões em recursos individuais do Cloud SQL, como instâncias em um projeto. É possível adicionar uma condição como uma propriedade de uma vinculação de política do IAM para especificar um subconjunto de instâncias que os principais podem acessar.

Com as condições do IAM, é possível conceder papéis com base em vários atributos. Por exemplo, é possível permitir o acesso apenas em determinadas datas e horas ou conceder acesso somente aos recursos do Cloud SQL com determinados nomes. Nesta página, você encontra alguns exemplos de como usar as condições do IAM com o Cloud SQL. Para mais informações sobre as Condições do IAM, consulte a página Visão geral das Condições do IAM.

Permissões e papéis

As permissões e os papéis compatíveis com o Cloud SQL estão resumidos nesta seção.

Papéis predefinidos

O Cloud SQL dispõe de alguns papéis predefinidos que você pode usar para fornecer permissões mais granulares aos principais. O papel concedido a um principal controla quais ações ele pode tomar. Os principais podem ser indivíduos, grupos ou contas de serviço.

Conceda diversos papéis ao mesmo principal. Também é possível alterar os papéis concedidos a um principal a qualquer momento, desde que você tenha permissões para isso.

Os papéis mais amplos incluem os definidos de maneira mais restrita. Por exemplo, no Cloud SQL, o papel de Editor inclui todas as permissões do papel de Leitor e mais as permissões de adição do papel de Editor. Da mesma forma, todas as permissões do papel de editor com as permissões adicionais dele são incluídas pelo papel de administrador.

Os papéis básicos, como Proprietário, Editor e leitor, fornecem permissões no Google Cloud. Os papéis específicos do Cloud SQL fornecem somente permissões do Cloud SQL, exceto as seguintes permissões do Google Cloud, que são necessárias para o uso geral dele:

  • resourcemanager.projects.get
  • resourcemanager.projects.list
  • serviceusage.quotas.get
  • serviceusage.services.get
  • serviceusage.services.use

A tabela a seguir lista os papéis predefinidos disponíveis para o Cloud SQL e as permissões do serviço:

Nome
do papel
Descrição
das permissões do Cloud SQL
roles/owner
Proprietário (papel legado)
Controle e acesso total a todos os recursos do Google Cloud, gerenciar acesso do usuário.

cloudsql.*
roles/editor
Editor (papel legado)
Acesso de leitura e gravação a todos os recursos do Google Cloud e do Cloud SQL (controle total, exceto pela capacidade de modificar permissões).

Todas as permissões cloudsql, exceto
cloudsql.*.getIamPolicy
cloudsql.*.setIamPolicy
roles/viewer
Leitor (papel legado)
Acesso somente leitura a todos os recursos do Google Cloud, incluindo recursos do Cloud SQL.

cloudsql.*.export
cloudsql.*.get
cloudsql.*.list
roles/cloudsql.admin
Administrador do Cloud SQL
Controle total de todos os recursos do Cloud SQL.

cloudsql.*
recommender.cloudsqlInstanceDiskUsageTrendInsights.*
recommender.cloudsqlInstanceOutOfDiskRecommendations.* recommender.cloudsqlInstanceDiskUsageTrendInsights.*
recommender.cloudsqlInstanceOutOfDiskRecommendations.* recommender.cloudsqlInstanceDiskUsageTrendInsights.*
recommender.cloudsqlInstanceOutOfDiskRecommendations.*
recommender.cloudsqlInstanceCpuUsageInsights.*
recommender.cloudsqlInstanceMemoryUsageInsights.*
recommender.cloudsqlOverprovisionedInstanceRecommendations.*
recommender.cloudsqlInstanceActivityInsights.*
recommender.cloudsqlIdleInstanceRecommendations.*
roles/cloudsql.editor
Editor do Cloud SQL
Gerenciar recursos do Cloud SQL. Sem capacidade de ver ou modificar permissões, nem modificar usuários ou certificados SSL. Sem capacidade de importar dados, restaurar a partir de um backup, clonar, excluir ou promover instâncias. Sem capacidade de iniciar ou interromper réplicas. Sem capacidade de excluir bancos de dados, réplicas ou backups.

cloudsql.instances.addServerCa
cloudsql.instances.connect
cloudsql.instances.export
cloudsql.instances.failover
cloudsql.instances.get
cloudsql.instances.list
cloudsql.instances.listServerCas
cloudsql.instances.restart
cloudsql.instances.rotateServerCa
cloudsql.instances.truncateLog
cloudsql.instances.update
cloudsql.databases.create
cloudsql.databases.get
cloudsql.databases.list
cloudsql.databases.update
cloudsql.backupRuns.create
cloudsql.backupRuns.get
cloudsql.backupRuns.list
cloudsql.sslCerts.get
cloudsql.sslCerts.list
cloudsql.users.list
recommender.cloudsqlInstanceDiskUsageTrendInsights.get
recommender.cloudsqlInstanceDiskUsageTrendInsights.list
recommender.cloudsqlInstanceDiskUsageTrendInsights.update
recommender.cloudsqlInstanceOutOfDiskRecommendations.get
recommender.cloudsqlInstanceOutOfDiskRecommendations.list
recommender.cloudsqlInstanceOutOfDiskRecommendations.update
recommender.cloudsqlInstanceCpuUsageInsights.get
recommender.cloudsqlInstanceCpuUsageInsights.list
recommender.cloudsqlInstanceCpuUsageInsights.update
recommender.cloudsqlInstanceMemoryUsageInsights.get
recommender.cloudsqlInstanceMemoryUsageInsights.list
recommender.cloudsqlInstanceMemoryUsageInsights.update
recommender.cloudsqlOverprovisionedInstanceRecommendations.get
recommender.cloudsqlOverprovisionedInstanceRecommendations.list
recommender.cloudsqlOverprovisionedInstanceRecommendations.update
recommender.cloudsqlInstanceActivityInsights.get
recommender.cloudsqlInstanceActivityInsights.list
recommender.cloudsqlInstanceActivityInsights.update
recommender.cloudsqlIdleInstanceRecommendations.get
recommender.cloudsqlIdleInstanceRecommendations.list
recommender.cloudsqlIdleInstanceRecommendations.update
roles/cloudsql.viewer
Leitor do Cloud SQL
Acesso somente leitura a todos os recursos do Cloud SQL.

cloudsql.*.export
cloudsql.*.get
cloudsql.*.list
cloudsql.instances.listServerCa
recommender.cloudsqlInstanceOutOfDiskRecommendations.get
recommender.cloudsqlInstanceOutOfDiskRecommendations.list
recommender.cloudsqlInstanceDiskUsageTrendInsights.get
recommender.cloudsqlInstanceDiskUsageTrendInsights.list
recommender.cloudsqlInstanceCpuUsageInsights.get
recommender.cloudsqlInstanceCpuUsageInsights.list
recommender.cloudsqlInstanceMemoryUsageInsights.get
recommender.cloudsqlInstanceMemoryUsageInsights.list
recommender.cloudsqlOverprovisionedInstanceRecommendations.get
recommender.cloudsqlOverprovisionedInstanceRecommendations.list
recommender.cloudsqlInstanceActivityInsights.get
recommender.cloudsqlInstanceActivityInsights.list
recommender.cloudsqlIdleInstanceRecommendations.get
recommender.cloudsqlIdleInstanceRecommendations.list
roles/cloudsql.client
Cliente do Cloud SQL
Acesso de conectividade a instâncias do Cloud SQL a partir do App Engine e do proxy do Cloud SQL Auth. Não é necessário para o acesso a uma instância usando endereços IP.

cloudsql.instances.connect
cloudsql.instances.get
roles/cloudsql.instanceUser
Usuário da instância do Cloud SQL
Papel que permite acesso a uma instância do Cloud SQL.

cloudsql.instances.get
cloudsql.instances.login

Papéis personalizados

Se os papéis predefinidos não atenderem aos requisitos exclusivos de sua empresa, defina papéis personalizadas próprios e especifique as respectivas permissões. Para isso, o IAM oferece papéis personalizados.

Ao criar papéis personalizados para o Cloud SQL, se você incluir cloudsql.instances.list ou cloudsql.instances.get, certifique-se de incluir os dois. Caso contrário, o Console do Cloud não funcionará corretamente no Cloud SQL.

Permissões necessárias para tarefas comuns no Console do Cloud

Tarefa Outras permissões obrigatórias
Exibir a página de listagem de instâncias cloudsql.instances.list
resourcemanager.projects.get
Criar uma instância cloudsql.instances.create
cloudsql.instances.get
cloudsql.instances.list
resourcemanager.projects.get
Conectar-se a uma instância do Cloud Shell cloudsql.instances.get
cloudsql.instances.list
cloudsql.instances.update
resourcemanager.projects.get
Criar um usuário cloudsql.instances.get
cloudsql.instances.list
cloudsql.users.create
cloudsql.users.list
resourcemanager.projects.get
Exibir informações da instância cloudsql.instances.get
cloudsql.instances.list
cloudsql.users.list
monitoring.timeSeries.list
resourcemanager.projects.get

Permissões necessárias para comandos do gcloud sql

Comando Permissões necessárias
gcloud sql backups create cloudsql.backupRuns.create
gcloud sql backups delete cloudsql.backupRuns.delete
gcloud sql backups describe cloudsql.backupRuns.get
gcloud sql backups list cloudsql.backupRuns.list
gcloud sql backups restore cloudsql.backupRuns.get
cloudsql.instances.restoreBackup
gcloud sql connect cloudsql.instances.get
cloudsql.instances.update
gcloud sql databases create cloudsql.databases.create
gcloud sql databases delete cloudsql.databases.delete
gcloud sql databases describe cloudsql.databases.get
gcloud sql databases list cloudsql.databases.list
gcloud sql databases patch cloudsql.databases.get
cloudsql.databases.update
gcloud sql export cloudsql.instances.export
cloudsql.instances.get
gcloud sql flags list Nenhuma
gcloud sql import cloudsql.instances.import
gcloud sql instances clone cloudsql.instances.clone
gcloud sql instances create cloudsql.instances.create
gcloud sql instances delete cloudsql.instances.delete
gcloud sql instances describe cloudsql.instances.get
gcloud sql instances failover cloudsql.instances.failover
gcloud sql instances import cloudsql.instances.import
gcloud sql instances list cloudsql.instances.list
gcloud sql instances patch cloudsql.instances.get
cloudsql.instances.update
gcloud sql instances promote-replica cloudsql.instances.promoteReplica
gcloud sql instances reset-ssl-config cloudsql.instances.resetSslConfig
gcloud sql instances restart cloudsql.instances.restart
gcloud sql instances restore-backup cloudsql.backupRuns.get
cloudsql.instances.restoreBackup
gcloud sql operations describe cloudsql.instances.get
gcloud sql operations list cloudsql.instances.get
gcloud sql operations wait cloudsql.instances.get
gcloud sql ssl client-certs create cloudsql.sslCerts.create
gcloud sql ssl client-certs delete cloudsql.sslCerts.delete
gcloud sql ssl client-certs describe cloudsql.sslCerts.list
gcloud sql ssl client-certs list cloudsql.sslCerts.list
gcloud sql tiers list Nenhuma
gcloud sql users create cloudsql.users.create
gcloud sql users delete cloudsql.users.delete
gcloud sql users list cloudsql.users.list
gcloud sql users set-password cloudsql.users.update

Permissões necessárias para métodos de API

Na tabela a seguir, estão listadas as permissões que o autor da chamada precisa ter para chamar cada método na API Cloud SQL Admin ou para executar tarefas usando ferramentas do Google Cloud que utilizam a API (como o Console do Google Cloud ou a ferramenta de linha de comando gcloud).

Todas as permissões são aplicadas ao projeto. Não é possível aplicar permissões diferentes com base na instância ou em outro objeto de nível inferior.

Método Permissões necessárias
backupRuns.delete cloudsql.backupRuns.delete
backupRuns.get cloudsql.backupRuns.get
backupRuns.insert cloudsql.backupRuns.create
backupRuns.list cloudsql.backupRuns.list
databases.delete cloudsql.databases.delete
databases.get cloudsql.databases.get
databases.insert cloudsql.databases.create
databases.list cloudsql.databases.list
databases.patch cloudsql.databases.update, cloudsql.databases.get
databases.update cloudsql.databases.update
flags.list Nenhuma
instances.clone cloudsql.instances.clone
instances.delete cloudsql.instances.delete
instances.export cloudsql.instances.export
instances.failover cloudsql.instances.failover
instances.get cloudsql.instances.get
instances.import cloudsql.instances.import
instances.insert cloudsql.instances.create
instances.list cloudsql.instances.list
instances.patch cloudsql.instances.get, cloudsql.instances.update
instances.promoteReplica cloudsql.instances.promoteReplica
instances.resetSslConfig cloudsql.instances.resetSslConfig
instances.restart cloudsql.instances.restart
instances.restoreBackup cloudsql.instances.restoreBackup, cloudsql.backupRuns.get
instances.startReplica cloudsql.instances.startReplica
instances.stopReplica cloudsql.instances.stopReplica
instances.truncateLog cloudsql.instances.truncateLog
instances.update cloudsql.instances.update
operations.get cloudsql.instances.get
operations.list cloudsql.instances.get
sslCerts.delete cloudsql.sslCerts.delete
sslCerts.get cloudsql.sslCerts.get
sslCerts.insert cloudsql.sslCerts.create
sslCerts.list cloudsql.sslCerts.list
users.delete cloudsql.users.delete
users.insert cloudsql.users.create
users.list cloudsql.users.list
users.update cloudsql.users.update

Gerenciar o IAM do Cloud SQL para MySQL

É possível receber e definir políticas e papéis do IAM usando o Console do Google Cloud, os métodos do IAM da API ou o SDK do Cloud. Para mais informações, consulte Como conceder, alterar e revogar acesso.

Condições do IAM

As condições do IAM permitem definir e aplicar o controle de acesso condicional e baseado em atributos para recursos do Google Cloud, incluindo instâncias do Cloud SQL. Para mais informações sobre as Condições do IAM, consulte a página Visão geral das Condições do IAM.

No Cloud SQL, é possível aplicar o acesso condicional do IAM com base nos atributos a seguir:

  • Atributos de data/hora: usados para definir acesso temporário (expirando), programado ou de duração limitada aos recursos do Cloud SQL. Por exemplo, é possível permitir que um usuário acesse uma instância de banco de dados até uma data específica. Também é possível usar atributos de data/hora em qualquer nível da hierarquia de recursos. Para mais informações, consulte Como configurar o acesso temporário.

  • Atributos de recurso: usados para configurar o acesso condicional com base em um nome de recurso, tipo de recurso ou atributo de serviço do recurso. No Cloud SQL, é possível usar atributos de instâncias do banco de dados para configurar o acesso condicional. Para mais informações, consulte Como configurar o acesso baseado em recursos.

Os casos de uso incluem:

  • Como permitir que os usuários se conectem a instâncias específicas
  • Como permitir que os usuários excluam instâncias de desenvolvimento e teste, mas não instâncias de produção.
  • Como permitir que os usuários executem operações administrativas em determinadas datas ou em certos horários.

Permitir que os usuários se conectem a instâncias específicas

Suponha que você queira que uma conta de serviço tenha permissão para se conectar apenas a uma instância específica do Cloud SQL. É possível incluir uma condição do IAM na vinculação da política do IAM que conceda ao usuário as permissões de um papel do Cloud SQL.

Por padrão, o papel predefinido de cliente do Cloud SQL (roles/cloudsql.client), que contém a permissão cloudsql.instances.connect, autoriza o principal a se conectar a todas as instâncias do Cloud SQL em um projeto. Ao introduzir uma condição do IAM na vinculação de política, é possível conceder permissão apenas à instância nomeada.

Console

Neste exemplo, você verá como modificar a vinculação atual do IAM do projeto para atribuir a uma conta de serviço um papel de cliente do Cloud SQL para uma instância específica.

Neste exemplo, usamos as seguintes variáveis:

  • PROJECT_ID: o projeto do Google Cloud
  • INSTANCE_ID: o nome da instância à qual você quer conceder acesso.

  1. No Console do Google Cloud, abra a página IAM.

    IAM

  2. Clique em Add.
  3. Na caixa de entrada Novos principais, insira o e-mail da conta de serviço.
  4. Clique na lista suspensa Papel e selecione o papel Cliente do Cloud SQL.
  5. Clique em Adicionar condição.
  6. Digite um título e uma descrição.
  7. Selecione a guia Editor da condição.
  8. Na seção Criador de condições:
    • Em Tipo de condição - Recurso - Tipo, selecione sqladmin.googleapis.com/Instance.
    • Em Tipo de condição - Recurso - Nome, insira projects/PROJECT_ID/instances/INSTANCE_ID
    • Em Tipo de condição - Recurso - Serviço, selecione sqladmin.googleapis.com.
  9. Clique em Salvar para salvar a condição.
  10. Clique em Salvar para salvar a política.

gcloud

Neste exemplo, mostramos como modificar a vinculação atual de política do IAM para o projeto para atribuir a uma conta de serviço específica o papel de cliente do Cloud SQL, mas somente para uma instância específica.

Neste exemplo, usamos as seguintes variáveis:

  • PROJECT_ID: o projeto do Google Cloud
  • INSTANCE_ID: o nome da instância à qual você quer conceder acesso.
  • SERVICE_ACCOUNT_EMAIL: o endereço de e-mail completo da conta de serviço com o acesso que você quer modificar.

  1. Reúna as vinculações de política do IAM e envie-as para o arquivo bindings.json:
  2. gcloud projects get-iam-policy PROJECT_ID --format=json > bindings.json
    
  3. Adicione a seguinte vinculação de papel condicional ao arquivo bindings.json:
    {
      "role": "roles/cloudsql.client",
      "members": [
        "serviceAccount:SERVICE_ACCOUNT_EMAIL"
      ],
      "condition": {
        "expression": "resource.name == 'projects/PROJECT_ID/instances/INSTANCE_ID'
          && resource.type == 'sqladmin.googleapis.com/Instance'"
      }
    }
    
  4. Atualize a política do IAM com o novo arquivo bindings.json.
    gcloud projects set-iam-policy PROJECT_ID bindings.json
    

A seguir