Configurar o IAP para o Compute Engine


Este guia descreve como configurar uma instância do Compute Engine com o Identity-Aware Proxy (IAP). Se já tiver a instância do Compute Engine configurada e só precisar de ativar o IAP, consulte o artigo Ativar o IAP para o Compute Engine.

Objetivos

Neste tutorial, vai saber mais sobre o seguinte:

  • Criar um modelo de instância do Compute Engine e um grupo de instâncias geridas (MIG).
  • Obter um nome de domínio e um certificado.
  • Criar um balanceador de carga HTTPS com um certificado.
  • Ativar CNA.
  • Testar se a IAP está a funcionar.

Custos

Este tutorial usa componentes faturáveis do Google Cloud, incluindo:

  • Compute Engine
    • 4 máquinas virtuais (VM)
  • Redes
    • Regra de encaminhamento do balanceador de carga global
    • Tráfego de entrada

Para uma estimativa do custo com base na utilização prevista, consulte esta calculadora de preços.

Os novos utilizadores da Cloud Platform podem ser elegíveis para uma avaliação gratuita.

Antes de começar

Antes de iniciar este tutorial, precisa do seguinte:

  1. Selecione ou crie um Google Cloud projeto.
    ACEDER À PÁGINA DE PROJETOS

  2. Ative a faturação para o seu projeto. Leia sobre como modificar as definições de faturação de um projeto

Passo 1: crie um modelo do Compute Engine

Na Google Cloud consola, aceda à página Compute Engine > Criar um modelo de instância e selecione o projeto no qual quer criar um modelo.

ACEDA À PÁGINA DE CRIAÇÃO DE UM MODELO DE INSTÂNCIA

Use os valores predefinidos, exceto para o seguinte:

  • Tipo de máquina:
    • micro (f1-micro)
  • Âmbitos de acesso:
    • Defina o acesso para cada API
    • Compute Engine: só de leitura
  • Firewall:
    • Permita o tráfego HTTP
  • Na secção Gestão, em Automatização > Script de arranque, copie e cole o seguinte script:
    # Copyright 2021 Google LLC
    #
    # Licensed under the Apache License, Version 2.0 (the "License");
    # you may not use this file except in compliance with the License.
    # You may obtain a copy of the License at
    #
    #      http://www.apache.org/licenses/LICENSE-2.0
    #
    # Unless required by applicable law or agreed to in writing, software
    # distributed under the License is distributed on an "AS IS" BASIS,
    # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    # See the License for the specific language governing permissions and
    # limitations under the License.
    
    apt-get -y update
    apt-get -y install git
    apt-get -y install virtualenv
    git clone https://github.com/GoogleCloudPlatform/python-docs-samples
    cd python-docs-samples/iap
    virtualenv venv -p python3
    source venv/bin/activate
    pip install -r requirements.txt
    cat example_gce_backend.py |
      sed -e "s/YOUR_BACKEND_SERVICE_ID/$(gcloud compute backend-services describe my-backend-service --global --format="value(id)")/g" |
      sed -e "s/YOUR_PROJECT_ID/$(gcloud config get-value account | tr -cd "[0-9]")/g" > real_backend.py
    gunicorn real_backend:app -b 0.0.0.0:80
    

Quando terminar de atualizar os valores, clique em Criar para criar o modelo.

Passo 2: crie um grupo de instâncias gerido

Na Google Cloud consola, aceda à página Compute Engine > Criar um novo grupo de instâncias e selecione o projeto no qual quer criar um grupo de instâncias gerido.

ACEDA À PÁGINA DE CRIAÇÃO DE UM GRUPO DE INSTÂNCIAS

Use os valores predefinidos, exceto para o seguinte:

  • Nome: my-managed-instance-group
  • Localização: várias zonas
  • Modelo de instância: selecione o modelo de instância que criou no passo 1
  • Número de instâncias: para alterar o número de instâncias, tem de desativar primeiro o dimensionamento automático.
  • Modo de escala automática: não usar a escala automática
  • Verificação de funcionamento: selecione Criar uma verificação de funcionamento e, de seguida, introduza os seguintes valores:

    • Nome: my-health-check
    • Protocolo: HTTP

    Use a nova verificação de estado clicando em Guardar e continuar.

Quando terminar de atualizar os valores, clique em Criar para criar o grupo de instâncias gerido (MIG).

Passo 3: obtenha um nome de domínio e um certificado

