As condições do IAM permitem definir e aplicar o controle de acesso condicional e baseado em atributos para recursos do Google Cloud, incluindo instâncias do Cloud SQL. Para mais informações sobre as Condições do IAM, consulte a página Visão geral das Condições do IAM.
Introdução
No Cloud SQL, é possível aplicar o acesso condicional com base nos atributos a seguir:
- Atributos de data/hora: usados para definir acesso temporário (expirando), programado ou de duração limitada aos recursos do Cloud SQL. Por exemplo, é possível permitir que um usuário acesse uma instância de banco de dados até uma data específica. Também é possível usar atributos de data/hora em qualquer nível da hierarquia de recursos. Para mais informações, consulte Como configurar o acesso temporário.
- Atributos de recurso: usados para configurar o acesso condicional com base em uma tag, um nome de recurso, tipo de recurso ou atributo de serviço do recurso. No Cloud SQL, é possível usar atributos de instâncias do banco de dados para configurar o acesso condicional. Por exemplo, permita que um usuário acesse somente instâncias com uma tag específica. Para mais informações, consulte Como configurar o acesso baseado em recursos.
Os casos de uso incluem:
Como permitir que os usuários se conectem a instâncias específicas
Como permitir que usuários criem instâncias com prefixos ou sufixos específicos (por exemplo, "teste").
Como limitar o acesso a operações de backup para instâncias de teste
Como permitir que os usuários excluam instâncias de desenvolvimento e teste, mas não instâncias de produção.
Como permitir que os usuários executem operações administrativas em determinadas datas ou em certos horários.
Permitir que os usuários se conectem a instâncias específicas
Suponha que você queira permitir que um usuário ou conta de serviço tenha permissão para se conectar a apenas uma instância específica do Cloud SQL. É possível incluir uma condição do IAM na vinculação da política do IAM que conceda à conta as permissões de um papel do Cloud SQL.
Por padrão, o papel predefinido de cliente do Cloud SQL
(roles/cloudsql.client
), que contém a permissão
cloudsql.instances.connect
, autoriza o membro a se conectar a
todas as instâncias do Cloud SQL em um projeto. Ao introduzir uma condição
do IAM na vinculação de política, é possível conceder permissão apenas à instância
nomeada.
Console
Neste exemplo, você verá como modificar a vinculação atual do IAM do projeto para atribuir a uma conta de serviço um papel de cliente do Cloud SQL para uma instância específica.
Neste exemplo, usamos as seguintes variáveis:
- PROJECT_ID: o projeto do Google Cloud
- INSTANCE_ID: o nome da instância à qual você quer conceder acesso.
-
No console do Google Cloud, abra a página IAM.
- Clique em Adicionar.
- Na caixa de entrada Novos membros, insira o e-mail da conta de serviço.
- Clique na lista suspensa Papel e selecione o papel Cliente do Cloud SQL.
- Clique em Adicionar condição.
- Digite um título e uma descrição.
- Selecione a guia Editor da condição.
- Na seção Criador de condições:
- Em Tipo de condição - Recurso - Nome, insira
projects/PROJECT_ID/instances/INSTANCE_ID
- Verifique se a condicional AND está selecionada.
- Em Tipo de condição - Recurso - Serviço, selecione
sqladmin.googleapis.com
.
- Em Tipo de condição - Recurso - Nome, insira
- Clique em Salvar para salvar a condição.
- Clique em Salvar para salvar a política.
gcloud
Neste exemplo, mostramos como modificar a vinculação atual de política do IAM para o projeto para atribuir a uma conta de serviço específica o papel de cliente do Cloud SQL, mas somente para uma instância específica.
Neste exemplo, usamos as seguintes variáveis:
- PROJECT_ID: o projeto do Google Cloud
- INSTANCE_ID: o nome da instância à qual você quer conceder acesso.
- SERVICE_ACCOUNT_EMAIL: o endereço de e-mail completo da conta de serviço com o acesso que você quer modificar.
- Reúna as vinculações de política do IAM e envie-as para o arquivo
bindings.json
: - Adicione a seguinte vinculação de papel condicional ao arquivo
bindings.json
:{ "bindings": [ { "role": "roles/cloudsql.client", "members": [ "serviceAccount:SERVICE_ACCOUNT_EMAIL" ], "condition": { "expression": "resource.name == 'projects/PROJECT_ID/instances/INSTANCE_ID' && resource.service == 'sqladmin.googleapis.com'" } } ], "etag": "BwWKmjvelug=", "version": 3 }
- Atualize a política do IAM com o novo arquivo
bindings.json
.gcloud projects set-iam-policy PROJECT_ID bindings.json
gcloud projects get-iam-policy PROJECT_ID --format=json > bindings.json
Terraform
Para permitir que os usuários se conectem a instâncias específicas, use um recurso de dados google_iam_policy
do Terraform e um recurso google_project_iam_policy
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
Limitar o acesso a operações de backup para instâncias de teste
Suponha que a topologia do serviço esteja configurada para que todas as instâncias de teste tenham um prefixo test
(por exemplo, test-instance-1
) e todas as instâncias de produção tenham um prefixo prod
(por exemplo, prod-instance-1
).
É possível limitar o acesso a operações de backup a instâncias de teste para um usuário ou uma conta de serviço. O limite de acesso inclui a restrição de operações CREATE
, GET
, LIST
ou DELETE
a backups das instâncias de teste.
Console
-
No console do Google Cloud, abra a página IAM.
- Clique na guia PARTICIPANTES.
- Localize o endereço de e-mail ou a conta de serviço (principal) do usuário com o acesso que você quer restringir.
- Clique no ícone Editar participante à direita do participante. Este ícone aparece como um lápis.
- Na caixa de diálogo Editar permissões, clique em ADICIONAR OUTRO PAPEL.
No campo Filtro da caixa de diálogo subsequente, insira
Cloud SQL Admin
. Em seguida, selecione o papel Administrador do Cloud SQL que será exibido.A caixa de diálogo Editar permissões está ativa, e o papel Administrador do Cloud SQL será exibido.
- À direita do papel Administrador do Cloud SQL, clique no link Adicionar condição.
- Na caixa de diálogo Editar condição, forneça as seguintes informações:
- No campo Título, insira um nome para a condição que você está adicionando para limitar o acesso às operações de backup das instâncias de teste. Por exemplo, digite
Limit access to backup operations
. Clique na guia EDITOR DE CONDIÇÃO e adicione a seguinte condição:
resource.type == "sqladmin.googleapis.com/BackupRun" && resource.name.startsWith("projects/PROJECT_ID/instances/test")
- No campo Título, insira um nome para a condição que você está adicionando para limitar o acesso às operações de backup das instâncias de teste. Por exemplo, digite
- Clique em SALVAR.
- Na caixa de diálogo Editar permissões, clique em SALVAR.
gcloud
Neste exemplo, usamos as seguintes variáveis:
- PROJECT_ID: o projeto do Google Cloud
- USER_EMAIL: o endereço de e-mail do usuário.
- SERVICE_ACCOUNT_EMAIL: o endereço de e-mail completo da conta de serviço com o acesso você quer limitar.
-
Limite o escopo do papel
cloudsql.admin
de um usuário que tenha um endereço de e-mail USER_EMAIL.O escopo do papel é limitado aos recursos com nomes que começam com
projects/PROJECT_ID/instances/test
.gcloud projects add-iam-policy-binding PROJECT_ID \ --member=user:USER_EMAIL \ --role=roles/cloudsql.admin \ --condition=expression="resource.type == \"sqladmin.googleapis.com/BackupRun\" && resource.name.startsWith(\"projects/PROJECT_ID/instances/test-instance-1\")",title="test"
-
Limite o escopo do papel
cloudsql.admin
para um usuário que faça login com uma conta de serviço de SERVICE_ACCOUNT_EMAIL.gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:SERVICE_ACCOUNT_EMAIL \ --role=roles/cloudsql.admin \ --condition=expression="resource.type == \"sqladmin.googleapis.com/BackupRun\" && resource.name.startsWith(\"projects/PROJECT_ID/instances/test-instance-1\")",title="test"
OU
Permitir que os usuários excluam instâncias de teste, mas não instâncias de produção
Suponha que você queira permitir que uma conta de serviço exclua instâncias de teste, mas não instâncias de produção. Para fazer isso, use tags e adicione as duas vinculações de política a seguir para a conta de serviço:
- Um papel de editor do Cloud SQL no recurso em que você concedeu o
papel e os respectivos descendentes. Se concedido no projeto, o papel se aplica a todas
as instâncias no projeto. O papel de editor do Cloud SQL
não contém a permissão
cloudsql.instances.delete
. - Um papel de administrador do Cloud SQL em instâncias com a tag
test
.
Console
-
No console do Google Cloud, abra a página IAM.
- Clique em Adicionar.
- No campo Novos membros, insira o e-mail da conta de serviço.
- Clique na lista suspensa Papel e selecione o papel Editor do Cloud SQL. Não adicione mais nada para esse papel.
- Clique em Salvar para salvar a condição.
- Clique no menu Papel da mesma conta e selecione o papel Administrador do Cloud SQL.
- Clique em Adicionar condição.
- Digite um título e uma descrição.
- Selecione a guia Editor da condição.
- Na seção Criador de condições:
- Em Tipo de condição – Recurso - Nome, digite um nome para a condição.
- Em Tipo de condição - Recurso - Serviço, selecione
sqladmin.googleapis.com
. - Em Tipo de condição - Recurso - Tag, digite o nome
do namespace da chave de tag. Para este exemplo, o
Operador é
matches
e o valor é815471563813/env/test
.
- Clique em Salvar para salvar a condição.
- Clique em Salvar para salvar a política.
gcloud
Neste exemplo, usamos as seguintes variáveis:
- PROJECT_ID: o projeto do Google Cloud
- INSTANCE_ID: a instância do Cloud SQL.
- REGION: a região em que a instância do Cloud SQL está localizada.
- ORGANIZATION_ID: o ID da organização que será o recurso pai dessa chave de tag; por exemplo: 12345678901. Para saber como conseguir o ID da organização, consulte Como criar e gerenciar organizações.
- SERVICE_ACCOUNT_EMAIL: o endereço de e-mail completo da conta de serviço com o acesso que você quer modificar.
- Crie uma chave de tag chamada "env" com os valores de tag "prod" e "test". Para mais
informações, consulte
Como criar e definir uma nova tag.
gcloud alpha resource-manager tags keys create env \ --parent=organizations/ORGANIZATION_ID gcloud alpha resource-manager tags values create prod \ --parent=env gcloud alpha resource-manager tags values create test \ --parent=env
- Anexe a tag "env" com o valor "test" às instâncias do Cloud SQL do ambiente de teste. Para mais informações, consulte a página Tags do Cloud SQL.
- Reúna as vinculações de política do IAM e envie-as para o arquivo
bindings.json
:gcloud projects get-iam-policy PROJECT_ID --format=json >> bindings.json
- Adicione as seguintes vinculações condicionais ao arquivo
bindings.json
:{ "bindings": [ { "role": "roles/cloudsql.editor", "members": [ "serviceAccount:SERVICE_ACCOUNT_EMAIL" ] }, { "role": "roles/cloudsql.admin", "members": [ "serviceAccount:SERVICE_ACCOUNT_EMAIL" ], "condition": { "expression": "resource.matchTag('ORGANIZATION_ID/env', 'test')" } } ], "etag": "BwWKmjvelug=" "version": 3 }
- Atualize as vinculações de política do IAM com o novo arquivo
bindings.json
.gcloud projects set-iam-policy PROJECT_ID bindings.json
gcloud alpha resource-manager tags bindings create \ --tag-value=test \ --parent=//sqladmin.googleapis.com/projects/PROJECT_ID/instances/INSTANCE_ID \ --location=REGION