Configure o encaminhamento TCP de IAP com um endereço IP ou um nome do anfitrião num ambiente Google Cloud ou não Google Cloud

Esta página descreve como configurar e usar o encaminhamento TCP do Identity-Aware Proxy (IAP) com uma funcionalidade de endereço IP ou nome de anfitrião.

Vista geral

Pode usar a CLI do Google Cloud para criar túneis para recursos através do endereço IP privado ou do nome do anfitrião do recurso. Se tiver recursos externos que não estejamGoogle Cloud ligados Google Cloud através do Cloud Interconnect ou de uma VPN, pode usar o encaminhamento TCP do IAP com esses recursos.

Antes de começar

Se precisar de criar um túnel para recursos fora de Google Cloud, tem de ter a conetividade híbrida configurada. É necessária uma conetividade híbrida para ligar os seus recursos externos que não sejam da Google Cloud aGoogle Cloud.Google Cloud Para mais informações, consulte a documentação do Cloud Interconnect ou do Cloud VPN.

O seu router na nuvem tem de anunciar o intervalo de IPs IAP-TCP 35.235.240.0/20, para que os destinos enviem tráfego de resposta através do Cloud VPN ou Cloud Interconnect e não através da Internet. Se não tiver esta configuração, não pode criar túneis para recursos externos ao seu projeto do Google Cloud .

Para configurar o router na nuvem para anunciar o intervalo de IPs IAP-TCP 35.235.240.0/20, siga as instruções em Anunciar intervalos de IPs personalizados.

Os procedimentos seguintes fornecem exemplos do gcloud para concluir as tarefas. Para obter informações sobre como interagir com grupos de destinos através das APIs, consulte o recurso REST: projects.iap_tunnel.locations.destGroups

Criar um grupo de destinos de túnel

Quando configura um túnel, especifica um grupo de destino a usar para verificações de autorização. Os grupos de destinos de túnel representam recursos que têm as mesmas restrições de acesso ao túnel. Pode criar qualquer número de grupos de destino, cada um com qualquer número de intervalos de IP ou FQDN correspondentes. Os grupos de destinos podem sobrepor-se para maior flexibilidade.

Quando cria um grupo de destinos, tem de especificar uma região. Para obter os melhores resultados, a região especificada deve corresponder à localização dos recursos de destino. Por exemplo, se os recursos estiverem ligados por uma VPN, deve usar a região do gateway de VPN.

Para criar um grupo de destinos, tem de ter a autorização iap.tunnelDestGroups.create, que pode conceder através da função iap.tunnelDestGroupEditor. Para conceder uma única função, consulte o artigo Conceda uma única função na documentação do IAM.

Consola

  1. Aceda à página de IAPs e selecione um projeto, se ainda não tiver sido selecionado.

  2. No separador Recursos de SSH e TCP, clique em Criar grupo de destino.

  3. Introduza um nome para o nome do grupo. O nome do grupo só pode conter letras minúsculas (a-z) e travessões (-).

  4. Na lista pendente, selecione a região na qual quer criar o grupo de destino.

  5. Na secção Endereço IP, clique em Adicionar linha e, de seguida, introduza os endereços IP ou os nomes de domínio totalmente qualificados (FQDN) dos recursos.

    Um intervalo de IPs consiste em intervalos separados por vírgulas que usam a notação CIDR, como 10.1.2.0/24,172.0.0.0/8.

    Uma lista de FQDNs é uma lista de nomes de anfitriões separados por vírgulas, como *.internal.company.com. Pode usar carateres universais com a sua entrada FQDN.

  6. Clique em Criar grupo de destinos.

CLI gcloud

gcloud iap tcp dest-groups create YOUR_GROUP_NAME \
  --region=REGION \
  --ip-range-list=IP_RANGE_LIST \
  --fqdn-list=FQDN_LIST

