Gerenciar usuários com a autenticação de banco de dados do IAM

Nesta página, descrevemos como adicionar um usuário ou conta de serviço que utilize a autenticação de banco de dados do IAM com um banco de dados e como gerenciar essas contas de usuário e serviço. Para mais informações sobre a integração do IAM, consulte Autenticação do IAM.

Antes de começar

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Verifique se a cobrança está ativada para o seu projeto do Google Cloud.

  4. Install the Google Cloud CLI.
  5. To initialize the gcloud CLI, run the following command:

    gcloud init
  6. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  7. Verifique se a cobrança está ativada para o seu projeto do Google Cloud.

  8. Install the Google Cloud CLI.
  9. To initialize the gcloud CLI, run the following command:

    gcloud init
  10. Enable the Cloud Key Management Service API.

    Enable the API

  11. Verifique se você tem o papel Administrador do Cloud SQL em sua conta de usuário.

    Acessar a página IAM

  12. Ative a autenticação do banco de dados do IAM na instância do Cloud SQL.
  13. Lembre-se de conceder acesso do IAM aos usuários que precisam dele para cada projeto que contém bancos de dados que eles precisam acessar. Consulte Como conceder, alterar e revogar acesso a recursos.
  14. Verifique se você adicionou uma conta de serviço para cada serviço que requer acesso aos bancos de dados no projeto.
  15. Se você estiver usando a autenticação de grupo do IAM, verifique se criou o grupo do Cloud Identity que requer acesso aos bancos de dados em seu projeto.

Adicionar um usuário do IAM ou uma conta de serviço a uma instância de banco de dados

É preciso criar um novo usuário de banco de dados para cada usuário do IAM que você quer que tenha acesso à instância do banco de dados. O nome de usuário do banco de dados precisa ser o endereço de e-mail do usuário do IAM, por exemplo, test-user@example.com.

Ao usar comandos REST, o nome de usuário precisa usar aspas, porque contém caracteres especiais (@ e .).

As contas de serviço usam o formato service-account-name@project-id.iam.gserviceaccount.com.

Para adicionar um usuário do IAM ou uma conta de serviço, adicione um novo usuário do banco de dados e selecione IAM como método de autenticação:

Console

  1. No console do Google Cloud, acesse a página Instâncias do Cloud SQL.

    Acesse Instâncias do Cloud SQL

  2. Para abrir a página Visão geral de uma instância, clique no nome da instância.
  3. Selecione Usuários no menu de navegação do SQL.
  4. Clique em Adicionar conta de usuário. A guia Adicionar uma conta de usuário à instância instance_name é aberta.
  5. Clique no botão de opção Cloud IAM.
  6. Digite o endereço de e-mail do usuário ou da conta de serviço que você quer adicionar no campo Principal.
  7. Clique em Add (Adicionar). Agora o usuário está na lista de usuários.
  8. Se o papel Usuário da instância do Cloud SQL não estiver atribuído ao usuário, o ícone triângulo aparecerá à esquerda do nome do usuário.

    Para conceder privilégios de login ao usuário, clique no ícone e selecione Adicionar papel do IAM. O ícone não aparecerá mais. Agora o usuário é um membro do papel.

gcloud

Criar uma conta de usuário

Use o e-mail, como test-user@example.com, para identificar o usuário.

Substitua:

  • USERNAME: o endereço de e-mail do usuário.
  • INSTANCE_NAME: o nome da instância em que você quer autorizar o acesso do usuário.
gcloud sql users create USERNAME \
--instance=INSTANCE_NAME \
--type=cloud_iam_user

Crie uma conta de serviço

Substitua:

  • SERVICE_ACCT: o endereço de e-mail da conta de serviço.
  • INSTANCE_NAME: o nome da instância em que você quer autorizar o acesso da conta de serviço.
gcloud sql users create SERVICE_ACCT \
--instance=INSTANCE_NAME \
--type=cloud_iam_service_account

Terraform

Para adicionar contas de serviço e usuário do IAM a uma instância com a autenticação de banco de dados do IAM ativada, use um recurso do Terraform.

resource "google_sql_database_instance" "default" {
  name             = "mysql-db-auth-instance-name-test"
  region           = "us-west4"
  database_version = "MYSQL_8_0"
  settings {
    tier = "db-f1-micro"
    database_flags {
      name  = "cloudsql_iam_authentication"
      value = "on"
    }
  }
  # set `deletion_protection` to true, will ensure that one cannot accidentally
  # delete this instance by use of Terraform whereas
  # `deletion_protection_enabled` flag protects this instance at the GCP level.
  deletion_protection = false
}

# Specify the email address of the IAM user to add to the instance
# This resource does not create a new IAM user account; this account must
# already exist

resource "google_sql_user" "iam_user" {
  name     = "test-user@example.com"
  instance = google_sql_database_instance.default.name
  type     = "CLOUD_IAM_USER"
}

# Create a new IAM service account

resource "google_service_account" "default" {
  account_id   = "cloud-sql-mysql-sa"
  display_name = "Cloud SQL for MySQL Service Account"
}

