Nesta página, descrevemos como adicionar um usuário ou conta de serviço que utilize a autenticação de banco de dados do IAM com um banco de dados e como gerenciar essas contas de usuário e serviço. Para mais informações sobre a integração do IAM, consulte Autenticação do IAM.
Antes de começar
- 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
-
Enable the Cloud Key Management Service API.
- 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.
- Lembre-se de conceder acesso do IAM aos usuários que precisam dele para cada projeto que contém bancos de dados que eles precisam acessar. Consulte Como conceder, alterar e revogar acesso a recursos.
- Verifique se você adicionou uma conta de serviço para cada serviço que requer acesso aos bancos de dados no projeto.
- Se você estiver usando a autenticação de grupo do IAM, verifique se criou o grupo do Cloud Identity que requer acesso aos bancos de dados em seu projeto.
Adicionar um usuário do IAM ou uma conta de serviço a uma instância de banco de dados
É preciso criar um novo usuário de banco de dados para cada usuário do IAM que você quer
que tenha acesso à instância do banco de dados. O nome de usuário do banco de dados precisa ser o
endereço de e-mail do usuário do IAM, por exemplo, test-user@example.com
.
@
e .
).
As contas de serviço usam o formato service-account-name@project-id.iam.gserviceaccount.com
.
Para adicionar um usuário do IAM ou uma conta de serviço, adicione um novo usuário do banco de dados e selecione IAM como método de autenticação:
Console
-
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 Add (Adicionar). Agora o usuário está na lista de usuários.
Se o papel Usuário da instância do Cloud SQL não estiver atribuído ao usuário, o ícone aparecerá à esquerda do nome do usuário.
Para conceder privilégios de login ao usuário, clique no ícone e selecione Adicionar papel do IAM. O ícone não aparecerá mais. Agora o usuário é um membro do papel.
gcloud
Criar uma conta de usuário
Use o e-mail, como test-user@example.com
, para identificar o usuário.
Substitua:
- USERNAME: o endereço de e-mail do usuário.
- INSTANCE_NAME: o nome da instância em que você quer autorizar o acesso do usuário.
gcloud sql users create USERNAME \ --instance=INSTANCE_NAME \ --type=cloud_iam_user
Crie uma conta de serviço
Substitua:
- SERVICE_ACCT: o endereço de e-mail da conta de serviço.
- INSTANCE_NAME: o nome da instância em que você quer autorizar o acesso da conta de serviço.
gcloud sql users create SERVICE_ACCT \ --instance=INSTANCE_NAME \ --type=cloud_iam_service_account
Terraform
Para adicionar contas de serviço e usuário do IAM a uma instância com a autenticação de banco de dados do IAM ativada, use um recurso do Terraform.
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.
- operation-id: o ID da operação
Método HTTP e URL:
POST https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/users
Corpo JSON da solicitação:
{ "name": "username", "type": "CLOUD_IAM_USER" }
Para enviar a solicitação, expanda uma destas opções:
Você receberá uma resposta JSON semelhante a esta:
{ "kind": "sql#operation", "targetLink": "https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id", "status": "DONE", "user": "user@example.com", "insertTime": "2020-02-07T22:44:16.656Z", "startTime": "2020-02-07T22:44:16.686Z", "endTime": "2020-02-07T22:44:20.437Z", "operationType": "CREATE_USER", "name": "operation-id", "targetId": "instance-id", "selfLink": "https://sqladmin.googleapis.com/v1/projects/project-id/operations/operation-id", "targetProject": "project-id" }
Crie uma conta de serviço
Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:
- service-acct: e-mail da sua conta de serviço
- project-id: o ID do projeto
- instance-id: o ID da instância em que você está adicionando a conta de serviço.
- operation-id: o ID da operação
Método HTTP e URL:
POST https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/users
Corpo JSON da solicitação:
{ "name": "service-acct", "type": "CLOUD_IAM_SERVICE_ACCOUNT" }
Para enviar a solicitação, expanda uma destas opções:
Você receberá uma resposta JSON semelhante a esta:
{ "kind": "sql#operation", "targetLink": "https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id", "status": "DONE", "user": "user@example.com", "insertTime": "2020-11-20T04:08:00.211Z", "startTime": "2020-11-20T04:08:00.240Z", "endTime": "2020-11-20T04:08:02.003Z", "operationType": "CREATE_USER", "name": "operation-id", "targetId": "instance-id", "selfLink": "https://sqladmin.googleapis.com/v1/projects/project-id/operations/operation-id", "targetProject": "project-id" }
REST v1beta4
Criar uma conta de usuário
Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:
- project-id: o ID do projeto
- instance-id: o ID da instância em que você está adicionando o usuário.
- username: o endereço de e-mail do usuário.
- operation-id: o ID da operação
Método HTTP e URL:
POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/users
Corpo JSON da solicitação:
{ "name": "username", "type": "CLOUD_IAM_USER" }
Para enviar a solicitação, expanda uma destas opções:
Você receberá uma resposta JSON semelhante a esta:
{ "kind": "sql#operation", "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id", "status": "DONE", "user": "user@example.com", "insertTime": "2020-02-07T22:44:16.656Z", "startTime": "2020-02-07T22:44:16.686Z", "endTime": "2020-02-07T22:44:20.437Z", "operationType": "CREATE_USER", "name": "operation-id", "targetId": "instance-id", "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/operations/operation-id", "targetProject": "project-id" }
Crie uma conta de serviço
Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:
- service-acct: e-mail da sua conta de serviço
- project-id: o ID do projeto
- instance-id: o ID da instância em que você está adicionando a conta de serviço.
- operation-id: o ID da operação
Método HTTP e URL:
POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/users
Corpo JSON da solicitação:
{ "name": "service-acct", "type": "CLOUD_IAM_SERVICE_ACCOUNT" }
Para enviar a solicitação, expanda uma destas opções:
Você receberá uma resposta JSON semelhante a esta:
{ "kind": "sql#operation", "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id", "status": "DONE", "user": "user@example.com", "insertTime": "2020-11-20T04:08:00.211Z", "startTime": "2020-11-20T04:08:00.240Z", "endTime": "2020-11-20T04:08:02.003Z", "operationType": "CREATE_USER", "name": "operation-id", "targetId": "instance-id", "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/operations/operation-id", "targetProject": "project-id" }
Adicionar um grupo ao banco de dados
Para configurar a autenticação de grupo do IAM para sua instância, faça o seguinte:
Se você ainda não tiver criado um grupo do Cloud Identity, crie um no projeto em que você gerencia suas instâncias do Cloud SQL. Para mais informações, consulte a Visão geral do Cloud Identity.
Execute o comando a seguir para adicionar o grupo à instância do Cloud SQL.
Console
Não é possível adicionar grupos a uma instância pelo console do Google Cloud durante o pré-lançamento.
gcloud
Substitua:
- GROUP_EMAIL_ADDRESS: o endereço de e-mail do grupo do Cloud Identity que você quer adicionar à instância. Por exemplo, example-group@example.com.
- INSTANCE_NAME: o nome da instância a que você quer adicionar o grupo.
Execute este comando:
gcloud sql users create GROUP_EMAIL_ADDRESS \ --instance=INSTANCE_NAME \ --type=cloud_iam_group
REST v1
Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:
- PROJECT_ID: o ID do projeto
- INSTANCE_ID: o ID da instância a que você está adicionando o grupo do Cloud Identity
- GROUP_EMAIL: o endereço de e-mail do grupo/li>
- OPERATION_ID: o ID da operação
Método HTTP e URL:
POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/users
Corpo JSON da solicitação:
{ "name": "GROUP_EMAIL", "type": "CLOUD_IAM_GROUP" }
Para enviar a solicitação, expanda uma destas opções:
Você receberá uma resposta JSON semelhante a esta:
{ "kind": "sql#operation", "targetLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID", "status": "DONE", "user": "example-group@example.com", "insertTime": "2023-12-07T22:44:16.656Z", "startTime": "2023-12-07T22:44:16.686Z", "endTime": "2023-12-07T22:44:20.437Z", "operationType": "CREATE_USER", "name": "OPERATION_ID", "targetId": "INSTANCE_ID", "selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations/OPERATION_ID", "targetProject": "PROJECT_ID" }
REST v1beta4
Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:
- PROJECT_ID: o ID do projeto
- INSTANCE_ID: o ID da instância a que você está adicionando o grupo do Cloud Identity
- GROUP_EMAIL: o endereço de e-mail do grupo do Cloud Identity
- OPERATION_ID: o ID da operação
Método HTTP e URL:
POST https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID/users
Corpo JSON da solicitação:
{ "name": "GROUP_EMAIL", "type": "CLOUD_IAM_GROUP" }
Para enviar a solicitação, expanda uma destas opções:
Você receberá uma resposta JSON semelhante a esta:
{ "kind": "sql#operation", "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID", "status": "DONE", "user": "example-group@example.com", "insertTime": "2023-12-07T22:44:16.656Z", "startTime": "2023-12-07T22:44:16.686Z", "endTime": "2023-12-07T22:44:20.437Z", "operationType": "CREATE_USER", "name": "OPERATION_ID", "targetId": "INSTANCE_ID", "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/operations/OPERATION_ID", "targetProject": "PROJECT_ID" }
Adicionar usuários ou contas de serviço de um grupo a uma instância de banco de dados
Adicionar um grupo do Cloud Identity a uma instância não adiciona automaticamente membros do grupo como usuários à instância. Quando um membro faz login na instância pela primeira vez, um usuário ou uma conta de serviço é criado nela.
Para mais informações, consulte Fazer login usando a autenticação do banco de dados do IAM.
Gerenciar usuários ou contas de serviço em um grupo em uma instância
Para controlar o acesso a uma instância, gerencie a associação do grupo do Cloud Identity. Para mais informações, consulte a Visão geral do Cloud Identity.
É possível que um usuário seja membro de vários grupos do Cloud Identity. Se um usuário pertencer a vários grupos do Cloud Identity em uma instância, ele terá todas as permissões do IAM e os privilégios de banco de dados combinados de cada um desses grupos.
As alterações na associação ao grupo, como a adição de uma conta, levam cerca de 15 minutos para serem propagadas. Isso conta além do tempo necessário para alterações do IAM.
Depois que as alterações forem propagadas, será preciso sair e entrar novamente na conta de usuário ou serviço para que as alterações entrem em vigor. No entanto, a concessão ou revogação de privilégios de banco de dados para um grupo no MySQL entra em vigor imediatamente. Por exemplo, se você revogar o acesso a uma tabela, os membros desse grupo do Cloud Identity perderão o acesso a ela instantaneamente, sem que tenham que sair e fazer um novo login.
Quando outro Cloud Identity é adicionado a uma instância, os usuários precisam sair e fazer login novamente para receber as permissões do novo grupo.
Adicionar uma vinculação de política do IAM a um usuário, conta de serviço ou grupo
Este procedimento adiciona uma vinculação à política do IAM de um projeto específico, com base em um ID de projeto e na vinculação. O comando de vinculação é composto de um membro, um papel e uma condição opcional.
O nome de usuário do banco de dados precisa ser o endereço de e-mail do usuário do IAM, por
exemplo, test-user@example.com
. Ele precisa usar aspas porque contém caracteres especiais
(@
e .
).
Console
-
No Console do Google Cloud, abra a página IAM.
- Clique em Add.
- 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 e Cliente do Cloud SQL.
- Para usuários individuais e contas de serviço, 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
Execute
gcloud projects add-iam-policy-binding
novamente com a sinalização --role=roles/cloudsql.client
Adicionar uma vinculação de política a uma conta de serviço
Substitua:
- PROJECT_ID: o ID do projeto em que você quer autorizar o acesso do usuário.
- SERVICE_ACCT: o endereço de e-mail da conta de serviço padrão.
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:SERVICE_ACCT \ --role=roles/cloudsql.instanceUser
Execute
gcloud projects add-iam-policy-binding
novamente com a sinalização --role=roles/cloudsql.client
Adicionar uma vinculação de política a um grupo do Cloud Identity
Substitua:
- PROJECT_ID: o ID do projeto que você quer autorizar o uso dos membros do grupo.
- GROUP_EMAIL_ADDRESS: o endereço de e-mail do grupo. Por exemplo,
example-group@example.com
.
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=group:GROUP_EMAIL_ADDRESS \ --role=roles/cloudsql.instanceUser
Todos os membros do grupo especificado recebem o papel de usuário da instância do Cloud SQL e podem fazer login nas instâncias desse projeto.
A autenticação de grupo do IAM está em Pré-lançamento.
Terraform
Para adicionar a vinculação de política necessária ao usuário do IAM e às contas de serviço, use um recurso do Terraform.
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:test-user@example.com" "serviceAccount:service1@sql.iam.gserviceaccount.com" "group:example-group@example.com" ] } { "role": "roles/cloudsql.client", "members": [ "user:test-user@example.com" "serviceAccount:service1@sql.iam.gserviceaccount.com" ] }
Conceder privilégios de banco de dados ao usuário do IAM
Por padrão, quando um usuário do IAM é adicionado a uma instância de banco de dados, esse novo usuário não recebe privilégios em nenhum banco de dados.Para conceder ao usuário acesso de login ou outros privilégios, use a instrução GRANT. Consulte
a página de referência GRANT para ver uma lista completa
dos privilégios que podem ser concedidos a usuários e contas de serviço. Execute GRANT na
linha de comando mysql
.
Substitua:
@
e string de domínio truncados.
Por exemplo, se o
endereço de e-mail do usuário do IAM for test-user@example.com
,
o nome de usuário será test-user
. Para uma conta de serviço, esse é
o endereço de e-mail dela sem o
domínio @project-id.iam.gserviceaccount.com
.
grant select on DATABASE_NAME.TABLE_NAME to "USERNAME";
Conceder privilégios de banco de dados a um grupo
Ao usar a autenticação de grupo do IAM, você concede privilégios de banco de dados a grupos do Cloud Identity, em vez de conceder privilégios a usuários individuais. Por padrão, quando você adiciona um grupo do Cloud Identity a uma instância do Cloud SQL, ele não tem privilégios.
Para conceder os privilégios do banco de dados aos usuários do grupo do Cloud Identity, use a instrução GRANT.
Substitua:
- GROUP_NAME: a primeira parte do endereço de e-mail do grupo do Cloud Identity. Por exemplo, ao usar o endereço de e-mail
example-group@example.com
, o nome do grupo do Cloud Identity éexample-group
. - HOSTNAME: a segunda parte do endereço de e-mail representa o nome do host do grupo do Cloud Identity. Por exemplo, ao usar o endereço de e-mail
example-group@example.com
, o nome do host éexample.com
. - DATABASE_NAME: o nome do banco de dados que hospeda a tabela.
- TABLE_NAME: o nome da tabela a que você quer conceder acesso aos membros do grupo do Cloud Identity.
Execute GRANT na
linha de comando mysql
.
grant select on DATABASE_NAME.TABLE_NAME to "GROUP_NAME"@"HOSTNAME";
Os privilégios de banco de dados concedidos ao grupo do Cloud Identity entram em vigor imediatamente.
Para mais informações sobre a concessão de privilégios, consulte a página de referência de GRANT na documentação do MySQL.
Ver grupos, usuários do IAM e contas de serviço
Para visualizar os grupos do Cloud Identity que foram adicionados à sua instância, execute o comando a seguir.
Console
Não é possível visualizar grupos em uma instância pelo console do Google Cloud durante o pré-lançamento.
gcloud
Substitua INSTANCE_NAME pelo nome da instância que tem os grupos que você quer ver.
gcloud sql users list --instance=INSTANCE_NAME
Os grupos têm o tipo de usuário CLOUD_IAM_GROUP
.
A saída também lista as contas de usuário e de serviço na instância do Cloud SQL.
- As contas de usuário que são participantes de um grupo têm o tipo
CLOUD_IAM_GROUP_USER
. - As contas de serviço que são membros de um grupo têm o tipo
CLOUD_IAM_GROUP_SERVICE_ACCOUNT
. - As contas de usuário que são contas de usuário individuais para autenticação do banco de dados do IAM têm o tipo
CLOUD_IAM_USER
. - As contas de serviço que são contas individuais de autenticação do banco de dados do IAM têm o tipo
CLOUD_IAM_SERVICE_ACCOUNT
.
Remover um usuário ou uma conta de serviço do banco de dados do IAM
Para remover um usuário ou uma conta de serviço do banco de dados, exclua a conta da instância:
Console
-
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 test-user@example.com
, para identificar o usuário.
Substitua:
- USERNAME: o endereço de e-mail omitindo o @nome do domínio.
- INSTANCE_NAME: o nome da instância da qual você quer remover o usuário.
gcloud sql users delete USERNAME \ --instance=INSTANCE_NAME
Exclua a conta de serviço
Substitua:
- SERVICE_ACCT: o endereço de e-mail da conta de serviço.
- INSTANCE_NAME: o nome da instância da qual você quer remover o usuário.
gcloud sql users delete SERVICE_ACCT \ --instance=INSTANCE_NAME
REST v1
A solicitação a seguir usa o método users.delete para excluir a conta de usuário especificada.
Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:
- PROJECT_ID: o ID do projeto
- INSTANCE_ID: o ID da instância buscada
- USERNAME: o endereço de e-mail do usuário ou da conta de serviço
Método HTTP e URL:
DELETE https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/users?host=&name=USERNAME
Para enviar a solicitação, expanda uma destas opções:
Você receberá uma resposta JSON semelhante a esta:
{ "kind": "sql#operation", "targetLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID", "status": "DONE", "user": "user@example.com", "insertTime": "2020-02-07T22:38:41.217Z", "startTime": "2020-02-07T22:38:41.217Z", "endTime": "2020-02-07T22:38:44.801Z", "operationType": "DELETE_USER", "name": "OPERATION_ID", "targetId": "INSTANCE_ID", "selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations/OPERATION_ID", "targetProject": "PROJECT_ID" }
REST v1beta4
A solicitação a seguir usa o método users.delete para excluir a conta de usuário especificada.
Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:
- PROJECT_ID: o ID do projeto
- INSTANCE_ID: o ID da instância buscada
- USERNAME: o endereço de e-mail do usuário ou da conta de serviço
Método HTTP e URL:
DELETE https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID/users?host=&name=USERNAME
Para enviar a solicitação, expanda uma destas opções:
Você receberá uma resposta JSON semelhante a esta:
{ "kind": "sql#operation", "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID", "status": "DONE", "user": "user@example.com", "insertTime": "2020-02-07T22:38:41.217Z", "startTime": "2020-02-07T22:38:41.217Z", "endTime": "2020-02-07T22:38:44.801Z", "operationType": "DELETE_USER", "name": "OPERATION_ID", "targetId": "INSTANCE_ID", "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/operations/OPERATION_ID", "targetProject": "PROJECT_ID" }
Excluir contas de serviço ou usuários de uma autenticação de grupo do IAM
Não é possível usar a gcloud CLI para excluir contas de usuário ou serviço criadas com a autenticação de grupo do IAM. O Cloud SQL cria essas contas automaticamente após o primeiro login na conta de usuário ou serviço.
A única maneira de excluir essas contas é usar o cliente MySQL com um usuário que tenha privilégios de superusuário.
Para gerar uma consulta para excluir contas de usuário ou serviço, consulte a documentação do MySQL.
Excluir um grupo de uma instância
Se você excluir um grupo do Cloud Identity de uma instância, todos os usuários e as contas de serviço que pertencem ao grupo do Cloud Identity perderão os privilégios de banco de dados concedidos a esse grupo. Os usuários e as contas de serviço pertencentes ao grupo do Cloud Identity ainda poderão fazer login até que as permissões de login do IAM sejam removidas do grupo.
Console
Não é possível adicionar grupos de uma instância pelo console do Google Cloud durante o pré-lançamento.
gcloud
Para excluir um grupo do Cloud Identity de uma instância, use o comando gcloud sql users delete
.
Substitua:
- GROUP_NAME: a primeira parte do endereço de e-mail do grupo do Cloud Identity. Por
exemplo, ao usar o endereço de e-mail
example-group@example.com
, o nome do grupo do Cloud Identity éexample-group
. - HOSTNAME: a segunda parte do endereço de e-mail representa o nome do host do grupo do Cloud Identity. Por exemplo, ao usar o endereço de e-mail
example-group@example.com
, o nome do host éexample.com
. - INSTANCE_NAME: o nome da instância do Cloud SQL com o grupo do Cloud Identity que você quer excluir.
gcloud sql users delete GROUP_NAME \ --host=HOSTNAME \ --instance=INSTANCE_NAME
Remover permissões de login do IAM de um grupo
Se você revogar o papel cloudsql.instanceUser
de um grupo do Cloud Identity, todos os membros perderão a capacidade de fazer login em qualquer instância do Cloud SQL no projeto. Os usuários ou as contas de serviço só poderão fazer login nas instâncias se forem membros de outro grupo do Cloud Identity que ainda tenha permissões para isso.
Para revogar um papel de um grupo do Cloud Identity, consulte Revogar um único papel.
Remover os usuários de um grupo
Os usuários podem ser removidos de um grupo do Cloud Identity.
Depois que a remoção for propagada pelo IAM, o usuário ainda poderá fazer login em um banco de dados se tiver as permissões do IAM apropriadas. No entanto, ao fazer login novamente, os usuários não terão mais privilégios de banco de dados pertencentes ao grupo do Cloud Identity do qual foram removidos.
Ver informações de login em registros de auditoria
É possível ativar os registros de auditoria para capturar logins do IAM no banco de dados. Quando houver problemas de login, será possível usar os registros de auditoria para diagnosticar o problema.
Depois de configurar, é possível visualizar os Registros de auditoria de acesso a dados dos logins bem-sucedidos, usando a Análise de registros.
Para a autenticação de grupo do IAM, os registros de auditoria exibem a atividade e os logins de usuários individuais e contas de serviço. A autenticação de grupo do IAM está em Pré-lançamento.Por exemplo, um registro pode ter informações semelhantes às seguintes:
{
insertId: "..."
logName: "projects/.../logs/cloudaudit.googleapis.com%2Fdata_access"
protoPayload: {
@type: "type.googleapis.com/google.cloud.audit.AuditLog"
authenticationInfo: {
principalEmail: "..."
}
authorizationInfo: [
0: {
granted: true
permission: "cloudsql.instances.login"
resource: "instances/..."
resourceAttributes: {
}
}
]
methodName: "cloudsql.instances.login"
request: {
@type: "type.googleapis.com/google.cloud.sql.authorization.v1.InstancesLoginRequest"
clientIpAddress: "..."
database: "..."
databaseSessionId: ...
instance: "projects/.../locations/us-central1/instances/..."
user: "..."
}
requestMetadata: {
callerIp: "..."
destinationAttributes: {
}
requestAttributes: {
auth: {
}
time: "..."
}
}
resourceName: "instances/..."
serviceName: "cloudsql.googleapis.com"
status: {
}
}
receiveTimestamp: "..."
resource: {
labels: {
database_id: "...:..."
project_id: "..."
region: "us-central"
}
type: "cloudsql_database"
}
severity: "INFO"
timestamp: "..."
}
Resolver problemas de falha no login
Quando uma tentativa de login falhar, o MySQL retornará uma mensagem de erro mínima por motivos de segurança. Exemplo:
$MYSQL_PWD=`gcloud-access-token mysql` --enable-cleartext-plugin --ssl-ca=server-ca.pem
--ssl-cert=client-cert.pem --ssl-key=client-key.pem --host=ip_address --user=testuser
Access denied for user 'testuser'@'...' (using password: NO)
É possível analisar os registros de erro do MySQL para ver mais detalhes sobre o erro. Para saber mais, consulte Como visualizar registros.
Por exemplo, no caso do erro anterior, a entrada de registro a seguir explica a ação necessária para resolver o problema.
F ... [152172]: [1-1] db=...,user=... FATAL: Cloud SQL IAM user authentication failed for user "..."
I ... [152172]: [2-1] db=...,user=... DETAIL: Request is missing required authentication credential. Expected OAuth 2 access token, log in cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.
Verifique a mensagem de erro que você recebeu. Se a mensagem não indicar que você
usou "autenticação de usuário do IAM do Cloud SQL" ou
"autenticação de conta de serviço do IAM do Cloud SQL", verifique se
o tipo de usuário do banco de dados usado para fazer login é CLOUD_IAM_USER
ou
CLOUD_IAM_SERVICE_ACCOUNT
.
Para um usuário do IAM, verifique se o nome de usuário do banco de dados é o
endereço de e-mail do usuário do IAM sem o @
e o domínio. Para uma
conta de serviço, verifique se é o e-mail da conta de serviço sem o
@project-id.iam.gserviceaccount.com
.
Se você usou a autenticação do banco de dados do IAM, verifique os detalhes da mensagem de erro. É possível encontrar a mensagem
de erro no registro de erros do banco de dados. Se ele indicar o token de acesso (OAuth
2.0) que você enviou como uma senha inválida, use o comando
gcloud auth application-default print-access-token
do gcloud
para encontrar detalhes do token conforme mostrado a seguir:
curl -H "Content-Type: application/x-www-form-urlencoded" \ -d "access_token=$(gcloud auth application-default print-access-token)" \ https://www.googleapis.com/oauth2/v1/tokeninfo
Verifique se o token é para a conta de serviço ou o usuário do IAM pretendido e se ele não expirou.
Se os detalhes indicarem falta de permissão, verifique se o usuário do IAM
ou a conta de serviço recebeu a permissão cloudsql.instances.login
usando
o papel predefinido Cloud SQL Instance User
ou o papel personalizado na
política do IAM do projeto da instância. Use o
Solucionador de problemas de políticas do IAM para receber mais ajuda.
Se um login falhar devido à indisponibilidade da autenticação do banco de dados do IAM, o usuário poderá fazer login usando o usuário e a senha padrão do MySQL. Esse método de login ainda fornece ao usuário acesso a todo o banco de dados. Verifique se a conexão é segura.
Resolver problemas em contas de usuário que usam a autenticação de grupo do IAM
Esta seção lista cenários de solução de problemas para a autenticação de grupo do IAM.
Falha ao adicionar um grupo a um banco de dados
Ao tentar adicionar um grupo a uma instância, talvez você receba o seguinte erro:
(gcloud.sql.users.create) HTTPError 400: Invalid request: Provided CLOUD_IAM_GROUP: EMAIL, does not exist.
Verifique se o endereço de e-mail que você forneceu é um grupo válido.
Se o grupo ainda não existe, crie um. Para mais informações sobre como criar grupos, consulte a Visão geral do Cloud Identity.
Um usuário ou uma conta de serviço do IAM não está herdando os privilégios de banco de dados concedidos ao grupo
Se um usuário ou conta de serviço do IAM não estiver herdando os privilégios corretos do banco de dados do grupo, faça o seguinte:
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.