Configurar o encaminhamento de TCP do IAP com um endereço IP ou nome do host em um ambiente do Google Cloud ou de terceiros

Nesta página, descrevemos como configurar e usar o encaminhamento de TCP do Identity-Aware Proxy (IAP) com um recurso de endereço IP ou nome do host.

Para usar o encaminhamento de TCP do IAP com um recurso de endereço IP ou nome de host, você precisa ter uma licença do BeyondCorp Enterprise.

Informações gerais

É possível usar a Google Cloud CLI para criar túneis para recursos usando o endereço IP particular ou o nome do host do recurso. Se você tiver recursos externos que não são do Google Cloud conectados ao Google Cloud por meio do Cloud Interconnect ou de uma VPN, será possível usar o encaminhamento de TCP do IAP com esses recursos.

Antes de começar

Se você precisar encapsular recursos fora do Google Cloud, será necessário configurar a conectividade híbrida. A conectividade híbrida é necessária para conectar seus recursos externos que não são do Google Cloud ao Google Cloud. Para mais informações, consulte a documentação do Cloud Interconnect ou do Cloud VPN.

O roteador de nuvem precisa divulgar o intervalo de IP do IAP-TCP 35.235.240.0/20 para que os destinos enviem o tráfego de resposta de volta pelo Cloud VPN ou pelo Cloud Interconnect, e não pela Internet. Se você não tiver essa configuração, não será possível criar túneis para recursos externos ao seu projeto do Google Cloud.

Se quiser configurar o roteador de nuvem para divulgar o intervalo de IP 35.235.240.0/20 do IAP-TCP, siga as instruções em Como divulgar intervalos de IP personalizados.

Os procedimentos a seguir fornecem exemplos da gcloud para concluir as tarefas. Para saber mais sobre como interagir com grupos de destino usando as APIs, consulte Recurso REST: projects.iap_tunnel.locations.destGroups.

Como criar um grupo de destino de túnel

Ao configurar um túnel, você especifica um grupo de destino a ser usado para verificações de permissão. Os grupos de destino de túnel representam recursos que têm as mesmas restrições de acesso a túnel. É possível criar quantos grupos de destino quiser, cada um com qualquer número de intervalos de IP ou FQDN correspondentes. Os grupos de destino podem se sobrepor para proporcionar mais flexibilidade.

Ao criar um grupo de destino, é preciso especificar uma região. Para melhores resultados, a região especificada precisa corresponder ao local dos recursos de destino. Por exemplo, se os recursos estiverem conectados por uma VPN, use a região do gateway da VPN.

Para criar um grupo de destino, é necessário ter a permissão iap.tunnelDestGroups.create, que pode ser concedida com o papel iap.tunnelDestGroupEditor. Para fazer isso, consulte Conceder um único papel na documentação do IAM.

Console

  1. Acesse a página do IAP e selecione um projeto, caso ainda não tenha feito isso.

  2. Na guia Recursos SSH e TCP, clique em Criar grupo de destino.

  3. Digite um nome para o grupo. O nome do grupo pode conter apenas letras minúsculas (a-z) e traços (-).

  4. Na lista suspensa, selecione a região para criar o grupo de destino.

  5. Na seção Endereço IP, clique em Adicionar linha e insira os endereços IP ou os nomes de domínio totalmente qualificados (FQDN, na sigla em inglês) de recursos.

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

    Uma lista de FQDN é uma lista separada por vírgulas de nomes de host, como *.internal.company.com. É possível usar caracteres curinga com a entrada FQDN.

  6. Clique em Criar grupo de destino.

CLI da gcloud

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

Substitua:

  • YOUR_GROUP_NAME: o nome do grupo. O nome de um grupo pode conter apenas letras minúsculas (a-z) e traços (-).
  • REGION: a região em que o grupo de destino será criado, como us-central1.
  • IP_RANGE_LIST: opcional. A lista de intervalos de IP, que consiste em intervalos separados por vírgulas usando a notação CIDR, como 10.1.2.0/24,172.0.0.0/8.
  • FQDN_LIST: opcional. A lista FQDN é uma lista separada por vírgulas de nomes de host, como *.internal.company.com. Se uma entrada FQDN tiver um prefixo curinga, ela corresponderá a qualquer nome de host com a terminação especificada. Caso contrário, ela exige uma correspondência exata. Se uma solicitação corresponder a qualquer intervalo de IP ou FQDN, ela será considerada uma correspondência.