# Specify the email address of the IAM service account to add to the instance

resource "google_sql_user" "iam_service_account_user" {
  name     = google_service_account.default.email
  instance = google_sql_database_instance.default.name
  type     = "CLOUD_IAM_SERVICE_ACCOUNT"
}

Aplique as alterações

Para aplicar a configuração do Terraform em um projeto do Google Cloud, conclua as etapas nas seções a seguir.

Preparar o Cloud Shell

  1. Inicie o Cloud Shell.
  2. Defina o projeto padrão do Google Cloud em que você quer aplicar as configurações do Terraform.

    Você só precisa executar esse comando uma vez por projeto, e ele pode ser executado em qualquer diretório.

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    As variáveis de ambiente serão substituídas se você definir valores explícitos no arquivo de configuração do Terraform.

Preparar o diretório

Cada arquivo de configuração do Terraform precisa ter o próprio diretório, também chamado de módulo raiz.

  1. No Cloud Shell, crie um diretório e um novo arquivo dentro dele. O nome do arquivo precisa ter a extensão .tf, por exemplo, main.tf. Neste tutorial, o arquivo é chamado de main.tf.
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. Se você estiver seguindo um tutorial, poderá copiar o exemplo de código em cada seção ou etapa.

    Copie o exemplo de código no main.tf recém-criado.

    Se preferir, copie o código do GitHub. Isso é recomendado quando o snippet do Terraform faz parte de uma solução de ponta a ponta.

  3. Revise e modifique os parâmetros de amostra para aplicar ao seu ambiente.
  4. Salve as alterações.
  5. Inicialize o Terraform. Você só precisa fazer isso uma vez por diretório.
    terraform init

    Opcionalmente, para usar a versão mais recente do provedor do Google, inclua a opção -upgrade:

    terraform init -upgrade

Aplique as alterações

  1. Revise a configuração e verifique se os recursos que o Terraform vai criar ou atualizar correspondem às suas expectativas:
    terraform plan

    Faça as correções necessárias na configuração.

  2. Para aplicar a configuração do Terraform, execute o comando a seguir e digite yes no prompt:
    terraform apply

    Aguarde até que o Terraform exiba a mensagem "Apply complete!".

  3. Abra seu projeto do Google Cloud para ver os resultados. No console do Google Cloud, navegue até seus recursos na IU para verificar se foram criados ou atualizados pelo Terraform.

Excluir as alterações

Para excluir as mudanças, faça o seguinte:

  1. Para desativar a proteção contra exclusão, no arquivo de configuração do Terraform, defina o argumento deletion_protection como false.
    deletion_protection =  "false"
  2. Para aplicar a configuração atualizada do Terraform, execute o comando a seguir e digite yes no prompt:
    terraform apply
  1. Remova os recursos aplicados anteriormente com a configuração do Terraform executando o seguinte comando e inserindo yes no prompt:

    terraform destroy

REST v1

Criar uma conta de usuário

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • project-id: o ID do projeto
  • instance-id: o ID da instância em que você está adicionando o usuário.
  • username: o endereço de e-mail do usuário.
  • operation-id: o ID da operação

Método HTTP e URL:

POST https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/users

Corpo JSON da solicitação:

{
  "name": "username",
  "type": "CLOUD_IAM_USER"
  }

Para enviar a solicitação, expanda uma destas opções:

Você receberá uma resposta JSON semelhante a esta:

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id",
  "status": "DONE",
  "user": "user@example.com",
  "insertTime": "2020-02-07T22:44:16.656Z",
  "startTime": "2020-02-07T22:44:16.686Z",
  "endTime": "2020-02-07T22:44:20.437Z",
  "operationType": "CREATE_USER",
  "name": "operation-id",
  "targetId": "instance-id",
  "selfLink": "https://sqladmin.googleapis.com/v1/projects/project-id/operations/operation-id",
  "targetProject": "project-id"
}

Crie uma conta de serviço

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • service-acct: e-mail da sua conta de serviço
  • project-id: o ID do projeto
  • instance-id: o ID da instância em que você está adicionando a conta de serviço.
  • operation-id: o ID da operação

Método HTTP e URL:

POST https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/users

Corpo JSON da solicitação:

{
    "name": "service-acct",
    "type": "CLOUD_IAM_SERVICE_ACCOUNT"
}

Para enviar a solicitação, expanda uma destas opções:

Você receberá uma resposta JSON semelhante a esta:

{
"kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id",
  "status": "DONE",
  "user": "user@example.com",
  "insertTime": "2020-11-20T04:08:00.211Z",
  "startTime": "2020-11-20T04:08:00.240Z",
  "endTime": "2020-11-20T04:08:02.003Z",
  "operationType": "CREATE_USER",
  "name": "operation-id",
  "targetId": "instance-id",
  "selfLink": "https://sqladmin.googleapis.com/v1/projects/project-id/operations/operation-id",
  "targetProject": "project-id"
}

REST v1beta4