Para usar o balanceador de carga com tráfego HTTPS, precisa de um nome de domínio e um certificado assinado. Pode registar um domínio no Google Domains ou usar a entidade de registo de domínios à sua escolha. Registe o seu domínio antes de continuar com este guia.

Configure o seu certificado

Crie um certificado que identifique o seu Website junto dos utilizadores. Para obter informações sobre como criar um certificado, consulte o artigo Usar certificados SSL geridos pela Google.

A AC tem de validar que é proprietário do nome do domínio que registou. Nos passos abaixo, vai criar uma VM para autenticar o seu domínio com a AC.

Crie uma VM para autenticar a propriedade do seu domínio

Na Google Cloud consola, aceda a Compute Engine > Criar uma página de instância.

ACEDA À PÁGINA DE CRIAÇÃO DE UMA INSTÂNCIA

Use os valores predefinidos, exceto para o seguinte:

  • Nome: certbot-vm
  • Tipo de máquina: micro (f1-micro)
  • Âmbitos de acesso:
    • Defina o acesso para cada API
    • Compute Engine: leitura/escrita
  • Imagem de disco de arranque:
    • Debian GNU/Linux 9 (stretch)
  • Firewall:
    • Permita o tráfego HTTP
    • Permita o tráfego HTTPS

Quando terminar de atualizar os valores, clique em Criar para criar a instância de VM. Tome nota do endereço IP externo da VM que acabou de criar. Vai precisar dele no passo seguinte.

Configure o seu domínio para apontar para a VM

Para configurar o seu domínio de modo a apontar para a VM, siga os passos abaixo para configurar os registos A:

  1. Inicie sessão na conta do seu domínio no anfitrião de domínio.
  2. Encontre a página para atualizar os registos de DNS do seu domínio. Esta página pode ter um nome semelhante a "Gestão de DNS", "Gestão do servidor de nomes" ou "Definições avançadas".
  3. Altere os seus registos A para os seguintes valores:
    • Nome/anfitrião/alias: @
    • Valor: o endereço IP externo da VM que criou para autenticar a propriedade do domínio acima.
    • TTL: o valor predefinido da sua entidade de registo ou 86 400 (um dia).
  4. Aguarde até que o registo de DNS seja atualizado. A propagação do registo que adicionou pode demorar até um dia.

Para saber mais, consulte o artigo Acerca dos registos A.

Teste o seu servidor

Para testar se o seu servidor está a funcionar corretamente, siga os passos abaixo:

  1. Na Google Cloud consola, aceda à página Compute Engine > Instâncias de VM.
    ACEDER À PÁGINA DE INSTÂNCIAS DE VM

  2. Em Ligar para certbot-vm, clique em SSH.

  3. Execute os seguintes comandos para executar um pequeno servidor Web na sua VM:

      mkdir web
      cd web
      echo "Hello" > index.html
      sudo busybox httpd -v -f
    
  4. Num navegador de Internet, aceda ao nome de domínio que registou anteriormente. O navegador de Internet deve apresentar Hello e a sessão SSH deve apresentar uma mensagem que contenha ... response:200. Caso contrário, aguarde alguns minutos e repita este passo.

  5. Após o teste ser bem-sucedido, prima Ctrl+C para parar o servidor Web.

Crie um certificado

Para criar um certificado, registe-se no Let's Encrypt executando os seguintes comandos na VM em que YOUR_DOMAIN é o seu nome de domínio, sem incluir o protocolo:

sudo pkill busybox
sudo apt-get install -y certbot
sudo certbot certonly --standalone -d YOUR-DOMAIN

Durante este processo, o Let's Encrypt pode pedir um endereço de email para poder enviar um lembrete quando o seu certificado estiver prestes a expirar (por predefinição, 3 meses após a emissão). Também tem de aceitar os Termos de Utilização definidos pela Let's Encrypt.

Quando o registo for bem-sucedido, deve ver uma mensagem com o seguinte texto: Congratulations! Your certificate and chain have been saved at...

Adicione o certificado ao seu projeto

Para adicionar o certificado ao seu projeto, execute os seguintes comandos na VM:

sudo su
cd /etc/letsencrypt/live/YOUR_DOMAIN
gcloud compute ssl-certificates create my-cert --certificate=fullchain.pem --private-key=privkey.pem