Se você não souber quais grupos já existem, execute o seguinte comando para listá-los:

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

Como gerenciar grupos de destino de túnel

Você pode ver os detalhes, modificar e remover um grupo de destino.

Console

  1. Acesse a página do IAP e clique na guia Recursos SSH e TCP.

    • Para ver os detalhes de um grupo de destino, clique no nome dele.

    • Para modificar um grupo de destino, selecione o grupo e clique no ícone de lápis para abrir o painel Editar grupo de destino. Você também pode excluir o grupo de destino desse painel.

    • Para remover um grupo de destino, selecione o grupo e clique no ícone de lixeira.

CLI da gcloud

Para saber mais sobre como gerenciar grupos de destino usando a CLI gcloud, consulte comandos gcloud do grupo de destino.

Como configurar permissões de túnel

Para criar um túnel, você precisa ter a permissão iap.tunnelDestGroups.accessViaIAP no grupo de destino relevante. É possível conceder a permissão usando o papel iap.tunnelResourceAccessor.

Para configurar permissões em grupos de destinos, você precisa ter a permissão iap.tunnelDestGroups.setIamPolicy, que pode ser concedida pelo papel iap.admin.

Console

  1. Acesse a página do IAP.

  2. Na guia Recursos SSH e TCP, selecione o grupo de destino para o qual você quer configurar permissões.

  3. No painel que é aberto, clique em Adicionar principal e insira um endereço de e-mail para o usuário.

  4. Na seção Atribuir papéis, selecione um papel para atribuir ao principal.

  5. Clique em Save.

CLI da gcloud

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

Substitua:

  • MEMBER: o endereço de e-mail do usuário, como user:exampleuser@company.com.
  • ROLE: o papel necessário do IAP, roles/iap.tunnelResourceAccessor.
  • GROUP_NAME: o nome do grupo de destino.
  • REGION: o nome da região, como us-central1.

Noções básicas sobre o uso do túnel

Há três comandos da CLI gcloud que você pode usar ao trabalhar com o IAP-TCP: start-iap-tunnel, ssh e scp.

Os comandos do IAP-TCP foram atualizados para oferecer suporte a encapsulamento baseado em IP e FQDN. Para mudar para o endereço IP ou FQDN, siga estas etapas ao usar os comandos:

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

O endereço IP especificado precisa ser particular do destino. Não é possível usar o IAP-TCP com endereços IP públicos. Se você usar o FQDN, ele precisará ser resolvido para o endereço IP particular do destino. Observe que a resolução de nome é feita dentro da rede VPC especificada, não na rede do cliente. Por exemplo, se você estiver tentando criar um túnel para vm.corp.company.com, a etapa que converte o vm.corp.company.com em um endereço IP vai acontecer no contexto da rede VPC.

A região especificada precisa corresponder à região do grupo de destino.

A rede especificada precisa corresponder ao nome da rede VPC que tem acesso ao destino. Um nome de rede típico é default. Veja a lista de nomes de rede na página de redes VPC no console do Google Cloud ou recupere a lista de nomes de redes executando o seguinte comando:

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

Examples

Os exemplos a seguir usam um endereço IP de exemplo de 172.16.1.2. Também é possível usar um FQDN (por exemplo, example.internal.company.com) em cada comando no lugar 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.

Observe que --plain está implícito, portanto, não há tentativa de gerenciar e enviar automaticamente as chaves SSH quando um endereço IP é usado.

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

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 você quiser fazer login como um usuário 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 for protegida por senha, você precisará digitar a senha. Se a conta estiver protegida por um par de chaves SSH privadas ou públicas, especifique-a usando a sinalização -- -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

A máquina de destino precisa estar detectando a porta 8085 neste exemplo.

Depois de estabelecer um túnel, você pode usar qualquer ferramenta, como PuTTy, para estabelecer uma conexão.

Exemplo de SCP

Para inserir um arquivo SCP em 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

Observe que --plain está implícito, portanto, não há tentativa de gerenciar e enviar automaticamente as chaves SSH quando um endereço IP é usado.

Exemplo de SSH ProxyCommand

Para usar o comando como um ProxyCommand que sempre faz a túneis para 172.16.1.2, adicione uma entrada à configuração ~/.ssh/config ou equivalente, conforme mostrado no exemplo a seguir:

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 você executa o seguinte comando: ssh example

Você também pode configurar o ProxyCommand para processar vários nomes de host, conforme mostrado no exemplo a seguir:

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 você executa o seguinte comando: ssh example.internal.company.com