Criar uma conta de usuário

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • project-id: o ID do projeto
  • instance-id: o ID da instância em que você está adicionando o usuário.
  • username: o endereço de e-mail do usuário.
  • operation-id: o ID da operação

Método HTTP e URL:

POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/users

Corpo JSON da solicitação:

{
  "name": "username",
  "type": "CLOUD_IAM_USER"
  }

Para enviar a solicitação, expanda uma destas opções:

Você receberá uma resposta JSON semelhante a esta:

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id",
  "status": "DONE",
  "user": "user@example.com",
  "insertTime": "2020-02-07T22:44:16.656Z",
  "startTime": "2020-02-07T22:44:16.686Z",
  "endTime": "2020-02-07T22:44:20.437Z",
  "operationType": "CREATE_USER",
  "name": "operation-id",
  "targetId": "instance-id",
  "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/operations/operation-id",
  "targetProject": "project-id"
}

Crie uma conta de serviço

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • service-acct: e-mail da sua conta de serviço
  • project-id: o ID do projeto
  • instance-id: o ID da instância em que você está adicionando a conta de serviço.
  • operation-id: o ID da operação

Método HTTP e URL:

POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/users

Corpo JSON da solicitação:

{
    "name": "service-acct",
    "type": "CLOUD_IAM_SERVICE_ACCOUNT"
}

Para enviar a solicitação, expanda uma destas opções:

Você receberá uma resposta JSON semelhante a esta:

{
"kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id",
  "status": "DONE",
  "user": "user@example.com",
  "insertTime": "2020-11-20T04:08:00.211Z",
  "startTime": "2020-11-20T04:08:00.240Z",
  "endTime": "2020-11-20T04:08:02.003Z",
  "operationType": "CREATE_USER",
  "name": "operation-id",
  "targetId": "instance-id",
  "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/operations/operation-id",
  "targetProject": "project-id"
}

Adicionar um grupo ao banco de dados

Para configurar a autenticação de grupo do IAM para sua instância, faça o seguinte:

  1. Se você ainda não tiver criado um grupo do Cloud Identity, crie um no projeto em que você gerencia suas instâncias do Cloud SQL. Para mais informações, consulte a Visão geral do Cloud Identity.

  2. Execute o comando a seguir para adicionar o grupo à instância do Cloud SQL.

    Console

    Não é possível adicionar grupos a uma instância pelo console do Google Cloud durante o pré-lançamento.

    gcloud

    Substitua:

    • GROUP_EMAIL_ADDRESS: o endereço de e-mail do grupo do Cloud Identity que você quer adicionar à instância. Por exemplo, example-group@example.com.
    • INSTANCE_NAME: o nome da instância a que você quer adicionar o grupo.

    Execute este comando:

       gcloud sql users create GROUP_EMAIL_ADDRESS \
         --instance=INSTANCE_NAME \
         --type=cloud_iam_group
       

    REST v1

    Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

    • PROJECT_ID: o ID do projeto
    • INSTANCE_ID: o ID da instância a que você está adicionando o grupo do Cloud Identity
    • GROUP_EMAIL: o endereço de e-mail do grupo/li>
    • OPERATION_ID: o ID da operação

    Método HTTP e URL:

    POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/users

    Corpo JSON da solicitação:

    {
      "name": "GROUP_EMAIL",
      "type": "CLOUD_IAM_GROUP"
      }
    

    Para enviar a solicitação, expanda uma destas opções:

    Você receberá uma resposta JSON semelhante a esta:

    {
      "kind": "sql#operation",
      "targetLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID",
      "status": "DONE",
      "user": "example-group@example.com",
      "insertTime": "2023-12-07T22:44:16.656Z",
      "startTime": "2023-12-07T22:44:16.686Z",
      "endTime": "2023-12-07T22:44:20.437Z",
      "operationType": "CREATE_USER",
      "name": "OPERATION_ID",
      "targetId": "INSTANCE_ID",
      "selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations/OPERATION_ID",
      "targetProject": "PROJECT_ID"
    }
    

    REST v1beta4

    Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

    • PROJECT_ID: o ID do projeto
    • INSTANCE_ID: o ID da instância a que você está adicionando o grupo do Cloud Identity
    • GROUP_EMAIL: o endereço de e-mail do grupo do Cloud Identity
    • OPERATION_ID: o ID da operação

    Método HTTP e URL:

    POST https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID/users

    Corpo JSON da solicitação:

    {
      "name": "GROUP_EMAIL",
      "type": "CLOUD_IAM_GROUP"
      }
    

    Para enviar a solicitação, expanda uma destas opções:

    Você receberá uma resposta JSON semelhante a esta:

    {
      "kind": "sql#operation",
      "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID",
      "status": "DONE",
      "user": "example-group@example.com",
      "insertTime": "2023-12-07T22:44:16.656Z",
      "startTime": "2023-12-07T22:44:16.686Z",
      "endTime": "2023-12-07T22:44:20.437Z",
      "operationType": "CREATE_USER",
      "name": "OPERATION_ID",
      "targetId": "INSTANCE_ID",
      "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/operations/OPERATION_ID",
      "targetProject": "PROJECT_ID"
    }
    

