Como usar o encaminhamento de TCP do IAP com um endereço IP ou nome de host

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 endereço IP ou recurso de nome do host, você precisa ter uma licença do BeyondCorp Enterprise.

Visão geral

É possível usar a CLI do Google Cloud para criar túneis para endpoints. Para isso, use o nome do host ou o endereço IP particular do endpoint. Se você tiver recursos externos (no local ou em outras nuvens) conectados ao Google Cloud por meio do Cloud Interconnect ou de uma VPN, use o encaminhamento de TCP do IAP com esses recursos.

Antes de começar

Se você precisar criar túneis para recursos fora do Google Cloud, precisará ter a conectividade híbrida configurada. A conectividade híbrida é necessária para conectar seus recursos externos (no local ou outras nuvens) ao Google Cloud. Para mais informações, consulte a documentação do Cloud Interconnect ou Cloud VPN.

O Cloud Router 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, 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 seu Cloud Router para anunciar o intervalo de IP do IAP-TCP, 35.235.240.0/20, siga as instruções em Como divulgar intervalos de IP personalizados.

Como criar um grupo de destino de túnel

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

Ao criar um grupo de destino, você precisa 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. O nome do grupo de destino pode conter somente letras minúsculas (a-z) e traços (-)

Para criar um grupo de destino, você precisa ter a permissão iap.tunnelDestGroups.create, que pode ser concedida por meio do papel iap.tunnelDestGroupEditor. Para conceder um único papel, consulte Conceder um único papel na documentação do IAM.

Para criar um grupo de destino, execute o seguinte exemplo de comando:

gcloud alpha iap tcp dest-groups create your-group-name \
    --region=REGION \
    --ip-range-list=IP_RANGE_LIST \
    --fqdn-list=FQDN_LIST
    

Substitua:

  • REGION: a região onde criar o grupo de destino, como us-central1.
  • IP_RANGE_LIST: 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: a lista FQDN é uma lista separada por vírgulas de nomes do host, como *.internal.company.com. Se uma entrada FQDN tiver um prefixo de caractere 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 não tiver certeza de quais grupos já existem, execute o seguinte comando para listá-los:

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

Consulte Comandos da gcloud do grupo de destino para uma visão geral de como gerenciar grupos 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 por meio do papel iap.tunnelResourceAccessor.

Para configurar permissões em grupos de destino, é necessário ter a permissão iap.tunnelDestGroups.setIamPolicy, que pode ser concedida por meio do papel iap.admin.

Para conceder permissões, execute o seguinte exemplo de comando:

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

Substitua:

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

Como entender o uso do túnel

Existem três comandos da CLI gcloud que podem ser usados ao trabalhar com IAP-TCP: start-iap-tunnel, ssh e scp.

As versões Alfa dos comandos IAP-TCP foram atualizadas para oferecer compatibilidade com o encapsulamento baseado em IP e FQDN. Para alternar para endereço IP ou FQDN, faça o seguinte ao usar os comandos:

  • Especifique gcloud alpha em vez de gcloud.
  • 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 o endereço IP particular do destino. Não é possível usar o IAP-TCP com endereços IP públicos. Se você usar FQDN, ele precisará ser resolvido para o endereço IP particular do destino. Observe que a resolução do nome é feita dentro da rede VPC que você especificar, 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 vm.corp.company.com em um endereço IP ocorrerá no contexto da rede VPC, e não na rede local.

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. É possível ver a lista de nomes de rede na página "Redes VPC" no Console do Google Cloud ou recuperar 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.1.2.3. Cada comando também pode usar um FQDN (por exemplo, example.internal.company.com) no lugar do endereço IP.

Exemplo de SSH

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

gcloud alpha compute ssh 172.1.2.3 \
    --region=us-central1 \
    --dest-group=your-group-name \
    --network=default \
    --tunnel-through-iap
    

Observe que --plain está implícito. Portanto, não há tentativa de gerenciar e enviar automaticamente chaves SSH ao usar um endereço IP.

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 -- -i ~/.ssh/google_compute_engine como um parâmetro para o comando SSH:

gcloud alpha compute ssh 172.1.2.3 \
    --region=us-central1 \
    --dest-group=your-group-name \
    --network=default \
    --tunnel-through-iap \
    -- -i ~/.ssh/google_compute_engine
    

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.1.2.3:8085, execute o seguinte comando:

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

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

Exemplo de SCP

Para SCP de um arquivo para 172.1.2.3, execute o seguinte comando:

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

Observe que --plain está implícito. Portanto, não há tentativa de gerenciar e enviar automaticamente chaves SSH ao usar um endereço IP.

Exemplo de SSHCommandCommand SSH

Para usar o comando como um ProxyCommand que sempre encapsula para 172.1.2.3, adicione uma entrada à configuração ~/.ssh/config ou equivalente, como mostrado no exemplo a seguir:

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

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

Também é possível configurar o ProxyCommand para gerenciar muitos nomes de host, como mostrado no exemplo a seguir:

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

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