Nesta página, descrevemos como configurar e usar o Identity-Aware Proxy (IAP) encaminhamento de TCP com um endereço IP ou nome do host em um Google Cloud ou não-Google Cloud ambiente.
Visão geral
É possível usar a Google Cloud CLI para criar túneis para recursos usando um endereço IP particular ou nome do host do recurso. Se você tiver recursos externos em ambientes não-Google Cloud conectados a Google Cloud por meio do Cloud Interconnect ou de uma VPN, poderá usar o encaminhamento de TCP do IAP com esses recursos.
Antes de começar
Se você precisar criar um túnel para recursos externos Google Cloud, a conectividade híbrida precisará estar configurada. A conectividade híbrida é necessária para conectar seus recursos externos não-Google Cloud a Google Cloud. Para mais informações, consulte a documentação do Cloud Interconnect ou do Cloud VPN.
O Cloud Router precisa anunciar 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 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 Google Cloud projeto.
Para configurar o Cloud Router para anunciar o intervalo de IP do IAP-TCP 35.235.240.0/20, siga as instruções em Como anunciar intervalos de IP personalizados.
Os procedimentos a seguir fornecem exemplos da Google Cloud CLI para concluir as tarefas. Para informações sobre como interagir com grupos de destino usando as APIs, consulte Recurso REST: projects.iap_tunnel.locations.destGroups.
Criar um grupo de destino do túnel
Ao configurar um túnel, você especifica um grupo de destino do túnel a ser usado para verificações de permissão. Os grupos de destino do 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 nomes de domínio totalmente qualificados (FQDNs). Os grupos de destino podem se sobrepor para maior flexibilidade.
Ao criar um grupo de destino, é necessário 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, você precisa da permissão iap.tunnelDestGroups.create, que pode ser concedida pelo papel iap.tunnelDestGroupEditor. Para conceder um único
papel, consulte Conceder um único papel
na documentação do IAM.
Console
Acesse a página do IAP e selecione um projeto, se ainda não tiver selecionado um.
Na guia Recursos SSH e TCP, clique em Criar grupo de destino.
Insira um nome para o grupo. O nome do grupo pode conter apenas letras minúsculas (a-z) e traços (-).
Na lista suspensa, selecione a região em que o grupo de destino será criado.
Na seção Endereço IP , clique em Adicionar linha e insira os endereços IP ou FQDNs dos 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 FQDNs é uma lista de nomes de host separados por vírgulas, como
*.internal.company.com. É possível usar caracteres curinga com a entrada de FQDN.Clique em Criar grupo de destino.
gcloud
gcloud iap tcp dest-groups createYOUR_GROUP_NAME\ --region=REGION\ --ip-range-list=IP_RANGE_LIST\ --fqdn-list=FQDN_LIST
Substitua:
YOUR_GROUP_NAME: o nome do grupo. O nome do grupo pode conter apenas letras minúsculas (a-z) e traços (-).REGION: a região em que o grupo de destino será criado, comous-central1.IP_RANGE_LIST: opcional. A lista de intervalos de IP, que consiste em intervalos separados por vírgulas usando a notação CIDR, como10.1.2.0/24,172.0.0.0/8.FQDN_LIST: opcional. A lista de FQDNs é uma lista de nomes de host separados por vírgulas, como*.internal.company.com. Se uma entrada de FQDN tiver um prefixo curinga, ela vai corresponder a qualquer nome de host com o final especificado. Caso contrário, ela exigirá 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 tiver certeza de quais grupos já existem, execute o comando a seguir para listar os grupos:
gcloud iap tcp dest-groups list \
--region=REGION
Como gerenciar grupos de destino do túnel
É possível conferir os detalhes de um grupo de destino, modificar o grupo de destino e removê-lo.
Console
Acesse a página do IAP e clique na guia Recursos SSH e TCP.
Para conferir os detalhes de um grupo de destino, clique no nome do grupo de destino.
Para modificar um grupo de destino, selecione o grupo de destino e clique no ícone de lápis para abrir o painel Editar grupo de destino. Também é possível excluir o grupo de destino desse painel.
Para remover um grupo de destino, selecione o grupo de destino e clique no ícone da lixeira.
gcloud
Para detalhes 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 pelo papel iap.tunnelResourceAccessor.
Para configurar permissões em grupos de destino, você precisa da permissão iap.tunnelDestGroups.setIamPolicy, que pode ser concedida pelo papel iap.admin.
Console
Acesse a página do IAP.
Na guia Recursos SSH e TCP, selecione o grupo de destino para o qual você quer configurar permissões.
No painel que aparece, clique em Adicionar principal e insira um endereço de e-mail para o usuário.
Na seção Atribuir papéis, selecione um papel para atribuir ao principal.
Clique em Salvar.
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 do IAP necessário,
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 podem ser usados ao trabalhar com o IAP-TCP: start-iap-tunnel, ssh e scp.
Os comandos do IAP-TCP foram atualizados para oferecer suporte a túneis baseados em IP e FQDN. Para mudar para o endereço IP ou FQDN, faça o seguinte ao usar os comandos:
- Especifique um endereço IP ou FQDN em vez do nome da instância.
- Use
--regionem vez de--zone. - Use
--dest-grouppara especificar o grupo de destino a ser usado. - Use
--networkpara 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 o FQDN, ele precisará ser resolvido para o endereço IP particular do destino. A resolução de nomes é feita na 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 vm.corp.company.com em um endereço IP 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. É possível conferir a lista de nomes de rede
na página Redes VPC no Google Cloud console ou recuperar
a lista de nomes de rede executando o comando a seguir:
gcloud compute networks list --format='value(name)'
Exemplos
Os exemplos a seguir 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) no lugar do endereço IP.
Exemplo de SSH
Para iniciar uma sessão SSH em 172.16.1.2, execute o comando a seguir:
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.
Como --plain está implícito, não há tentativa de gerenciar e enviar chaves SSH automaticamente 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 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 estiver protegida por senha, será necessário inserir uma senha. Se a conta estiver protegida por um par de chaves SSH privadas ou públicas, especifique-o usando a 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 comando a seguir:
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 escutando a porta 8085 neste exemplo.
Depois de estabelecer um túnel, é possível usar qualquer ferramenta, como o PuTTY, para estabelecer uma conexão.
Exemplo de SCP
Para copiar um arquivo para 172.16.1.2 usando SCP, execute o comando a seguir:
gcloud compute scp file.txt 172.16.1.2:~/ \
--region=us-central1 \
--dest-group=DESTINATION_GROUP_NAME \
--network=default \
--tunnel-through-iap
Como --plain está implícito, não há tentativa de gerenciar e enviar chaves SSH automaticamente ao usar um endereço IP.
Exemplo de ProxyCommand SSH
Para usar o comando como um ProxyCommand que sempre cria 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' --region=us-central1 --dest-group=DESTINATION_GROUP_NAME --network=default --verbosity=warning
O ProxyCommand entra em vigor quando você executa o comando a seguir: ssh example
Também é possível configurar o ProxyCommand para processar muitos nomes de host, conforme mostrado no exemplo a seguir:
Host *.internal.company.com
ProxyCommand gcloud compute start-iap-tunnel '%h' '%p' --region=us-central1 --dest-group=DESTINATION_GROUP_NAME --network=default --verbosity=warning
O ProxyCommand entra em vigor quando você executa o comando a seguir: ssh example.internal.company.com