Adicionar usuários ou contas de serviço de um grupo a uma instância de banco de dados

Adicionar um grupo do Cloud Identity a uma instância não adiciona automaticamente membros do grupo como usuários à instância. Quando um membro faz login na instância pela primeira vez, um usuário ou uma conta de serviço é criado nela.

Para mais informações, consulte Fazer login usando a autenticação do banco de dados do IAM.

Gerenciar usuários ou contas de serviço em um grupo em uma instância

Para controlar o acesso a uma instância, gerencie a associação do grupo do Cloud Identity. Para mais informações, consulte a Visão geral do Cloud Identity.

É possível que um usuário seja membro de vários grupos do Cloud Identity. Se um usuário pertencer a vários grupos do Cloud Identity em uma instância, ele terá todas as permissões do IAM e os privilégios de banco de dados combinados de cada um desses grupos.

As alterações na associação ao grupo, como a adição de uma conta, levam cerca de 15 minutos para serem propagadas. Isso conta além do tempo necessário para alterações do IAM.

Depois que as alterações forem propagadas, será preciso sair e entrar novamente na conta de usuário ou serviço para que as alterações entrem em vigor. No entanto, a concessão ou revogação de privilégios de banco de dados para um grupo no MySQL entra em vigor imediatamente. Por exemplo, se você revogar o acesso a uma tabela, os membros desse grupo do Cloud Identity perderão o acesso a ela instantaneamente, sem que tenham que sair e fazer um novo login.

Quando outro Cloud Identity é adicionado a uma instância, os usuários precisam sair e fazer login novamente para receber as permissões do novo grupo.

Adicionar uma vinculação de política do IAM a um usuário, conta de serviço ou grupo

Este procedimento adiciona uma vinculação à política do IAM de um projeto específico, com base em um ID de projeto e na vinculação. O comando de vinculação é composto de um membro, um papel e uma condição opcional.

O nome de usuário do banco de dados precisa ser o endereço de e-mail do usuário do IAM, por exemplo, test-user@example.com. Ele precisa usar aspas porque contém caracteres especiais (@ e .).

Console

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

    Acessar IAM

  2. Clique em Add.
  3. Em Novos membros, digite um endereço de e-mail. É possível adicionar usuários individuais, contas de serviço ou grupos como membros, mas cada projeto precisa ter pelo menos um principal como membro.
  4. Em Papel, navegue até Cloud SQL e selecione Usuário da instância do Cloud SQL e Cliente do Cloud SQL.
  5. Para usuários individuais e contas de serviço, selecione Cliente do Cloud SQL.
  6. Clique em Salvar.

gcloud

Execute gcloud projects add-iam-policy-binding com a sinalização --role=roles/cloudsql.instanceUser.

Adicionar uma vinculação de política a uma conta de usuário

Substitua:

  • PROJECT_ID: o ID do projeto em que você quer autorizar o acesso do usuário.
  • USERNAME: o endereço de e-mail do usuário.
  gcloud projects add-iam-policy-binding PROJECT_ID \
    --member=user:USERNAME \
    --role=roles/cloudsql.instanceUser
  

Execute gcloud projects add-iam-policy-binding novamente com a sinalização --role=roles/cloudsql.client.

Adicionar uma vinculação de política a uma conta de serviço

Substitua:

  • PROJECT_ID: o ID do projeto em que você quer autorizar o acesso do usuário.
  • SERVICE_ACCT: o endereço de e-mail da conta de serviço padrão.
  gcloud projects add-iam-policy-binding PROJECT_ID \
    --member=serviceAccount:SERVICE_ACCT \
    --role=roles/cloudsql.instanceUser
  

Execute gcloud projects add-iam-policy-binding novamente com a sinalização --role=roles/cloudsql.client.

Adicionar uma vinculação de política a um grupo do Cloud Identity

Substitua:

  • PROJECT_ID: o ID do projeto que você quer autorizar o uso dos membros do grupo.
  • GROUP_EMAIL_ADDRESS: o endereço de e-mail do grupo. Por exemplo, example-group@example.com.
  gcloud projects add-iam-policy-binding PROJECT_ID \
    --member=group:GROUP_EMAIL_ADDRESS \
    --role=roles/cloudsql.instanceUser
   

Todos os membros do grupo especificado recebem o papel de usuário da instância do Cloud SQL e podem fazer login nas instâncias desse projeto.

A autenticação de grupo do IAM está em Pré-lançamento.

Terraform

Para adicionar a vinculação de política necessária ao usuário do IAM e às contas de serviço, use um recurso do Terraform.

data "google_project" "project" {
}

resource "google_project_iam_binding" "cloud_sql_user" {
  project = data.google_project.project.project_id
  role    = "roles/cloudsql.instanceUser"
  members = [
    "user:test-user@example.com",
    "serviceAccount:${google_service_account.default.email}"
  ]
}

