As condições da IAM permitem-lhe definir e aplicar o controlo de acesso condicional baseado em atributos para Google Cloud recursos, incluindo instâncias do Cloud SQL. Para mais informações sobre as condições do IAM, consulte a página Vista geral das condições do IAM.
Introdução
No Cloud SQL, pode aplicar o acesso condicional com base nos seguintes atributos:
- Atributos de data/hora: usados para definir o acesso temporário (com data de validade), agendado ou de duração limitada aos recursos do Cloud SQL. Por exemplo, pode permitir que um utilizador aceda a uma instância da base de dados até uma data especificada. Pode usar atributos de data/hora em qualquer nível da hierarquia de recursos. Para mais informações, consulte o artigo Configurar o acesso temporário.
- Atributos de recursos: usados para configurar o acesso condicional com base numa etiqueta, num nome de recurso, num tipo de recurso ou num atributo de serviço de recurso. No Cloud SQL, pode usar atributos de instâncias de base de dados para configurar o acesso condicional. Por exemplo, pode permitir que um utilizador aceda apenas a instâncias com uma etiqueta específica. Para mais informações, consulte o artigo Configurar o acesso baseado em recursos.
Os exemplos de utilização incluem:
Permitir que os utilizadores se associem a instâncias específicas.
Permitir que os utilizadores criem instâncias com prefixos ou sufixos específicos (por exemplo, "teste").
Limitar o acesso a operações de cópia de segurança para instâncias de teste
Permitir que os utilizadores eliminem instâncias de desenvolvimento e teste, mas não instâncias de produção.
Permitir que os utilizadores realizem operações administrativas em determinadas datas ou em determinadas horas.
Permita que os utilizadores se associem a instâncias específicas
Suponhamos que quer permitir que um utilizador ou uma conta de serviço tenha autorização para se ligar apenas a uma instância específica do Cloud SQL. Pode incluir uma condição de IAM na associação da política de IAM que concede a essa conta as autorizações de uma função do Cloud SQL.
Por predefinição, a função de cliente do Cloud SQL predefinida (roles/cloudsql.client
), que contém a autorização cloudsql.instances.connect
, autoriza o respetivo membro a ligar-se a todas as instâncias do Cloud SQL num projeto. Ao introduzir uma condição do IAM na associação de políticas, pode conceder autorização apenas à instância nomeada.
Consola
Este exemplo mostra como modificar a associação de IAM existente para o projeto de modo a atribuir a uma conta de serviço uma função de cliente do Cloud SQL para uma instância específica.
Este exemplo usa as seguintes variáveis:
- PROJECT_ID: o seu Google Cloud projeto.
- INSTANCE_ID: o nome da instância à qual quer conceder acesso.
-
Na Google Cloud consola, aceda à página IAM.
- Clique em Adicionar.
- Na caixa de entrada Novos membros, introduza o email da conta de serviço.
- Clique na lista pendente Função e selecione a função Cliente do Cloud SQL.
- Clique em Adicionar condição.
- Introduza um título e uma descrição.
- Selecione o separador Editor de condições.
- Na secção Construtor de condições:
- Para Tipo de condição – Recurso – Nome, introduza
projects/PROJECT_ID/instances/INSTANCE_ID
- Certifique-se de que a condição AND está selecionada.
- Para Tipo de condição – Recurso – Serviço, selecione
sqladmin.googleapis.com
.
- Para Tipo de condição – Recurso – Nome, introduza
- Clique em Guardar para guardar a condição.
- Clique em Guardar para guardar a política.
gcloud
Este exemplo mostra como modificar a associação da política de IAM existente para o projeto de modo a atribuir a uma conta de serviço específica a função de cliente do Cloud SQL, mas apenas para uma instância específica.
Este exemplo usa as seguintes variáveis:
- PROJECT_ID: o seu Google Cloud projeto.
- INSTANCE_ID: o nome da instância à qual quer conceder acesso.
- SERVICE_ACCOUNT_EMAIL: o endereço de email completo da conta de serviço cujo acesso quer modificar.
- Obtenha as associações de políticas IAM existentes e apresente-as no ficheiro
bindings.json
: - Adicione a seguinte associação de funções condicional ao ficheiro
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 de IAM com o novo ficheiro
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 utilizadores se liguem a instâncias específicas, use um recurso de dados do google_iam_policy
Terraform e um google_project_iam_policy
recurso do Terraform.
Aplique as alterações
Para aplicar a configuração do Terraform num Google Cloud projeto, conclua os passos nas secções seguintes.
Prepare o Cloud Shell
- Inicie o Cloud Shell.
-
Defina o Google Cloud projeto predefinido onde quer aplicar as suas configurações do Terraform.
Só tem de executar este comando uma vez por projeto e pode executá-lo em qualquer diretório.
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
As variáveis de ambiente são substituídas se definir valores explícitos no ficheiro de configuração do Terraform.
Prepare o diretório
Cada ficheiro de configuração do Terraform tem de ter o seu próprio diretório (também denominado módulo raiz).
-
No Cloud Shell, crie um diretório e um novo ficheiro nesse diretório. O nome do ficheiro tem de ter a extensão
.tf
, por exemplo,main.tf
. Neste tutorial, o ficheiro é denominadomain.tf
.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
Se estiver a seguir um tutorial, pode copiar o código de exemplo em cada secção ou passo.
Copie o exemplo de código para o ficheiro
main.tf
criado recentemente.Opcionalmente, copie o código do GitHub. Isto é recomendado quando o fragmento do Terraform faz parte de uma solução completa.
- Reveja e modifique os parâmetros de exemplo para aplicar ao seu ambiente.
- Guarde as alterações.
-
Inicialize o Terraform. Só tem de fazer isto uma vez por diretório.
terraform init
Opcionalmente, para usar a versão mais recente do fornecedor Google, inclua a opção
-upgrade
:terraform init -upgrade
Aplique as alterações
-
Reveja a configuração e verifique se os recursos que o Terraform vai criar ou
atualizar correspondem às suas expetativas:
terraform plan
Faça as correções necessárias à configuração.
-
Aplique a configuração do Terraform executando o seguinte comando e introduzindo
yes
no comando:terraform apply
Aguarde até que o Terraform apresente a mensagem "Apply complete!" (Aplicação concluída!).
- Abra o seu Google Cloud projeto para ver os resultados. Na Google Cloud consola, navegue para os seus recursos na IU para se certificar de que o Terraform os criou ou atualizou.
Eliminar as alterações
Para eliminar as alterações, faça o seguinte:
- Para desativar a proteção contra eliminação, no ficheiro de configuração do Terraform, defina o argumento
deletion_protection
comofalse
.deletion_protection = "false"
- Aplique a configuração do Terraform atualizada executando o seguinte comando e
introduzindo
yes
no comando:terraform apply
-
Remova os recursos aplicados anteriormente com a sua configuração do Terraform executando o seguinte comando e introduzindo
yes
no comando:terraform destroy
Limite o acesso às operações de cópia de segurança para instâncias de teste
Suponhamos que a topologia do seu serviço está configurada de modo que todas as instâncias de teste tenham o prefixo test
(por exemplo, test-instance-1
) e todas as instâncias de produção tenham o prefixo prod
(por exemplo, prod-instance-1
).
Pode limitar o acesso às operações de cópia de segurança às suas instâncias de teste para um utilizador ou uma conta de serviço. A limitação do acesso inclui a restrição das operações CREATE
, GET
, LIST
ou DELETE
a cópias de segurança para as suas instâncias de teste.
Consola
-
Na Google Cloud consola, aceda à página IAM.
- Clique no separador PRINCIPAIS.
- Localize o endereço de email ou a conta de serviço (principal) do utilizador ao qual quer restringir o acesso.
- Clique no ícone Editar principal à direita do principal. Este ícone aparece como um lápis.
- Na caixa de diálogo Editar autorizações, clique em ADICIONAR OUTRA FUNÇÃO.
No campo Filtrar da caixa de diálogo seguinte, introduza
Cloud SQL Admin
. Em seguida, selecione a função Administrador do Cloud SQL apresentada.A caixa de diálogo Editar autorizações está ativa e a função Administrador do Cloud SQL aparece agora na caixa de diálogo.
- À direita da função Administrador do Cloud SQL, clique no link Adicionar condição.
- Na caixa de diálogo Editar condição, indique as seguintes informações:
- No campo Título, introduza um nome para a condição que está a adicionar para limitar o acesso às operações de cópia de segurança para instâncias de teste. Por exemplo, pode introduzir
Limit access to backup operations
. Clique no separador EDITOR DE CONDIÇÕES e, de seguida, adicione a seguinte condição:
resource.type == "sqladmin.googleapis.com/BackupRun" && resource.name.startsWith("projects/PROJECT_ID/instances/test")
- No campo Título, introduza um nome para a condição que está a adicionar para limitar o acesso às operações de cópia de segurança para instâncias de teste. Por exemplo, pode introduzir
- Clique em GUARDAR.
- Na caixa de diálogo Editar autorizações, clique em GUARDAR.
gcloud
Este exemplo usa as seguintes variáveis:
- PROJECT_ID: o seu Google Cloud projeto.
- USER_EMAIL: o endereço de email do utilizador.
- SERVICE_ACCOUNT_EMAIL:o endereço de email completo da conta de serviço cujo acesso quer limitar.
-
Limite o âmbito da função
cloudsql.admin
para um utilizador que tenha um endereço de email de USER_EMAIL.O âmbito da função está limitado aos recursos cujos nomes de recursos começam por
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 âmbito da função
cloudsql.admin
para um utilizador que tenha sessão iniciada 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 utilizadores eliminem instâncias de teste, mas não instâncias de produção
Suponhamos que quer permitir que uma conta de serviço elimine instâncias de teste, mas não instâncias de produção. Pode fazê-lo usando etiquetas e adicionando as seguintes duas associações de políticas para a conta de serviço:
- Uma função de editor do Cloud SQL no recurso onde concedeu a função e os respetivos descendentes. Se for concedida no projeto, a função aplica-se a todas as instâncias no projeto. A função de editor do Cloud SQL não contém a autorização
cloudsql.instances.delete
. - Uma função de administrador do Cloud SQL em instâncias com a etiqueta
test
.
Consola
-
Na Google Cloud consola, aceda à página IAM.
- Clique em Adicionar.
- No campo Novos membros, introduza o email da conta de serviço.
- Clique na lista pendente Função e selecione a função Editor do Cloud SQL. Não adicione mais nada para esta função.
- Clique em Guardar para guardar a condição.
- Clique no menu Função para a mesma conta e selecione a função Administrador do Cloud SQL.
- Clique em Adicionar condição.
- Introduza um título e uma descrição.
- Selecione o separador Editor de condições.
- Na secção Construtor de condições:
- Em Tipo de condição – Recurso – Nome, introduza um nome para a condição.
- Para Tipo de condição – Recurso – Serviço, selecione
sqladmin.googleapis.com
. - Para Tipo de condição – Recurso – Etiqueta, introduza o nome com espaço de nomes da chave da etiqueta. Para este exemplo, o
operador é
matches
e o valor é815471563813/env/test
.
- Clique em Guardar para guardar a condição.
- Clique em Guardar para guardar a política.
gcloud
Este exemplo usa as seguintes variáveis:
- PROJECT_ID: o seu Google Cloud projeto.
- INSTANCE_ID: a sua instância do Cloud SQL.
- REGION: a região em que a sua instância do Cloud SQL se encontra.
- ORGANIZATION_ID: O ID da organização que vai ser o recurso principal desta chave de etiqueta; por exemplo: 12345678901. Para saber como obter o ID da sua organização, consulte o artigo Criar e gerir organizações.
- SERVICE_ACCOUNT_EMAIL:o endereço de email completo da conta de serviço cujo acesso quer modificar.
- Crie uma chave de etiqueta denominada "env" com os valores de etiqueta "prod" e "test". Para mais
informações, consulte o artigo
Criar e definir uma nova etiqueta.
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 etiqueta `env` com o valor `test` às instâncias do Cloud SQL do seu ambiente de teste. Para mais informações, consulte a página Etiquetas do Cloud SQL.
- Obtenha as associações de políticas IAM existentes e apresente-as no ficheiro
bindings.json
:gcloud projects get-iam-policy PROJECT_ID --format=json >> bindings.json
- Adicione as seguintes associações condicionais ao ficheiro
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 associações de políticas de IAM com o novo ficheiro
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