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

Esta página descreve como adicionar e gerenciar usuários, contas de serviço e grupos em uma instância do Cloud SQL que usa a autenticação de banco de dados do IAM.

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. Make sure that billing is enabled for your Google Cloud project.

  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. Make sure that billing is enabled for your Google Cloud project.

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

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

    Acessar a página IAM

  11. Ative a autenticação do banco de dados do IAM na instância do Cloud SQL.
  12. Atribuir o IAM cloudsql.instanceUser necessário para principais do IAM, como usuários do IAM, contas de serviço ou grupos para fazer login na instância do Cloud SQL.
  13. Se você estiver usando uma conta de serviço, verifique se adicionou uma conta de serviço para cada serviço que exige acesso aos bancos de dados no projeto.
  14. Para mais informações sobre como criar contas de serviço, consulte Crie contas de serviço.

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, example-user@example.com. Ele precisa ser todo em letras minúsculas e 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 Adicionar.
  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.
  5. Opcional: se você quiser se conectar usando o proxy do Cloud SQL Auth ou os conectores de linguagem do Cloud SQL, 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
  

Se você quiser se conectar usando o proxy do Cloud SQL Auth ou os conectores de linguagem do Cloud SQL, e 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
  

Se você quiser se conectar usando o proxy do Cloud SQL Auth ou os conectores de linguagem do Cloud SQL, e 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.

Se você quiser se conectar usando o proxy do Cloud SQL Auth ou os conectores de linguagem do Cloud SQL, e execute gcloud projects add-iam-policy-binding novamente com a sinalização --role=roles/cloudsql.client.

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

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 = [
    "group:example-group@example.com"
  ]
}

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:example-user@example.com"
                   "serviceAccount:service1@sql.iam.gserviceaccount.com"
                   "group:example-group@example.com"
      ]
    }
    {
      "role": "roles/cloudsql.client",
      "members": [
                   "user:example-user@example.com"
                   "serviceAccount:service1@sql.iam.gserviceaccount.com"
      ]
    }

Adicionar um usuário individual do IAM ou uma conta de serviço a uma instância do Cloud SQL

É necessário criar uma nova conta de usuário para cada usuário do IAM ou conta de serviço que você está adicionando à instância do Cloud SQL para acessar bancos de dados. Para adicionar um grupo do IAM, não é necessário criar uma conta de usuário para cada membro do grupo.

O nome de usuário do banco de dados precisa ser o endereço de e-mail do usuário do IAM e estar todo em letras minúsculas. Por exemplo, example-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 individual ou uma conta de serviço do IAM, adicione uma nova conta de usuário e selecione IAM como o 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 Adicionar. A conta de usuário ou de serviço agora está na lista de contas de usuário.
  8. Se o usuário não tiver o papel do IAM cloudsql.instanceUser atribuído após a criação da conta, um ícone triângulo vai aparecer ao lado do nome de usuário.

    Para conceder permissões de login ao usuário, clique no ícone e selecione Adicionar papel do IAM. Se o ícone não aparecer mais, a conta de usuário recebe o papel do IAM que dá à conta a permissão de login.

gcloud

Criar uma conta de usuário

Use o e-mail, como example-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

Criar 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             = "postgres-db-auth-instance-name-test"
  region           = "us-west4"
  database_version = "POSTGRES_14"
  settings {
    tier = "db-custom-2-7680"
    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"
}

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

# Create a new IAM service account

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