resource "google_project_iam_binding" "cloud_sql_client" {
  project = data.google_project.project.project_id
  role    = "roles/cloudsql.client"
  members = [
    "user:test-user@example.com",
    "serviceAccount:${google_service_account.default.email}"
  ]
}

Aplique as alterações

Para aplicar a configuração do Terraform em um projeto do Google Cloud, conclua as etapas nas seções a seguir.

Preparar o Cloud Shell

  1. Inicie o Cloud Shell.
  2. Defina o projeto padrão do Google Cloud em que você quer aplicar as configurações do Terraform.

    Você só precisa executar esse comando uma vez por projeto, e ele pode ser executado em qualquer diretório.

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    As variáveis de ambiente serão substituídas se você definir valores explícitos no arquivo de configuração do Terraform.

Preparar o diretório

Cada arquivo de configuração do Terraform precisa ter o próprio diretório, também chamado de módulo raiz.

  1. No Cloud Shell, crie um diretório e um novo arquivo dentro dele. O nome do arquivo precisa ter a extensão .tf, por exemplo, main.tf. Neste tutorial, o arquivo é chamado de main.tf.
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. Se você estiver seguindo um tutorial, poderá copiar o exemplo de código em cada seção ou etapa.

    Copie o exemplo de código no main.tf recém-criado.

    Se preferir, copie o código do GitHub. Isso é recomendado quando o snippet do Terraform faz parte de uma solução de ponta a ponta.

  3. Revise e modifique os parâmetros de amostra para aplicar ao seu ambiente.
  4. Salve as alterações.
  5. Inicialize o Terraform. Você só precisa fazer isso uma vez por diretório.
    terraform init

    Opcionalmente, para usar a versão mais recente do provedor do Google, inclua a opção -upgrade:

    terraform init -upgrade

Aplique as alterações

  1. Revise a configuração e verifique se os recursos que o Terraform vai criar ou atualizar correspondem às suas expectativas:
    terraform plan

    Faça as correções necessárias na configuração.

  2. Para aplicar a configuração do Terraform, execute o comando a seguir e digite yes no prompt:
    terraform apply

    Aguarde até que o Terraform exiba a mensagem "Apply complete!".

  3. Abra seu projeto do Google Cloud para ver os resultados. No console do Google Cloud, navegue até seus recursos na IU para verificar se foram criados ou atualizados pelo Terraform.

Excluir as alterações

Para excluir as mudanças, faça o seguinte:

  1. Para desativar a proteção contra exclusão, no arquivo de configuração do Terraform, defina o argumento deletion_protection como false.
    deletion_protection =  "false"
  2. Para aplicar a configuração atualizada do Terraform, execute o comando a seguir e digite yes no prompt:
    terraform apply
  1. Remova os recursos aplicados anteriormente com a configuração do Terraform executando o seguinte comando e inserindo yes no prompt:

    terraform destroy

REST

Conceda os papéis cloudsql.instanceUser e cloudsql.client aos dois tipos de conta editando a política de vinculação JSON ou YAML retornada pelo comando get-iam-policy. Essa alteração de política só entrará em vigor quando você definir a política atualizada.

    {
      "role": "roles/cloudsql.instanceUser",
      "members": [
                   "user:test-user@example.com"
                   "serviceAccount:service1@sql.iam.gserviceaccount.com"
                   "group:example-group@example.com"
      ]
    }
    {
      "role": "roles/cloudsql.client",
      "members": [
                   "user:test-user@example.com"
                   "serviceAccount:service1@sql.iam.gserviceaccount.com"
      ]
    }

Conceder privilégios de banco de dados ao usuário do IAM

Por padrão, quando um usuário do IAM é adicionado a uma instância de banco de dados, esse novo usuário não recebe privilégios em nenhum banco de dados.

Para conceder ao usuário acesso de login ou outros privilégios, use a instrução GRANT. Consulte a página de referência GRANT para ver uma lista completa dos privilégios que podem ser concedidos a usuários e contas de serviço. Execute GRANT na linha de comando mysql.