Depois de criar o certificado com êxito, deve ver uma mensagem semelhante à seguinte: Created [https://www.googleapis.com/compute/v1/projects/example-project/global/sslCertificates/my-cert]

Antes de continuar, feche a sessão SSH.

Passo 4: crie um balanceador de carga

Antes de iniciar este passo, certifique-se de que fechou a sessão de SSH que iniciou no passo anterior. Quando tiver tudo pronto, siga os passos abaixo para criar um equilibrador de carga:

  1. Na Google Cloud consola, aceda à página Serviços de rede > Criar um equilibrador de carga e selecione o projeto para o qual quer criar um equilibrador de carga.
    ACEDA À PÁGINA DE CRIAÇÃO DE UM BALANCEADOR DE CARGA

  2. Em Balanceamento de carga HTTP(S), clique em Iniciar configuração.

  3. Selecione Da Internet para as minhas VMs.

  4. Na página Novo balanceador de carga de aplicações externo apresentada, introduza um Nome para o balanceador de carga.

  5. Clique em Configuração de back-end.

  6. Em Serviços de back-end e contentores de back-end, selecione Criar um serviço de back-end.

  7. Adicione um nome para o seu serviço de back-end, comomy-backend-service.

  8. Aceda à secção Segurança e, de seguida, selecione Ativar IAP para proteger o acesso às suas aplicações.

    O Cloud CDN e o IAP não são compatíveis. Se tiver o Cloud CDN ativado e selecionar a ativação do IAP, o Cloud CDN é desativado automaticamente.

  9. Clique em Criar. É apresentada a página Balanceamento de carga e o novo balanceador de carga é criado na lista de balanceadores de carga.

  10. Depois de a Google Cloud consola terminar a criação do novo balanceador de carga, clique no nome do balanceador de carga e tome nota do endereço IP externo em Detalhes > Front-end. Vai precisar dele no passo seguinte.

Configure o seu domínio para apontar para o balanceador de carga

Para configurar o seu domínio de modo a apontar para o equilibrador de carga, configure os registos A seguindo os passos abaixo:

  1. Inicie sessão na conta do seu domínio no anfitrião de domínio.
  2. Encontre a página para atualizar os registos de DNS do seu domínio. Esta página pode ter um nome semelhante a "Gestão de DNS", "Gestão do servidor de nomes" ou "Definições avançadas".
  3. Altere os seus registos A para os seguintes valores:
    • Nome/anfitrião/alias: @
    • Valor: o endereço IP externo do balanceador de carga que criou acima. Não inclua a porta :443 no seu registo DNS.
    • TTL: o valor predefinido da sua entidade de registo ou 86 400 (um dia).
  4. Aguarde até que o registo de DNS seja atualizado. A propagação do registo que acabou de adicionar pode demorar até um dia.
  5. Para testar o balanceador de carga, use um navegador de Internet para aceder ao seu domínio com um protocolo https://.
    • Se o balanceador de carga ainda não estiver configurado, são apresentados erros "HTTP 502".
    • Quando o balanceador de carga estiver pronto, é apresentada a mensagem "Pedido não autorizado".

Para saber mais, consulte o artigo Acerca dos registos A.

Reinicie as VMs

Para autenticar corretamente os pedidos do IAP, tem de reiniciar as VMs no MIG seguindo os passos abaixo:

  1. Na Google Cloud consola, aceda à página Compute Engine > Grupos de instâncias.
    ACEDA À PÁGINA GRUPOS DE INSTÂNCIAS
  2. Clique em my-managed-instance-group.
  3. Na parte superior dos detalhes do grupo de instâncias apresentados, clique em Reinício/substituição progressivo.
  4. Na página Reiniciar/substituir instâncias de my-managed-instance-group apresentada, defina os seguintes valores:
    • Operação: reiniciar
    • Máximo indisponível: 3 instâncias de 3 instâncias
    • Tempo de espera mínimo: 0 s
  5. Quando terminar de atualizar os valores, clique em Reiniciar.

Passo 5: configure as CNA

Configure a sua firewall

Em seguida, configure a firewall para bloquear o acesso às VMs subjacentes e permitir apenas o acesso através do IAP:

  1. Aceda à Google Cloud consola Rede da VPC > Regras de firewall.
    ACEDA À PÁGINA DE REGRAS DE FIREWALL
  2. Selecione a caixa de verificação junto às seguintes regras:
    • default-allow-http
    • default-allow-https
    • default-allow-internal
  3. Clique em Eliminar.
  4. Clique em Criar regra de firewall e defina os seguintes valores:
    • Nome: allow-iap-traffic
    • Segmentos: todas as instâncias na rede
    • Intervalos de IP de origem (prima Enter depois de colar cada valor na caixa). Os intervalos de IP estão na lista de autorizações porque é um pré-requisito para a comunicação do equilibrador de carga com os back-ends.
      • 130.211.0.0/22
      • 35.191.0.0/16
    • Protocolos e portas:
      • Protocolos e portas especificados
      • tcp:80
  5. Quando terminar de atualizar os valores, clique em Criar.

Configure a IAP

Para configurar as CAsI para o seu projeto, siga os passos abaixo:

  1. Na Google Cloud consola, aceda à página Segurança > Identity-Aware Proxy e selecione o projeto para o qual quer ativar o IAP.
    ACEDA À PÁGINA DO PROXY COM RECONHECIMENTO DE IDENTIDADE
  2. Se não tiver configurado o ecrã de consentimento OAuth do seu projeto, é-lhe pedido que o faça:

    1. Aceda ao ecrã de consentimento OAuth.
      Configure o ecrã de consentimento
    2. Em Email de apoio técnico, selecione o endereço de email que quer apresentar como contacto público. O endereço de email tem de pertencer à conta de utilizador com sessão iniciada atualmente ou a um grupo Google para o qual o utilizador com sessão iniciada atualmente seja um gestor ou proprietário.
    3. Introduza o nome da aplicação que quer apresentar.
    4. Adicione os detalhes opcionais que quiser.
    5. Clique em Guardar.

    Para alterar informações no ecrã de consentimento de OAuth mais tarde, como o nome do produto ou o endereço de email, repita os passos anteriores para configurar o ecrã de consentimento.

  3. Junto a my-backend-service,

  4. Na janela Ativar IAP apresentada, selecione a caixa de verificação junto a "Li os requisitos de configuração e configurei o meu recurso do Compute Engine de acordo com a documentação".

  5. Clique em Ativar.

Adicione responsáveis à lista de acesso

Em seguida, vai adicionar responsáveis à lista de acesso às IAP do seu projeto.

  1. No lado direito de IAM e administrador > Identity-Aware Proxy na secção Acesso, clique em Adicionar.
  2. Introduza os responsáveis aos quais quer conceder acesso, incluindo a si próprio, e atribua aos responsáveis a função Utilizador da app Web protegida pelo IAP. Os diretores podem ser:
    • Contas Google: user@gmail.com
    • Grupos Google: admins@googlegroups.com
    • Contas de serviço: server@example.gserviceaccount.com
    • Domínios do Google Workspace: example.com

Passo 6: teste as CNA

Para testar se as CNA estão a funcionar corretamente, siga os passos abaixo:

  1. No navegador de Internet, navegue para o seu domínio.
    1. Se vir a mensagem "Pedido não autorizado", tente novamente dentro de alguns minutos.
  2. Quando vir um ecrã de início de sessão do Google, inicie sessão com a Conta Google à qual concedeu acesso no passo anterior.
  3. Deve ver uma mensagem como "Olá, user@example.com. Sou my-managed-instance-group-29z6."
  4. Experimente atualizar a página. O navegador deve mostrar os nomes das 3 máquinas no seu grupo de instâncias gerido. Este é o balanceador de carga que distribui o tráfego pelas VMs no grupo.

Parabéns! Ativou com êxito um serviço com balanceamento de carga através do IAP.

Limpar

Para evitar incorrer em custos na sua conta do Google Cloud pelos recursos usados neste tutorial, elimine o projeto que contém os recursos ou mantenha o projeto e elimine os recursos individuais.

Depois de terminar a configuração das CAs para o Compute Engine, pode limpar os recursos que criou no Google Cloud para não receber faturação pelos mesmos no futuro. As secções seguintes descrevem como eliminar ou desativar estes recursos.

Eliminar o projeto

A forma mais fácil de eliminar a faturação é eliminar o projeto que criou para o tutorial.

Para eliminar o projeto:

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

Eliminar instâncias

Para eliminar uma instância do Compute Engine:

  1. In the Google Cloud console, go to the VM instances page.

    Go to VM instances

  2. Select the checkbox for the instance that you want to delete.
  3. To delete the instance, click More actions, click Delete, and then follow the instructions.

Eliminar regras de firewall para a rede predefinida

Para eliminar uma regra de firewall:

  1. In the Google Cloud console, go to the Firewall page.

    Go to Firewall

  2. Select the checkbox for the firewall rule that you want to delete.
  3. To delete the firewall rule, click Delete.

O que se segue?

  • Experimente modificar a app de exemplo que usámos neste tutorial para publicar outros dados.
  • Leia as práticas recomendadas para compreender como escrever as suas próprias apps e protegê-las com a IAP.