Nesta página, descrevemos como configurar e usar a federação de identidade de colaboradores (também conhecida como autenticação do IAM de terceiros) com o Cloud SQL. Com a federação de identidade de colaboradores, é possível usar seu provedor de identidade (IdP) atual, como o Microsoft Active Directory ou o Okta, para acessar instâncias do Cloud SQL sem precisar de uma Google conta.
Os principais benefícios de usar a federação de identidade de colaboradores incluem:
- Redução da sobrecarga: não é necessário verificar domínios nem sincronizar identidades com o Cloud Identity.
- Segurança aprimorada: gerenciamento centralizado do acesso ao banco de dados pelo IdP empresarial atual.
- Facilidade de escalonamento: adequado para grandes organizações com necessidades complexas de gerenciamento de identidades.
Para uma descrição detalhada da federação de identidade de colaboradores, consulte a visão geral da federação de identidade de colaboradores.
Como funciona
Com a Federação de Identidade de Colaboradores, os usuários podem se autenticar no Google Cloud usando uma identidade externa. No Cloud SQL, isso significa que os principais de um pool de força de trabalho podem se conectar a instâncias do Cloud SQL para MySQL.
O Cloud SQL é compatível com a federação de identidade de colaboradores pelo tipo de usuário
CLOUD_IAM_WORKFORCE_IDENTITY. Para conceder acesso, o Cloud SQL
valida suas credenciais da força de trabalho e a permissão
do IAM no nível do projeto durante o login.
Antes de começar
Antes de configurar a autenticação de banco de dados da federação de identidade da força de trabalho, verifique se você atende aos seguintes pré-requisitos:
- Instale a versão mais recente da CLI gcloud.
- Configure um pool e um provedor da federação de identidade de colaboradores na sua organização Google Cloud .
- Configure a identidade temporária de conta de serviço para sua carga de trabalho.
- Verifique se a instância do Cloud SQL está executando o MySQL versão 8.0 ou mais recente.
Papéis e permissões
Para receber as permissões necessárias para configurar e usar a autenticação da federação de identidade de colaboradores, peça ao administrador para conceder a você os seguintes papéis do IAM na organização:
-
Gerenciar uma instância:
Administrador do Cloud SQL (
roles/cloudsql.admin) -
Conectar-se à instância:
Usuário da instância do Cloud SQL (
roles/cloudsql.instanceUser) -
Conecte-se a uma instância usando o proxy de autenticação do Cloud SQL:
Cliente do Cloud SQL (
roles/cloudsql.client) -
Gerenciar a política do IAM:
Administrador do IAM do projeto (
roles/resourcemanager.projectIamAdmin)
Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.
Também é possível conseguir as permissões necessárias usando papéis personalizados ou outros papéis predefinidos.
Configurar a autenticação da federação de identidade de colaboradores
As seções a seguir mostram como configurar sua instância para usar a autenticação da federação de identidade de colaboradores.
Ativar a autenticação do IAM na instância
Para ativar a autenticação do IAM, defina a flag
cloudsql_iam_authentication como on.
Console
-
No console 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 dela.
- Clique em Editar.
- Abra a seção Personalizar sua instância.
- Expanda a seção Conexões.
- Em Segurança, marque a caixa de seleção Ativar autenticação do IAM do Cloud SQL.
- Clique em Salvar.
gcloud
Use o comando a seguir para ativar a autenticação do IAM:
gcloud sql instances patch INSTANCE_NAME \ --database-flags=cloudsql_iam_authentication=on
Substitua INSTANCE_NAME pelo nome da instância.
Terraform
Adicione o bloco database_flags ao recurso
google_sql_database_instance:
resource "google_sql_database_instance" "instance" { name = "INSTANCE_NAME" database_version = "MYSQL_8_0" region = "REGION" settings { tier = "db-f1-micro" database_flags { name = "cloudsql_iam_authentication" value = "on" } } }
Substitua:
INSTANCE_NAME: o nome da instância.REGION: a região em que a instância reside.
REST v1
Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:
- PROJECT_ID: o ID do projeto;
- LOCATION_ID: o ID do local
- INSTANCE_ID: o ID da instância buscada
- REGION: a região desejada
- DATABASE_VERSION: string de tipo enumerado da versão do banco de dados.
Por exemplo:
MYSQL_8_0 - PASSWORD: a senha do usuário raiz
- MACHINE_TYPE: string de tipo enumerado do tipo de máquina (camada), como:
db-custom-[CPUS]-[MEMORY_MBS]
Método HTTP e URL:
POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/instances
Corpo JSON da solicitação:
{
"name": "INSTANCE_ID",
"region": "REGION",
"databaseVersion": "DATABASE_VERSION",
"rootPassword": "PASSWORD",
"settings": {
"tier": "MACHINE_TYPE",
"backupConfiguration": {
"enabled": true
}
"databaseFlags":
[
{
"name": "cloudsql_iam_authentication",
"value": "on"
}
]
}
}
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": "PENDING",
"user": "user@example.com",
"insertTime": "2020-01-01T19:13:21.834Z",
"operationType": "CREATE",
"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;
- LOCATION_ID: o ID do local
- INSTANCE_ID: o ID da instância buscada
- REGION: a região desejada
- DATABASE_VERSION: string de tipo enumerado da versão do banco de dados.
Por exemplo:
MYSQL_8_0 - PASSWORD: a senha do usuário raiz
- MACHINE_TYPE: string de tipo enumerado do tipo de máquina (camada), como:
db-custom-[CPUS]-[MEMORY_MBS]
Método HTTP e URL:
POST https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/locations/LOCATION_ID/instances
Corpo JSON da solicitação:
{
"name": "INSTANCE_ID",
"region": "REGION",
"databaseVersion": "DATABASE_VERSION",
"rootPassword": "PASSWORD",
"settings": {
"tier": "MACHINE_TYPE",
"backupConfiguration": {
"enabled": true
}
"databaseFlags":
[
{
"name": "cloudsql_iam_authentication",
"value": "on"
}
]
}
}
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": "PENDING",
"user": "user@example.com",
"insertTime": "2020-01-01T19:13:21.834Z",
"operationType": "CREATE",
"name": "OPERATION_ID",
"targetId": "INSTANCE_ID",
"selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/operations/OPERATION_ID",
"targetProject": "PROJECT_ID"
}
Adicionar o usuário de identidade do Workforce à instância
Adicione o principal externo à sua instância usando o tipo CLOUD_IAM_WORKFORCE_IDENTITY.
Verifique se o ID do usuário usado corresponde ao valor fornecido pelo
mapeamento de atributos
do seu provedor de identidade de colaboradores. Normalmente, isso é configurado como um endereço de e-mail, por exemplo, cruz@example.com.
Console
-
No console 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. O painel Adicionar uma conta de usuário à instância INSTANCE_NAME é aberto.
- Selecione Federação de identidade de colaboradores.
- No campo Usuário da força de trabalho, insira o ID do usuário que você quer adicionar.
- Clique em Adicionar.
gcloud
Execute o comando a seguir para criar o usuário:
gcloud sql users create USER_ID \ --instance=INSTANCE_NAME \ --type=CLOUD_IAM_WORKFORCE_IDENTITY
Substitua:
USER_ID: o endereço de e-mail do usuário que você quer adicionar, por exemplo,cruz@example.com.INSTANCE_NAME: o nome da instância.
Terraform
Use o recurso google_sql_user para definir o usuário de identidade
de colaboradores:
resource "google_sql_user" "workforce_user" { name = "USER_ID" # e.g., "cruz@example.com" instance = "INSTANCE_NAME" type = "CLOUD_IAM_WORKFORCE_IDENTITY" }
Substitua:
USER_ID: o ID do usuário que você quer adicionar. Por exemplo,cruz@example.com.INSTANCE_NAME: o nome da instância.
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_WORKFORCE_IDENTITY"
}
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"
}
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_WORKFORCE_IDENTITY"
}
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"
}
Conceder função do usuário da instância
Conceda o papel
roles/cloudsql.instanceUser
ao principal de identidade da força de trabalho ou a todo o pool.
Console
-
No console Google Cloud , acesse a página Contas de serviço.
- Clique em Permitir acesso.
No campo Novos principais, faça o seguinte:
Para conceder acesso a um principal individual, insira a identidade da força de trabalho como um
principal:principal://iam.googleapis.com/locations/global/workforcePools/POOL_ID/subject/USER_IDPara conceder acesso a todo o pool, insira o pool de funcionários como um
principalSet:principalSet://iam.googleapis.com/locations/global/workforcePools/POOL_ID/*
- Na lista Papel, selecione Cloud SQL > 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, clique em Adicionar outro papel e selecione Cloud SQL > Cliente do Cloud SQL.
- Clique em Salvar.
gcloud
Para conceder acesso a um usuário individual, use o comando gcloud projects
add-iam-policy-binding:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member="principal://iam.googleapis.com/locations/global/workforcePools/POOL_ID/subject/USER_ID" \ --role="roles/cloudsql.instanceUser"
Substitua:
USER_ID: o ID do usuário que você quer adicionar. Por exemplo,cruz@example.com.POOL_ID: o ID do pool de colaboradores.PROJECT_ID: o identificador do projeto que contém a instância.
Para conceder acesso a todo o pool de força de trabalho, use o comando gcloud projects
add-iam-policy-binding com o formato de membro principalSet:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member="principalSet://iam.googleapis.com/locations/global/workforcePools/POOL_ID/*" \ --role="roles/cloudsql.instanceUser"
Terraform
Use o recurso google_project_iam_member para conceder o papel ao principal da força de trabalho:
resource "google_project_iam_member" "workforce_user_iam" { project = "PROJECT_ID" role = "roles/cloudsql.instanceUser" member = "principal://iam.googleapis.com/locations/global/workforcePools/POOL_ID/subject/USER_ID" }
Substitua:
USER_ID: o ID do usuário que você quer adicionar. Por exemplo,cruz@example.com.POOL_ID: o ID do pool de colaboradores.PROJECT_ID: o identificador do projeto que contém a instância.
REST
Para conceder políticas do IAM usando a API, recupere a política do IAM do projeto usando o método getIamPolicy.
Em seguida, anexe a nova vinculação à política e, por fim, aplique a política atualizada
usando o método setIamPolicy.
Confira a seguir um exemplo de payload de vinculação a ser anexado à sua política do IAM:
{ "bindings": [ { "role": "roles/cloudsql.instanceUser", "members": [ "principal://iam.googleapis.com/locations/global/workforcePools/POOL_ID/subject/USER_ID" ] } ] }
Substitua:
USER_ID: o ID do usuário que você quer adicionar. Por exemplo,cruz@example.com.POOL_ID: o ID do pool de colaboradores.
Conceder privilégios de banco de dados
É possível especificar os papéis de banco de dados que serão concedidos ao criar o usuário de identidade de colaboradores ou conceder manualmente os privilégios de banco de dados dentro dele.
Por exemplo, para conceder privilégios manualmente:
GRANT SELECT ON TABLE_NAME TO "USER_ID";
Substitua:
TABLE_NAME: o nome da tabela do banco de dados.USER_ID: o ID do usuário do banco de dados de identidade da força de trabalho. Por exemplo,cruz@example.com.
Conecte-se à instância
Agora é possível se conectar à instância usando a CLI gcloud ou o proxy de autenticação do Cloud SQL.
Usar a CLI gcloud
Primeiro, autentique-se com sua identidade da força de trabalho para gerar um token de login.
Para autenticar usando a federação de identidade da força de trabalho, use o comando
gcloud auth logincom a flag--cred-file:gcloud auth login --cred-file=CONFIGURATION_FILESubstitua
CONFIGURATION_FILEpelo caminho do arquivo de configuração gerado para seu provedor de identidade da força de trabalho.Para se conectar usando um token gerado, execute o seguinte comando:
bash export MYSQL_PWD=$(gcloud sql generate-login-token) mysql --host=INSTANCE_IP --user=USER_ID \ --database=DB_NAME --ssl-mode=REQUIREDSubstitua:
INSTANCE_IP: o endereço IP da instância do Cloud SQL.USER_ID: o ID do usuário da força de trabalho. Por exemplo,cruz@example.com.DB_NAME: o nome do banco de dados a que você quer se conectar.
Como usar o proxy do Cloud SQL Auth
Inicie o proxy com a flag
--auto-iam-authn:
./cloud-sql-proxy INSTANCE_CONNECTION_NAME --auto-iam-authn
Para mais informações sobre o proxy, consulte Sobre o proxy de autenticação do Cloud SQL.
Restrições e limitações
- ID de usuário duplicado em vários pools: o Cloud SQL não consegue distinguir
entre assuntos com o mesmo ID de usuário em diferentes pools de força de trabalho ou
provedores de identidade. Se você usa vários pools ou provedores de força de trabalho, é necessário usar políticas do IAM para garantir que não conceda a permissão de login
roles/cloudsql.instanceUsera nomes de assunto duplicados de diferentes pools ou provedores. Isso impede o acesso não autorizado de outro pool ou provedor com o mesmo ID de usuário. - Cota de login: há uma cota de 12.000 logins por minuto para cada instância, que inclui tentativas de login bem-sucedidas e malsucedidas. Quando a cota é excedida, os logins ficam temporariamente indisponíveis. Recomendamos evitar logins frequentes e restringi-los usando redes autorizadas.
A seguir
- Saiba mais sobre a federação de identidade de colaboradores.
- Saiba como configurar instâncias para autenticação do banco de dados do IAM.
- Saiba como gerenciar usuários com a autenticação de banco de dados do IAM.
- Saiba como fazer login usando a autenticação de banco de dados do IAM.