Substitua:

  • USERNAME: para uma conta de usuário, esse é o endereço de e-mail do usuário do IAM com @ e string de domínio truncados. Por exemplo, se o endereço de e-mail do usuário do IAM for test-user@example.com, o nome de usuário será test-user. Para uma conta de serviço, esse é o endereço de e-mail dela sem o domínio @project-id.iam.gserviceaccount.com.
  • DATABASE_NAME: o nome do banco de dados que hospeda a tabela.
  • TABLE_NAME: o nome da tabela a que você quer conceder acesso ao usuário.
  • grant select on DATABASE_NAME.TABLE_NAME to "USERNAME";

    Conceder privilégios de banco de dados a um grupo

    Ao usar a autenticação de grupo do IAM, você concede privilégios de banco de dados a grupos do Cloud Identity, em vez de conceder privilégios a usuários individuais. Por padrão, quando você adiciona um grupo do Cloud Identity a uma instância do Cloud SQL, ele não tem privilégios.

    Para conceder os privilégios do banco de dados aos usuários do grupo do Cloud Identity, use a instrução GRANT.

    Substitua:

    • GROUP_NAME: a primeira parte do endereço de e-mail do grupo do Cloud Identity. Por exemplo, ao usar o endereço de e-mail example-group@example.com, o nome do grupo do Cloud Identity é example-group.
    • HOSTNAME: a segunda parte do endereço de e-mail representa o nome do host do grupo do Cloud Identity. Por exemplo, ao usar o endereço de e-mail example-group@example.com, o nome do host é example.com.
    • DATABASE_NAME: o nome do banco de dados que hospeda a tabela.
    • TABLE_NAME: o nome da tabela a que você quer conceder acesso aos membros do grupo do Cloud Identity.

    Execute GRANT na linha de comando mysql.

    grant select on DATABASE_NAME.TABLE_NAME to "GROUP_NAME"@"HOSTNAME";

    Os privilégios de banco de dados concedidos ao grupo do Cloud Identity entram em vigor imediatamente.

    Para mais informações sobre a concessão de privilégios, consulte a página de referência de GRANT na documentação do MySQL.

    Ver grupos, usuários do IAM e contas de serviço

    Para visualizar os grupos do Cloud Identity que foram adicionados à sua instância, execute o comando a seguir.

    Console

    Não é possível visualizar grupos em uma instância pelo console do Google Cloud durante o pré-lançamento.

    gcloud

    Substitua INSTANCE_NAME pelo nome da instância que tem os grupos que você quer ver.

      gcloud sql users list --instance=INSTANCE_NAME
      

    Os grupos têm o tipo de usuário CLOUD_IAM_GROUP.

    A saída também lista as contas de usuário e de serviço na instância do Cloud SQL.

    • As contas de usuário que são participantes de um grupo têm o tipo CLOUD_IAM_GROUP_USER.
    • As contas de serviço que são membros de um grupo têm o tipo CLOUD_IAM_GROUP_SERVICE_ACCOUNT.
    • As contas de usuário que são contas de usuário individuais para autenticação do banco de dados do IAM têm o tipo CLOUD_IAM_USER.
    • As contas de serviço que são contas individuais de autenticação do banco de dados do IAM têm o tipo CLOUD_IAM_SERVICE_ACCOUNT.

    Remover um usuário ou uma conta de serviço do banco de dados do IAM

    Para remover um usuário ou uma conta de serviço do banco de dados, exclua a conta da instância:

    Console

    1. No console do Google Cloud, acesse a página Instâncias do Cloud SQL.

      Acesse Instâncias do Cloud SQL

    2. Para abrir a página Visão geral de uma instância, clique no nome da instância.
    3. Selecione Usuários no menu de navegação do SQL.
    4. Clique em para o usuário que você quer remover.
    5. Selecione Remover. Isso revoga o acesso apenas a esta instância.

    gcloud

    Revogar um usuário

    Use o e-mail, como test-user@example.com, para identificar o usuário.

    Substitua:

    • USERNAME: o endereço de e-mail omitindo o @nome do domínio.
    • INSTANCE_NAME: o nome da instância da qual você quer remover o usuário.
    gcloud sql users delete USERNAME \
    --instance=INSTANCE_NAME

    Exclua a conta de serviço

    Substitua:

    • SERVICE_ACCT: o endereço de e-mail da conta de serviço.
    • INSTANCE_NAME: o nome da instância da qual você quer remover o usuário.
    gcloud sql users delete SERVICE_ACCT \
    --instance=INSTANCE_NAME

    REST v1

    A solicitação a seguir usa o método users.delete para excluir a conta de usuário especificada.

    Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

    • PROJECT_ID: o ID do projeto
    • INSTANCE_ID: o ID da instância buscada
    • USERNAME: o endereço de e-mail do usuário ou da conta de serviço

    Método HTTP e URL:

    DELETE https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/users?host=&name=USERNAME

    Para enviar a solicitação, expanda uma destas opções:

    Você receberá uma resposta JSON semelhante a esta:

    {
      "kind": "sql#operation",
      "targetLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID",
      "status": "DONE",
      "user": "user@example.com",
      "insertTime": "2020-02-07T22:38:41.217Z",
      "startTime": "2020-02-07T22:38:41.217Z",
      "endTime": "2020-02-07T22:38:44.801Z",
      "operationType": "DELETE_USER",
      "name": "OPERATION_ID",
      "targetId": "INSTANCE_ID",
      "selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations/OPERATION_ID",
      "targetProject": "PROJECT_ID"
    }
    

    REST v1beta4

    A solicitação a seguir usa o método users.delete para excluir a conta de usuário especificada.

    Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

    • PROJECT_ID: o ID do projeto
    • INSTANCE_ID: o ID da instância buscada
    • USERNAME: o endereço de e-mail do usuário ou da conta de serviço

    Método HTTP e URL:

    DELETE https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID/users?host=&name=USERNAME

    Para enviar a solicitação, expanda uma destas opções:

    Você receberá uma resposta JSON semelhante a esta:

    {
      "kind": "sql#operation",
      "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID",
      "status": "DONE",
      "user": "user@example.com",
      "insertTime": "2020-02-07T22:38:41.217Z",
      "startTime": "2020-02-07T22:38:41.217Z",
      "endTime": "2020-02-07T22:38:44.801Z",
      "operationType": "DELETE_USER",
      "name": "OPERATION_ID",
      "targetId": "INSTANCE_ID",
      "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/operations/OPERATION_ID",
      "targetProject": "PROJECT_ID"
    }
    

    Excluir contas de serviço ou usuários de uma autenticação de grupo do IAM

    Não é possível usar a gcloud CLI para excluir contas de usuário ou serviço criadas com a autenticação de grupo do IAM. O Cloud SQL cria essas contas automaticamente após o primeiro login na conta de usuário ou serviço.

    A única maneira de excluir essas contas é usar o cliente MySQL com um usuário que tenha privilégios de superusuário.

    Para gerar uma consulta para excluir contas de usuário ou serviço, consulte a documentação do MySQL.

    Excluir um grupo de uma instância

    Se você excluir um grupo do Cloud Identity de uma instância, todos os usuários e as contas de serviço que pertencem ao grupo do Cloud Identity perderão os privilégios de banco de dados concedidos a esse grupo. Os usuários e as contas de serviço pertencentes ao grupo do Cloud Identity ainda poderão fazer login até que as permissões de login do IAM sejam removidas do grupo.

    Console

    Não é possível adicionar grupos de uma instância pelo console do Google Cloud durante o pré-lançamento.

    gcloud

    Para excluir um grupo do Cloud Identity de uma instância, use o comando gcloud sql users delete.

    Substitua:

    • GROUP_NAME: a primeira parte do endereço de e-mail do grupo do Cloud Identity. Por exemplo, ao usar o endereço de e-mail example-group@example.com, o nome do grupo do Cloud Identity é example-group.
    • HOSTNAME: a segunda parte do endereço de e-mail representa o nome do host do grupo do Cloud Identity. Por exemplo, ao usar o endereço de e-mail example-group@example.com, o nome do host é example.com.
    • INSTANCE_NAME: o nome da instância do Cloud SQL com o grupo do Cloud Identity que você quer excluir.
    gcloud sql users delete GROUP_NAME \
       --host=HOSTNAME \
       --instance=INSTANCE_NAME

    Remover permissões de login do IAM de um grupo

    Se você revogar o papel cloudsql.instanceUser de um grupo do Cloud Identity, todos os membros perderão a capacidade de fazer login em qualquer instância do Cloud SQL no projeto. Os usuários ou as contas de serviço só poderão fazer login nas instâncias se forem membros de outro grupo do Cloud Identity que ainda tenha permissões para isso.

    Para revogar um papel de um grupo do Cloud Identity, consulte Revogar um único papel.

    Remover os usuários de um grupo

    Os usuários podem ser removidos de um grupo do Cloud Identity.

    Depois que a remoção for propagada pelo IAM, o usuário ainda poderá fazer login em um banco de dados se tiver as permissões do IAM apropriadas. No entanto, ao fazer login novamente, os usuários não terão mais privilégios de banco de dados pertencentes ao grupo do Cloud Identity do qual foram removidos.

    Ver informações de login em registros de auditoria

    É possível ativar os registros de auditoria para capturar logins do IAM no banco de dados. Quando houver problemas de login, será possível usar os registros de auditoria para diagnosticar o problema.

    Depois de configurar, é possível visualizar os Registros de auditoria de acesso a dados dos logins bem-sucedidos, usando a Análise de registros.

    Para a autenticação de grupo do IAM, os registros de auditoria exibem a atividade e os logins de usuários individuais e contas de serviço. A autenticação de grupo do IAM está em Pré-lançamento.

    Por exemplo, um registro pode ter informações semelhantes às seguintes:

    {
     insertId: "..."
     logName: "projects/.../logs/cloudaudit.googleapis.com%2Fdata_access"
     protoPayload: {
      @type: "type.googleapis.com/google.cloud.audit.AuditLog"
      authenticationInfo: {
       principalEmail: "..."
      }
      authorizationInfo: [
       0: {
        granted: true
        permission: "cloudsql.instances.login"
        resource: "instances/..."
        resourceAttributes: {
        }
       }
      ]
      methodName: "cloudsql.instances.login"
      request: {
       @type: "type.googleapis.com/google.cloud.sql.authorization.v1.InstancesLoginRequest"
       clientIpAddress: "..."
       database: "..."
       databaseSessionId: ...
       instance: "projects/.../locations/us-central1/instances/..."
       user: "..."
      }
      requestMetadata: {
       callerIp: "..."
       destinationAttributes: {
       }
       requestAttributes: {
        auth: {
        }
        time: "..."
       }
      }
      resourceName: "instances/..."
      serviceName: "cloudsql.googleapis.com"
      status: {
      }
     }
     receiveTimestamp: "..."
     resource: {
      labels: {
       database_id: "...:..."
       project_id: "..."
       region: "us-central"
      }
      type: "cloudsql_database"
     }
     severity: "INFO"
     timestamp: "..."
    }
    

    Resolver problemas de falha no login

    Quando uma tentativa de login falhar, o MySQL retornará uma mensagem de erro mínima por motivos de segurança. Exemplo:

    $MYSQL_PWD=`gcloud-access-token mysql` --enable-cleartext-plugin --ssl-ca=server-ca.pem
    --ssl-cert=client-cert.pem --ssl-key=client-key.pem   --host=ip_address --user=testuser
    Access denied for user 'testuser'@'...' (using password: NO)
    

    É possível analisar os registros de erro do MySQL para ver mais detalhes sobre o erro. Para saber mais, consulte Como visualizar registros.

    Por exemplo, no caso do erro anterior, a entrada de registro a seguir explica a ação necessária para resolver o problema.

    F ... [152172]: [1-1] db=...,user=... FATAL:  Cloud SQL IAM user authentication failed for user "..."
    I ... [152172]: [2-1] db=...,user=... DETAIL:  Request is missing required authentication credential. Expected OAuth 2 access token, log in cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.
    

    Verifique a mensagem de erro que você recebeu. Se a mensagem não indicar que você usou "autenticação de usuário do IAM do Cloud SQL" ou "autenticação de conta de serviço do IAM do Cloud SQL", verifique se o tipo de usuário do banco de dados usado para fazer login é CLOUD_IAM_USER ou CLOUD_IAM_SERVICE_ACCOUNT. Para um usuário do IAM, verifique se o nome de usuário do banco de dados é o endereço de e-mail do usuário do IAM sem o @ e o domínio. Para uma conta de serviço, verifique se é o e-mail da conta de serviço sem o @project-id.iam.gserviceaccount.com.

    Se você usou a autenticação do banco de dados do IAM, verifique os detalhes da mensagem de erro. É possível encontrar a mensagem de erro no registro de erros do banco de dados. Se ele indicar o token de acesso (OAuth 2.0) que você enviou como uma senha inválida, use o comando gcloud auth application-default print-access-token do gcloud para encontrar detalhes do token conforme mostrado a seguir:

    curl -H "Content-Type: application/x-www-form-urlencoded" \
    -d "access_token=$(gcloud auth application-default print-access-token)" \
    https://www.googleapis.com/oauth2/v1/tokeninfo

    Verifique se o token é para a conta de serviço ou o usuário do IAM pretendido e se ele não expirou.

    Se os detalhes indicarem falta de permissão, verifique se o usuário do IAM ou a conta de serviço recebeu a permissão cloudsql.instances.login usando o papel predefinido Cloud SQL Instance User ou o papel personalizado na política do IAM do projeto da instância. Use o Solucionador de problemas de políticas do IAM para receber mais ajuda.

    Se um login falhar devido à indisponibilidade da autenticação do banco de dados do IAM, o usuário poderá fazer login usando o usuário e a senha padrão do MySQL. Esse método de login ainda fornece ao usuário acesso a todo o banco de dados. Verifique se a conexão é segura.

    Resolver problemas em contas de usuário que usam a autenticação de grupo do IAM

    Esta seção lista cenários de solução de problemas para a autenticação de grupo do IAM.

    Falha ao adicionar um grupo a um banco de dados

    Ao tentar adicionar um grupo a uma instância, talvez você receba o seguinte erro:

    (gcloud.sql.users.create) HTTPError 400: Invalid request: Provided CLOUD_IAM_GROUP: EMAIL, does not exist.
    

    Verifique se o endereço de e-mail que você forneceu é um grupo válido.

    Se o grupo ainda não existe, crie um. Para mais informações sobre como criar grupos, consulte a Visão geral do Cloud Identity.

    Um usuário ou uma conta de serviço do IAM não está herdando os privilégios de banco de dados concedidos ao grupo

    Se um usuário ou conta de serviço do IAM não estiver herdando os privilégios corretos do banco de dados do grupo, faça o seguinte:

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

      Acesse o IAM

      Verifique se a conta é membro do grupo adicionado à instância do Cloud SQL.

    2. Liste os usuários e as contas de serviço na instância.

      gcloud sql users list --instance=INSTANCE_NAME

      Na saída, verifique se a conta de usuário ou de serviço está listada como CLOUD_IAM_USER ou CLOUD_IAM_SERVICE_ACCOUNT.

    3. Se o usuário ou a conta de serviço estiver listado como CLOUD_IAM_USER ou CLOUD_IAM_SERVICE_ACCOUNT, remova a conta da instância. A conta que você está removendo é uma conta individual do IAM que não herda privilégios do banco de dados de grupo.

    4. Faça login novamente na instância com o usuário ou a conta de serviço.

      Fazer login novamente na instância recria a conta com o tipo correto de CLOUD_IAM_GROUP_USER ou CLOUD_IAM_GROUP_SERVICE_ACCOUNT.

    A seguir