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
- 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
- Verifique se você tem o papel Administrador do Cloud SQL em sua conta de usuário.
- Ative a autenticação do banco de dados do IAM na instância do Cloud SQL.
- 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. - Se você está adicionando um usuário ou uma conta de serviço individual à instância do Cloud SQL, atribua o papel do IAM individualmente a cada usuário e conta de serviço.
- Se você estiver adicionando um grupo, precisará atribuir o papel do IAM a ele, já que os membros do grupo herdam automaticamente as permissões associadas ao papel. Para mais informações sobre como criar grupos no Cloud Identity, consulte Criar e gerenciar Grupos do Google no console do Google Cloud.
- É possível conceder o papel em um projeto que contém instâncias do Cloud SQL usando a página IAM do console do Google Cloud, a gcloud CLI, o Terraform ou a API Cloud SQL Admin. Para mais informações, consulte Adicionar uma vinculação de política do IAM a um usuário, uma conta de serviço ou um grupo.
- 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.
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
-
No Console do Google Cloud, abra a página IAM.
- Clique em Adicionar.
- 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.
- Em Papel, navegue até Cloud SQL e selecione Usuário da instância do Cloud SQL.
- 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.
- 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.
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
- Inicie o Cloud Shell.
-
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.
-
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 demain.tf
.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
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.
- Revise e modifique os parâmetros de amostra para aplicar ao seu ambiente.
- Salve as alterações.
-
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
-
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.
-
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!".
- 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:
- Para desativar a proteção contra exclusão, no arquivo de configuração do Terraform, defina o argumento
deletion_protection
comofalse
.deletion_protection = "false"
- Para aplicar a configuração atualizada do Terraform, execute o comando a seguir e digite
yes
no prompt:terraform apply
-
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.
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
- Inicie o Cloud Shell.
-
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.
-
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 demain.tf
.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
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.
- Revise e modifique os parâmetros de amostra para aplicar ao seu ambiente.
- Salve as alterações.
-
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
-
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.
-
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!".
- 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:
- Para desativar a proteção contra exclusão, no arquivo de configuração do Terraform, defina o argumento
deletion_protection
comofalse
.deletion_protection = "false"
- Para aplicar a configuração atualizada do Terraform, execute o comando a seguir e digite
yes
no prompt:terraform apply
-
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
-
No console do Google Cloud, acesse a página Instâncias do Cloud SQL.
- Para abrir a página Visão geral de uma instância, clique no nome da instância.
- Selecione Usuários no menu de navegação do SQL.
- Clique em Adicionar conta de usuário. A guia Adicionar uma conta de usuário à instância instance_name é aberta.
- Clique no botão de opção Cloud IAM.
- Digite o endereço de e-mail do usuário ou da conta de serviço que você quer adicionar no campo Principal.
- Clique em Adicionar. A conta de usuário ou de serviço agora está na lista de contas de usuário.
Se o usuário não tiver o papel do IAM
cloudsql.instanceUser
atribuído após a criação da conta, um ícone 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.
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
- Inicie o Cloud Shell.
-
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.
-
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 demain.tf
.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
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.
- Revise e modifique os parâmetros de amostra para aplicar ao seu ambiente.
- Salve as alterações.
-
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
-
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.
-
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!".
- 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:
- Para desativar a proteção contra exclusão, no arquivo de configuração do Terraform, defina o argumento
deletion_protection
comofalse
.deletion_protection = "false"
- Para aplicar a configuração atualizada do Terraform, execute o comando a seguir e digite
yes
no prompt:terraform apply
-
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
-
No console do Google Cloud, acesse a página Instâncias do Cloud SQL.
- Para abrir a página Visão geral de uma instância, clique no nome da instância.
- Selecione Usuários no menu de navegação do SQL.
- Clique em Adicionar conta de usuário. A guia Adicionar uma conta de usuário à instância instance_name é aberta.
- Clique no botão de opção Cloud IAM.
- Adicione o endereço de e-mail do grupo que você quer adicionar no campo Principal.
- Clique em Adicionar. Agora o grupo está na lista de usuários.
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 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.
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
- Inicie o Cloud Shell.
-
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.
-
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 demain.tf
.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
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.
- Revise e modifique os parâmetros de amostra para aplicar ao seu ambiente.
- Salve as alterações.
-
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
-
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.
-
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!".
- 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:
- Para desativar a proteção contra exclusão, no arquivo de configuração do Terraform, defina o argumento
deletion_protection
comofalse
.deletion_protection = "false"
- Para aplicar a configuração atualizada do Terraform, execute o comando a seguir e digite
yes
no prompt:terraform apply
-
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 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.
Para mais informações sobre login, consulte Fazer login usando a autenticação do banco de dados 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 forexample-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
-
No console do Google Cloud, acesse a página Instâncias do Cloud SQL.
- Para abrir a página Visão geral de uma instância, clique no nome da instância.
- 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.
- 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
-
No console do Google Cloud, acesse a página Instâncias do Cloud SQL.
- Para abrir a página Visão geral de uma instância, clique no nome da instância.
- Selecione Usuários no menu de navegação do SQL.
- Clique em para o usuário que você quer remover.
- 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
-
No console do Google Cloud, acesse a página Instâncias do Cloud SQL.
- Para abrir a página Visão geral de uma instância, clique no nome da instância.
- Selecione Usuários no menu de navegação do SQL.
- Clique em para o grupo que você quiser remover.
- 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:
No console do Google Cloud, abra a página IAM.
Verifique se a conta é membro do grupo adicionado à instância do Cloud SQL.
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
ouCLOUD_IAM_SERVICE_ACCOUNT
.Se o usuário ou a conta de serviço estiver listado como
CLOUD_IAM_USER
ouCLOUD_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.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
ouCLOUD_IAM_GROUP_SERVICE_ACCOUNT
.
A seguir
- Saiba mais sobre a autenticação do banco de dados do IAM.
- Veja como fazer login em um banco de dados do Cloud SQL.
- Saiba como configurar instâncias para autenticação do banco de dados do IAM.