Nesta página, descrevemos como configurar e usar o encaminhamento de TCP do Identity-Aware Proxy (IAP) com um endereço IP ou recurso de 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.
Informações gerais
É possível usar a Google Cloud CLI para criar túneis para recursos usando o endereço IP privado ou o nome do host do recurso. Se você tiver recursos externos que não sejam do Google Cloud 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 um túnel para recursos fora do Google Cloud, precisará ter conectividade híbrida configurada. 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 Cloud VPN.
Seu 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 projeto do Google Cloud.
Para configurar o Cloud Router de modo a divulgar o intervalo de IP do IAP-TCP 35.235.240.0/20
, siga as instruções em Como divulgar intervalos de IP personalizados.
Os procedimentos a seguir fornecem exemplos do gcloud 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.
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 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 ter mais flexibilidade.
Ao criar um grupo de destino, você precisa especificar uma região. Para conseguir os 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 só pode conter 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 pelo 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 comando de exemplo:
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. Um nome de 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írgula usando a 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 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 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 seguinte comando para listar os grupos:
gcloud iap tcp dest-groups list \ --region=REGION
Consulte comandos 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 destinos, você precisa 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 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 de IAP obrigató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 IAP-TCP: start-iap-tunnel, ssh e scp.
Os comandos IAP-TCP foram atualizados para serem compatíveis com encapsulamento baseado em IP e FQDN. Para alternar para 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
--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 que você especificar 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 de dentro da rede VPC que você especificar, não da 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 acontece 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 visualizar a lista de nomes de rede na página de redes VPC no Console do Google Cloud ou recuperar a lista de nomes de rede 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
. 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.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 chaves SSH ao usar um endereço IP.
Se você receber o erro Permission denied (publickey)
, isso significa que 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, como 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 fomat 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 uma senha. Se a conta estiver protegida por um par de chaves SSH privada ou pública, você precisará especificá-la 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
Observe que a máquina de destino precisa estar ouvindo a porta 8085
neste exemplo.
Depois de estabelecer um túnel, você pode usar qualquer ferramenta, como o PuTTy, para estabelecer uma conexão.
Exemplo de SCP
Para SCP de um arquivo 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
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 ProxyCommand SSH
Para usar o comando como um ProxyCommand que sempre faz o túnel para 172.16.1.2
, adicione uma entrada à sua 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
Também é possível configurar o ProxyCommand para lidar com muitos nomes de host, como 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