resource "google_sql_user" "iam_service_account_user" {
  # Note: for PostgreSQL only, Google Cloud requires that you omit the
  # ".gserviceaccount.com" suffix
  # from the service account email due to length limits on database usernames.
  name     = trimsuffix(google_service_account.default.email, ".gserviceaccount.com")
  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

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: o e-mail da 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.

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

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: o e-mail da 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.

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 do IAM a uma instância do Cloud SQL

Para usar a autenticação de grupo do IAM e adicionar um grupo do IAM a uma instância do Cloud SQL, use um dos procedimentos desta seção. Depois de adicionar o grupo do IAM, não é preciso adicionar os membros individuais do grupo à instância. Para mais informações, consulte Adicionar membros de um grupo a uma instância do Cloud SQL automaticamente.

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. Adicione o endereço de e-mail do grupo que você quer adicionar no campo Principal.
  7. Clique em Adicionar. Agora o grupo está na lista de usuários.
  8. Se o grupo não tiver o papel cloudsql.instanceUser do IAM atribuído após a criação da conta de usuário, um ícone triângulo vai aparecer ao lado do grupo.

    Para conceder permissões de login aos membros do grupo, clique no ícone e selecione Adicionar papel do IAM. Se o ícone não aparecer mais, todos os membros do grupo receberão a função que concede a permissão de login.

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

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             = "postgres-iam-group-auth-instance-name"
  region           = "us-west4"
  database_version = "POSTGRES_16"
  settings {
    tier = "db-custom-2-7680"
    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 Cloud Identity group to add to the instance
# This resource does not create a Cloud Identity group; the group must
# already exist

resource "google_sql_user" "iam_group" {
  name     = "example-group@example.com"
  instance = google_sql_database_instance.default.name
  type     = "CLOUD_IAM_GROUP"
}

data "google_project" "project" {
}

resource "google_project_iam_binding" "cloud_sql_user" {
  project = data.google_project.project.project_id
  role    = "roles/cloudsql.instanceUser"
  members = [
    "group:example-group@example.com"
  ]
}

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

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

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

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 membros de um grupo a uma instância do Cloud SQL automaticamente

Quando você adiciona um grupo do IAM a uma instância do Cloud SQL, todos os membros (usuários e contas de serviço) desse grupo herdam as permissões do IAM para autenticação na instância. Não é necessário adicionar o membro do grupo individualmente à instância do Cloud SQL. Depois que um membro do grupo faz login e autentica a instância principal pela primeira vez, o Cloud SQL cria uma conta de usuário ou de serviço do grupo para esse membro. É possível conferir o participante listado na instância após o primeiro login.

Após o failover, desde que a instância de failover tenha os grupos apropriados, os usuários do grupo do IAM poderão continuar fazendo login e sendo criados.

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

Migrar usuários do IAM para usar a autenticação de grupo do IAM

Os usuários do IAM do tipo CLOUD_IAM_USER ou CLOUD_IAM_SERVICE_ACCOUNT não usam a autenticação de grupo do IAM.

É possível migrar esses usuários para usar a autenticação de grupo do IAM.

  1. Adicione esses usuários a um grupo.

  2. Adicione o grupo à sua instância.

  3. Atribua ao grupo permissões suficientes do IAM para permitir que os membros do grupo se conectem às suas instâncias. Essas mudanças podem levar tempo para serem propagadas. Para mais informações sobre os tempos de propagação, consulte Propagação de mudança de acesso.

  4. Atribua privilégios de banco de dados aos usuários do IAM que você está migrando para o grupo.

  5. Depois que as mudanças de participação no grupo e as permissões do IAM forem aplicadas, exclua o usuário do IAM da sua instância. Na próxima vez que o usuário do IAM fizer login, ele será recriado como um usuário de grupo do IAM que pode usar a autenticação de grupo do IAM.

Gerenciar membros de grupos em uma instância do Cloud SQL

Quando você adiciona um grupo do IAM a uma instância do Cloud SQL, os membros (contas de usuário ou serviço) desse grupo herdam as informações para autenticar a instância. É possível controlar o acesso a uma instância para gerenciar o grupo no Cloud Identity. Por exemplo, se você quiser dar a um novo usuário acesso a uma instância, adicione o usuário como um membro do grupo no Cloud Identity. Não é necessário remover ou adicionar membros do grupo separadamente no nível da instância do Cloud SQL, porque as mudanças na associação ao grupo são propagadas para a instância do Cloud SQL automaticamente. Alterações aos membros do grupo, como a adição ou remoção, levam cerca de 15 minutos para propagação. Isso é somado ao tempo necessário para alterações do IAM.

A concessão ou revogação de privilégios de banco de dados para um grupo do IAM no PostgreSQL entra em vigor imediatamente. Por exemplo, se você revogar o acesso a uma tabela, os membros desse grupo do IAM perdem o acesso à tabela instantaneamente.

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

Quando você adiciona um novo membro (usuário ou conta de serviço) ao grupo do IAM no Cloud Identity e ele faz login na instância pela primeira vez, ele herda os privilégios do banco de dados concedidos ao grupo automaticamente.

Conceder privilégios de banco de dados a um usuário individual do IAM ou a uma conta de serviço

Por padrão, quando um usuário ou serviço individual do IAM é adicionado a uma instância do Cloud SQL, essa nova conta não recebe privilégios em nenhum banco de dados. Eles só podem executar consultas em qualquer objeto de banco de dados cujo acesso tenha sido concedido a PUBLIC.

Se forem necessários acesso adicional, mais privilégios poderão ser concedidos usando 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.

Substitua:

  • USERNAME: o endereço de e-mail do usuário. É preciso usar aspas ao redor do e-mail porque ele contém caracteres especiais (@ e .).
  • TABLE_NAME: o nome da tabela a que você quer conceder acesso ao usuário.
grant select on TABLE_NAME to "USERNAME";

Conceder privilégios de banco de dados a um grupo do IAM

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

Para conceder privilégios do banco de dados ao grupo do IAM, use a instrução GRANT. Após fazer login na instância do Cloud SQL pela primeira vez, cada membro do grupo (incluindo usuários e contas de serviço) herdam os privilégios de banco de dados concedidos ao grupo automaticamente.

Substitua:

  • GROUP_NAME: o endereço de e-mail do grupo do Cloud Identity, incluindo o @ e o nome de domínio. Por exemplo, se o endereço de e-mail do grupo do IAM for example-group@example.com, o nome do grupo será example-group@example.com. É preciso usar aspas ao redor do nome do grupo porque a string contém caracteres especiais (@ e .).
  • TABLE_NAME: o nome da tabela a que você quer conceder acesso ao usuário.

Execute GRANT na linha de comando psql.

grant select on TABLE_NAME to "GROUP_NAME";

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

Os privilégios de banco de dados que você concede ao grupo do IAM entram em vigor imediatamente.

Conferir usuários do IAM, contas de serviço e grupos adicionados a uma instância do Cloud SQL

Para conferir os usuários, as contas de serviço e os grupos do IAM que foram adicionados à sua instância do Cloud SQL, execute os comandos a seguir.

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. A página mostra uma lista de usuários do IAM, contas de serviço e grupos do Cloud Identity que foram adicionados à sua instância.
  4. Opcional: para ver uma lista de usuários do IAM ou contas de serviço que já fizeram login na instância, clique em Membros do grupo IAM autenticados.

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.

REST v1

A solicitação a seguir usa o método users.list para listar os usuários que têm contas na instância do Cloud SQL.

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

Método HTTP e URL:

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

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

Você receberá uma resposta JSON semelhante a esta:


{
  "kind": "sql#usersList",
  "items": [
    {
     "kind": "sql#user",
     "etag": "--redacted--",
     "name": "example-service-acct@PROJECT_ID.iam",
     "host": "",
     "instance": "INSTANCE_ID",
     "project": "PROJECT_ID",
     "type": "CLOUD_IAM_SERVICE_ACCOUNT"
    },
    {
      "kind": "sql#user",
      "etag": "--redacted--",
      "name": "another-example-service-acct@PROJECT_ID.iam",
      "host": "",
      "instance": "INSTANCE_ID",
      "project": "PROJECT_ID",
      "type": "CLOUD_IAM_GROUP_SERVICE_ACCOUNT"
     },
    {
      "kind": "sql#user",
      "etag": "--redacted--",
      "name": "postgres",
      "host": "",
      "instance": "INSTANCE_ID",
      "project": "PROJECT_ID",
    },
    {
      "kind": "sql#user",
      "etag": "--redacted--",
      "name": "example-user@example.com",
      "host": "",
      "instance": "INSTANCE_ID",
      "project": "PROJECT_ID",
      "type": "CLOUD_IAM_USER"
    },
    {
      "kind": "sql#user",
      "etag": "--redacted--",
      "name": "another-example-user@example.com",
      "host": "",
      "instance": "INSTANCE_ID",
      "project": "PROJECT_ID",
      "type": "CLOUD_IAM_GROUP_USER"
    },
    {
      "kind": "sql#user",
      "etag": "--redacted--",
      "name": "example-group@example.com",
      "host": "",
      "instance": "INSTANCE_ID",
      "project": "PROJECT_ID",
      "type": "CLOUD_IAM_GROUP"
    }
  ]
}

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.

REST v1beta4

A solicitação a seguir usa o método users.list para listar os usuários que têm contas na instância do Cloud SQL.

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

Método HTTP e URL:

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

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

Você receberá uma resposta JSON semelhante a esta:

{
  "kind": "sql#usersList",
  "items": [
    {
      "kind": "sql#user",
      "etag": "--redacted--",
      "name": "sqlserver",
      "host": "",
      "instance": "instance-id",
      "project": "project-id",
      "sqlserverUserDetails": {
        "serverRoles": [
          "CustomerDbRootRole"
        ]
      }
    },
    {
      "kind": "sql#user",
      "etag": "--redacted--",
      "name": "user-id-1",
      "host": "",
      "instance": "instance-id",
      "project": "project-id",
      "sqlserverUserDetails": {
        "serverRoles": [
          "CustomerDbRootRole"
        ]
      }
    },
    {
      "kind": "sql#user",
      "etag": "--redacted--",
      "name": "user-id-2",
      "host": "",
      "instance": "instance-id",
      "project": "project-id",
      "sqlserverUserDetails": {
        "serverRoles": [
          "CustomerDbRootRole"
        ]
      }
    },
    {
      ...
    },
    {
      ...
    }
  ]
}

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 individual do IAM ou uma conta de serviço de uma instância do Cloud SQL

Para remover um usuário individual ou uma conta de serviço que não seja membro de um grupo da instância do Cloud SQL, exclua essa conta usando o seguinte comando:

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 example-user@example.com, para identificar o usuário.

Substitua:

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

Excluir a conta de serviço individual

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"
}

Remover membros do grupo do IAM de uma instância do Cloud SQL

Há duas maneiras de remover membros do grupo do IAM de uma Instância do Cloud SQL:

  • Remoção automática
  • Remoção manual

Remoção automática

Para remover um membro do grupo do IAM, remova a assinatura dos grupos do IAM aplicáveis no Cloud Identity. Depois que os usuários do grupo do IAM perderem a associação a todos os grupos aplicáveis no Cloud Identity, o Cloud SQL vai remover esses usuários do grupo da instância automaticamente. A única exceção a essa remoção são os usuários do grupo que são proprietários de objetos de banco de dados. Esses usuários do grupo precisam ser removidos manualmente.

Alterações aos membros do grupo, como a adição ou remoção, levam cerca de 15 minutos para propagação. Isso conta além do tempo necessário para alterações do IAM.

Remoção manual

Nos casos em que não é possível remover um usuário do grupo do IAM automaticamente, é possível removê-los manualmente. Não é possível remover manualmente um usuário de grupo do IAM de uma instância do Cloud SQL usando a gcloud CLI, o console do Google Cloud, o Terraform ou a API Cloud SQL Admin. Em vez disso, os usuários do banco de dados com privilégios de superusuário podem excluir manualmente os usuários do grupo IAM da instância do Cloud SQL usando uma instrução DROP USER de um cliente PostgreSQL.

Depois de remover manualmente um usuário do grupo do IAM da instância do Cloud SQL, remova-o também do grupo do IAM no Cloud Identity para evitar novos logins na instância do Cloud SQL.

Excluir um grupo do IAM de uma instância do Cloud SQL

Você pode excluir os grupos IAM adicionados da instância do Cloud SQL. Após excluir um grupo do IAM da instância, todos os usuários e contas de serviço que pertencem ao grupo do IAM perdem todos os privilégios de banco de dados concedidos ao grupo do IAM. Além disso, as seguintes condições se aplicam:

  • Os usuários e contas de serviço que pertencem ao grupo IAM ainda podem efetuar login até que a permissão do IAM cloudsql.instances.login seja removida do grupo.
  • Se a exclusão de um grupo fizer com que as contas de usuário ou serviço do grupo do IAM não pertençam a nenhum outro grupo na instância, o Cloud SQL removerá as contas de usuário ou serviço do grupo do IAM da instância.
  • No entanto, se um usuário do grupo do IAM for proprietário de um objeto de banco de dados na instância, será necessário atribuir novamente a propriedade do objeto antes de excluir o usuário manualmente.

Se você excluir todos os grupos do IAM de uma instância do Cloud SQL, todos os usuários e contas de serviço do grupo do IAM vão perder todos os privilégios de banco de dados. Além disso, as seguintes condições se aplicam:

  • Todos os usuários do grupo do IAM e as contas de serviço não conseguem fazer login na instância.
  • O Cloud SQL também remove todos os usuários do grupo do IAM e as contas de serviço da instância automaticamente.
  • No entanto, se um usuário do grupo do IAM for proprietário de um objeto de banco de dados na instância, será necessário atribuir novamente a propriedade do objeto antes de excluir o usuário manualmente.

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 grupo que você quiser remover.
  5. Selecione Remover. Isso revoga o acesso apenas a esta instância.

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.
  • 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 \
   --instance=INSTANCE_NAME

Remover permissões de login do IAM de um grupo do IAM

Se você revogar o papel cloudsql.instanceUser de um grupo do IAM, 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 IAM que ainda tenha permissões para isso.

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

Remover usuários de um grupo do IAM

É possível adicionar membros do grupo do IAM, como usuários ou contas de serviço, removidos do grupo do IAM no Cloud Identity.

Após a remoção ser propagada pelo IAM, o usuário não poderá mais efetuar login no banco de dados, a menos que tenha recebido permissões de login de outro grupo ou tenha privilégios de login concedidos diretamente. Além disso, os usuários removidos de um grupo perdem os privilégios de banco de dados do grupo.

Se um usuário do grupo do IAM não pertencer a nenhum grupo na instância, o Cloud SQL removerá automaticamente o usuário da instância. No entanto, se o Cloud SQL detectar que um usuário do grupo do IAM é proprietário de um objeto na instância, ele não será removido. Um administrador precisa reatribuir a propriedade do objeto e remover o usuário manualmente.

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.

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 PostgreSQL retornará uma mensagem de erro mínima por motivos de segurança. Por exemplo:

PGPASSWORD=not-a-password psql --host=... --username=... --dbname=...
psql: error: could not connect to server: FATAL:  Cloud SQL IAM user authentication failed for user "..."
FATAL:  pg_hba.conf rejects connection for host "...", user "...", database "...", SSL off

É possível analisar os registros de erro do PostgreSQL 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. Use o Console do Google Cloud ou o comando gcloud sql users list para verificar isso. Para um usuário do IAM, verifique se o nome de usuário do banco de dados é o e-mail do usuário do IAM.

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 PostgreSQL. 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 Criar e gerenciar grupos do Google no console do Google Cloud.

Se você receber o seguinte erro:

(gcloud.sql.users.create) HTTPError 400: Invalid request: IAM Group Authentication is disabled.

Antes de usar a autenticação de grupo do IAM, sua instância do Cloud SQL precisa da seguinte atualização de manutenção:

R20240514.00_04 ou posterior

É possível aplicar a atualização de manutenção à instância usando a manutenção de autoatendimento. Para mais informações, consulte Manutenção de autoatendimento.

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 do IAM

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