Substitua o seguinte:

  • YOUR_GROUP_NAME: o nome do seu grupo. Um nome de grupo só pode conter letras minúsculas (a-z) e travessões (-).
  • REGION: a região na qual criar o grupo de destino, como us-central1.
  • IP_RANGE_LIST: opcional. A lista de intervalos de IP, que consiste em intervalos separados por vírgulas através da notação CIDR, como 10.1.2.0/24,172.0.0.0/8.
  • FQDN_LIST: opcional. A lista de FQDNs é uma lista separada por vírgulas de nomes de anfitriões, como *.internal.company.com. Se uma entrada FQDN tiver um prefixo de carater universal, corresponde a qualquer nome de anfitrião com o final especificado. Caso contrário, é necessária uma correspondência exata. Se um pedido corresponder a qualquer intervalo de IP ou FQDN, é considerado uma correspondência.

Se não tiver a certeza dos grupos que já existem, execute o seguinte comando para os listar:

gcloud iap tcp dest-groups list \
  --region=REGION

Gerir grupos de destinos de túneis

Pode ver os detalhes de um grupo de destino, modificá-lo e removê-lo.

Consola

  1. Aceda à página IAP e clique no separador Recursos SSH e TCP.

    • Para ver os detalhes de um grupo de destinos, clique no nome do grupo de destinos.

    • Para modificar um grupo de destinos, selecione o grupo de destinos e, de seguida, clique no ícone de lápis para abrir o painel Editar grupo de destinos. Também pode eliminar o grupo de destinos a partir deste painel.

    • Para remover um grupo de destinos, selecione o grupo de destinos e, de seguida, clique no ícone do caixote do lixo.

CLI gcloud

Para ver detalhes sobre como gerir grupos de destino através da CLI gcloud, consulte os comandos gcloud do grupo de destino.

Configurar autorizações de túnel

Para criar um túnel, tem de ter a autorização iap.tunnelDestGroups.accessViaIAP no grupo de destino relevante. Pode conceder a autorização através da função iap.tunnelResourceAccessor.

Para configurar autorizações em grupos de destinos, tem de ter a autorização iap.tunnelDestGroups.setIamPolicy, que pode conceder através da função iap.admin.

Consola

  1. Aceda à página de compras na app.

  2. No separador Recursos de SSH e TCP, selecione o grupo de destino para o qual quer configurar autorizações.

  3. No painel apresentado, clique em Adicionar principal e introduza um endereço de email para o utilizador.

  4. Na secção Atribuir funções, selecione uma função para atribuir ao principal.

  5. Clique em Guardar.

CLI gcloud

gcloud iap tcp dest-groups add-iam-policy-binding \
  --member=MEMBER \
  --role=ROLE \
  --dest-group=GROUP_NAME \
  --region=REGION

Substitua o seguinte:

  • MEMBER: o endereço de email do utilizador, como user:exampleuser@company.com.
  • ROLE: a função de CNA necessária, roles/iap.tunnelResourceAccessor.
  • GROUP_NAME: o nome do grupo de destino.
  • REGION: o nome da região, como us-central1.

Compreender a utilização de túneis

Existem três comandos da CLI gcloud que pode usar quando trabalha com o IAP-TCP: start-iap-tunnel, ssh e scp.

Os comandos IAP-TCP foram atualizados para suportar o tunneling baseado em IP e FQDN. Para mudar para o endereço IP ou o FQDN, faça o seguinte quando usar os comandos:

  • Especifique um endereço IP ou um FQDN em vez do nome da instância.
  • Use --region em vez de --zone.
  • Use --dest-group para especificar o grupo de destino a usar.
  • Use --network para especificar o nome da rede VPC a usar.

O endereço IP que especificar tem de ser o endereço IP privado do destino. Não pode usar o IAP-TCP com endereços IP públicos. Se usar o FQDN, tem de ser resolvido para o endereço IP privado do destino. Tenha em atenção que a resolução de nomes é feita a partir da rede VPC que especificar e não a partir da rede do cliente. Por exemplo, se estiver a tentar criar um túnel para vm.corp.company.com, o passo que converte vm.corp.company.com num endereço IP ocorre no contexto da rede de VPC.

A região que especificar tem de corresponder à região do grupo de destino.

A rede que especificar tem de corresponder ao nome da rede VPC que tem acesso ao destino. Um nome de rede típico é default. Pode ver a lista de nomes de redes na página de redes VPC na Google Cloud consola ou pode obter a lista de nomes de redes executando o seguinte comando:

gcloud compute networks list --format='value(name)'

Exemplos

Os exemplos seguintes usam um endereço IP de exemplo de 172.16.1.2. Cada comando também pode usar um FQDN (por exemplo, example.internal.company.com) em vez do endereço IP.

Exemplo de SSH

Para iniciar uma sessão SSH para 172.16.1.2, execute o seguinte comando:

gcloud compute ssh 172.16.1.2 \
    --region=us-central1 \
    --dest-group=DESTINATION_GROUP_NAME \
    --network=default \
    --tunnel-through-iap

Substitua DESTINATION_GROUP_NAME pelo nome do grupo de destino.

Tenha em atenção que --plain está implícito, pelo que não existe qualquer tentativa de gerir e enviar automaticamente chaves SSH quando usa um endereço IP.

Se receber o erro Permission denied (publickey), o comando não encontrou o ficheiro que contém as chaves SSH. Para resolver este problema, adicione o caminho para o ficheiro que contém as chaves privadas SSH como um parâmetro para o comando SSH, conforme mostrado no exemplo seguinte:

gcloud compute ssh 172.16.1.2 \
    --region=us-central1 \
    --dest-group=DESTINATION_GROUP_NAME \
    --network=default \
    --tunnel-through-iap \
    -- -i ~/.ssh/google_compute_engine

Substitua DESTINATION_GROUP_NAME pelo nome do grupo de destino.

Se quiser iniciar sessão como um utilizador específico, use o formato USER@IP em vez de especificar apenas o IP:

gcloud compute ssh user@172.16.1.2 \
    --region=us-central1 \
    --dest-group=DESTINATION_GROUP_NAME \
    --network=default \
    --tunnel-through-iap

Se a conta estiver protegida por palavra-passe, tem de introduzir uma palavra-passe. Se a conta estiver protegida por um par de chaves SSH privadas ou públicas, tem de o especificar através da flag -- -i, conforme especificado acima.

Exemplo de túnel

Para estabelecer um túnel para uma porta TCP diferente, use o comando start-iap-tunnel. Para criar um túnel de localhost:8022 para a porta 172.16.1.2:8085, execute o seguinte comando:

gcloud compute start-iap-tunnel 172.16.1.2 8085 \
    --local-host-port=localhost:8022 \
    --region=us-central1 \
    --dest-group=destination-group-name \
    --network=default

Tenha em atenção que a máquina de destino tem de estar a ouvir a porta 8085 neste exemplo.

Depois de estabelecer um túnel, pode usar qualquer ferramenta, como o PuTTy, para estabelecer uma ligação.

Exemplo de SCP

Para SCP um ficheiro para 172.16.1.2, execute o seguinte comando:

gcloud compute scp file.txt 172.16.1.2:~/ \
    --region=us-central1 \
    --dest-group=destination-group-name \
    --network=default \
    --tunnel-through-iap

Tenha em atenção que --plain está implícito, pelo que não existe qualquer tentativa de gerir e enviar automaticamente chaves SSH quando usa um endereço IP.

Exemplo de SSH ProxyCommand

Para usar o comando como um ProxyCommand que encaminha sempre para 172.16.1.2, adicione uma entrada à sua configuração ~/.ssh/config ou equivalente, conforme mostrado no exemplo seguinte:

Host example
ProxyCommand gcloud compute start-iap-tunnel 172.16.1.2 '%p' \
    --listen-on-stdin \
    --region=us-central1 \
    --dest-group=destination-group-name \
    --network=default \
    --verbosity=warning
  

O ProxyCommand entra em vigor quando executa o seguinte comando: ssh example

Também pode configurar o ProxyCommand para processar muitos nomes de anfitriões, como mostrado no exemplo seguinte:

Host *.internal.company.com
ProxyCommand gcloud compute start-iap-tunnel '%h' '%p' 
--listen-on-stdin
--region=us-central1
--dest-group=destination-group-name
--network=default --verbosity=warning

O ProxyCommand entra em vigor quando executa o seguinte comando: ssh example.internal.company.com