Nesta página, explicamos como usar o encaminhamento de TCP do Identity-Aware Proxy (IAP) para ativar o acesso administrativo a instâncias de VM sem IP externo endereços IP ou não permitem acesso direto pela Internet.
O encaminhamento IAP para TCP permite estabelecer um túnel criptografado sobre o qual você pode encaminhar SSH, RDP e outro tráfego para instâncias de VM. O encaminhamento IAP para TCP também fornece controle refinado sobre quais usuários têm permissão para estabelecer túneis e em quais instâncias de VM os usuários têm permissão para se conectar.
Para saber mais sobre como o encaminhamento TCP para IAP funciona, consulte a Visão geral do encaminhamento TCP.
Como preparar seu projeto para encaminhamento TCP para IAP
Esta seção mostra as etapas necessárias para ativar o encaminhamento IAP para TCP no seu projeto do Google Cloud.
Criar uma regra de firewall
Para permitir que o IAP se conecte às suas instâncias da VM, crie uma regra de firewall que:
- aplica-se a todas as instâncias da VM que você quer que sejam acessíveis usando o IAP.
- permite o tráfego de entrada do intervalo de IP
35.235.240.0/20
. Esse intervalo contém todos os endereços IP que o IAP usa para o encaminhamento de TCP. - permite conexões com todas as portas que você quer que sejam acessíveis usando o encaminhamento IAP para TCP, por exemplo, porta
22
para SSH e porta3389
para RDP.
Console
Para permitir acesso RDP e SSH a todas as instâncias de VM na sua rede, faça o seguinte:
- Abra a página Regras de firewall.
Abrir a página "Regras de firewall"
As etapas restantes aparecem no console do Google Cloud.
- Selecione um projeto do Google Cloud.
- Na página "Regras de firewall", clique em
Criar regra de firewall . - Defina as configurações a seguir:
- Nome:
allow-ingress-from-iap
- Direção do tráfego: entrada
- Destino: todas as instâncias na rede
- Filtro de origem: IP ranges
- Intervalos de IP de origem:
35.235.240.0/20
- Protocolos e portas: selecione TCP e insira
22,3389
para permitir RDP e SSH.
- Nome:
- Clique em Criar.
gcloud
Para permitir acesso RDP a todas as instâncias de VM na sua rede, execute:
gcloud compute firewall-rules create allow-rdp-ingress-from-iap \ --direction=INGRESS \ --action=allow \ --rules=tcp:3389 \ --source-ranges=35.235.240.0/20
Para acesso SSH, execute:
gcloud compute firewall-rules create allow-ssh-ingress-from-iap \ --direction=INGRESS \ --action=allow \ --rules=tcp:22 \ --source-ranges=35.235.240.0/20
Para outros protocolos, execute
gcloud compute firewall-rules create allow-ingress-from-iap \ --direction=INGRESS \ --action=allow \ --rules=tcp:PORT \ --source-ranges=35.235.240.0/20
onde PORT
é a porta usada pelo protocolo.
Conceder papéis para o encaminhamento TCP do IAP
Para controlar quais usuários e grupos podem usar o encaminhamento de TCP do IAP e a quais instâncias de VM eles podem se conectar, conceda as funções de gerenciamento de identidade e acesso (IAM) adequadas no projeto.
Se você estiver usando o Login do SO (recomendado), consulte Como configurar papéis de Login do SO em contas de usuário.
A tabela a seguir mostra os papéis predefinidos que você precisa conceder a administradores confiáveis para encaminhamento TCP e tarefas relacionadas:
Tarefa | Papéis | Mais informações |
---|---|---|
Encaminhamento do TCP |
Usuário do túnel protegido pelo IAP (roles/iap.tunnelResourceAccessor )
|
Consulte Conceder acesso a todas as instâncias de VM em um projeto ou Conceder acesso a uma VM específica. |
Acesso SSH |
Administrador de instâncias do Compute (v1) (roles/compute.instanceAdmin.v1 )
|
|
Usar uma conta de serviço | Usuário da conta de serviço (roles/iam.serviceAccountUser ) |
Consulte O papel serviceAccountUser. |
Se você quiser criar papéis personalizados com apenas as permissões específicas necessárias para essa tarefa, consulte Detalhes das permissões.
Você pode conceder a um usuário ou grupo acesso a todas as instâncias de VM em um projeto ou a uma VM específica, dependendo de como você concede os papéis necessários.
As tags não são compatíveis
No momento, não é possível conceder permissões usando tags para o encaminhamento de TCP do IAP.
Conceder acesso a todas as instâncias de VM em um projeto
Você pode conceder a um usuário ou grupo acesso a todas as instâncias de VM em um projeto concedendo os papéis do IAM necessários no nível do projeto:
Console
- Abra a página IAM e administrador no console do Google Cloud.
Abra o IAM e Página Administrador
As etapas restantes aparecem no console do Google Cloud.
- Na página IAM e administrador, clique em Adicionar e configure o seguinte:
- Novos principais: especifique o usuário ou grupo que você quer conceder acesso.
- Selecione uma função: selecione Cloud IAP > Usuário de túnel protegido por IAP.
- Também é possível clicar em Adicionar condição e configurar uma condição:
- Título: digite um nome para a condição.
- Expressão: insira uma condição que um usuário precise atender para receber as permissões no papel de usuário do túnel protegido pelo IAP.
Por exemplo, a expressão CEL a seguir concede acesso apenas à porta 22:
destination.port == 22
Também é possível conceder acesso com base no nível de acesso:
destination.port == 22 && "FULL_ACCESS_LEVEL_NAME" in request.auth.access_levels
Em que
FULL_ACCESS_LEVEL_NAME
é um nível de acesso existente e usa o formato a seguir:accessPolicies/POLICY_NAME/accessLevels/ACCESS_LEVEL_NAME
- Clique em Adicionar outro papel e faça as seguintes configurações:
- Selecionar um papel Selecione Compute Engine > Administrador da instância do Compute (v1).
- Clique em Save.
gcloud
Execute os seguintes comandos para conceder os dois papéis ao usuário:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=user:EMAIL \ --role=roles/iap.tunnelResourceAccessor gcloud projects add-iam-policy-binding PROJECT_ID \ --member=user:EMAIL \ --role=roles/compute.instanceAdmin.v1
Substitua:
PROJECT_ID
: ID do projetoEMAIL
: endereço de e-mail do usuário ao qual você quer conceder acesso, por exemplouser@example.com
.
Conceder acesso a uma VM específica
Para conceder a um usuário ou grupo acesso a uma VM específica, conceda
roles/iap.tunnelResourceAccessor
na VM. Os outros papéis precisam ser
concedidas no projeto.
Console
- Abra a página de administração do IAP e selecione a guia Recursos SSH e TCP.
Abra a página de administração do IAP
As etapas restantes aparecem no console do Google Cloud.
- Na guia Recursos de SSH e TCP da página de administrador do IAP, selecione as instâncias de VM que você quer configurar.
- Clique em Mostrar painel de informações se ele não estiver visível.
Clique em Adicionar principal e configure o seguinte:
- Novos principais: especifique o usuário ou grupo que você quer conceder acesso.
- Selecione uma função: selecione Cloud IAP > Usuário de túnel protegido por IAP.
Também é possível clicar em Adicionar condição e configurar uma condição:
- Título: digite um nome para a condição.
- Expressão: insira uma condição que um usuário precise atender para receber as permissões no papel de usuário do túnel protegido pelo IAP.
Por exemplo, a expressão CEL a seguir concede acesso apenas à porta 22:
destination.port == 22
Também é possível conceder acesso com base no nível de acesso:
destination.port == 22 && "FULL_ACCESS_LEVEL_NAME" in request.auth.access_levels
Onde
FULL_ACCESS_LEVEL_NAME
é um nível de acesso existente e usa o formatoaccessPolicies/POLICY_NAME/accessLevels/ACCESS_LEVEL_NAME
.- Clique em Salvar.
API
Para editar o arquivo policy.json
do aplicativo, siga o processo abaixo.
Consulte Como gerenciar o acesso a recursos protegidos pelo IAP
para mais informações sobre como usar a API do IAM para gerenciar
políticas de acesso.
Exporte as seguintes variáveis.
export IAP_BASE_URL=https://iap.googleapis.com/v1/projects/PROJECT_NUMBER/iap_tunnel # Replace POLICY_FILE.JSON with the name of JSON file to use for setIamPolicy export JSON_NEW_POLICY=POLICY_FILE.JSON
Consiga a política do IAM para a instância do Compute Engine usando o método
getIamPolicy
. O bit de dados vazio no final transforma a solicitaçãocurl
em POST em vez de GET.curl -i -H "Authorization: Bearer $(gcloud auth print-access-token)" \ ${IAP_BASE_URL}/zones/ZONE_NAME/instances/INSTANCE_ID or INSTANCE_NAME:getIamPolicy \ -d ''
Conceda o papel
iap.tunnelResourceAccessor
aos principais ao modificando o arquivo JSON da política do IAM.Opcionalmente, conceda o papel apenas aos principais que atendem a requisitos de acordo com os critérios de IAM Condições e níveis de acesso.
Confira a seguir um exemplo de um arquivo
policy.json
editado que concede o papeliap.tunnelResourceAccessor
a um grupo de administradores da instância de VM, concedendo acesso a recursos de túnel protegidos pelo IAP. Uma condição do IAM foi adicionada para tornar os recursos acessíveis apenas aos principais no grupo de administradores da instância de VM com um endereço IP privado10.0.0.1
na porta22
usando as condições do IAMdestination.ip
edestination.port
. Eles também precisam atender aos requisitos do nível de acesso ACCESS_LEVEL_NAME.Se um principal tiver o papel de proprietário, ele terá permissão para usar o IAP para encaminhamento de TCP.
Exemplo de arquivo policy.json{ "policy": { "bindings": [ { "role": "roles/iap.tunnelResourceAccessor", "members": ["group:instance-admins@example.com"], "condition": { "expression": "\"accessPolicies/POLICY_NAME/accessLevels/ACCESS_LEVEL_NAME\" in request.auth.access_levels && destination.ip == \"10.0.0.1\" && destination.port == 22", "title": "CONDITION_NAME" } } ] } }
Para encontrar o nome de uma política, chame
accessPolicies.list
:GET https://accesscontextmanager.googleapis.com/v1/accessPolicies
Defina seu novo arquivo
policy.json
usando o métodosetIamPolicy
.curl -i -H "Content-Type:application/json" \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ ${IAP_BASE_URL}/zones/ZONE_NAME/instances/INSTANCE_ID or INSTANCE_NAME:setIamPolicy \ -d @${JSON_NEW_POLICY}
Detalhes das permissões
As permissões necessárias variam dependendo de como um usuário usará o encaminhamento de TCP do IAP:
Cenários | Permissões necessárias | |
---|---|---|
Tudo |
|
|
Como usar o gcloud compute [start-iap-tunnel, ssh, scp] |
|
|
Como usar o gcloud compute [ssh, scp] |
|
|
VM que usa o Login do SO | Consulte estas instruções | |
Sem usar o Login do SO |
|
|
SSH para VM usando uma conta de serviço |
|
|
SSH do navegador | Consulte estas instruções |
Por exemplo, se um usuário quiser se conectar usando gcloud compute ssh
a uma VM que não usa o login do SO, mas usa uma conta de serviço, ele precisará das seguintes permissões:
iap.tunnelInstances.accessViaIAP
compute.instances.get
compute.instances.list
compute.projects.get
compute.instances.setMetadata
compute.projects.setCommonInstanceMetadata
compute.globalOperations.get
iam.serviceAccounts.actAs
Como fazer tunelamento de conexões SSH
É possível conectar-se a instâncias do Linux que não têm um endereço IP externo encapsulando o tráfego SSH por meio do IAP.
Ao usar o encapsulamento do IAP, os proxies do IAP conectam-se ao endereço IPv4 interno principal de nic0
na VM.
Console
Para se conectar à sua instância, use o botão SSH na Console do Google Cloud. A configuração de acesso da instância (definida por meio de permissões do IAM) precisa permitir o tunelamento de TCP por meio do IAP.
gcloud
Para se conectar à instância, use o comando gcloud compute ssh
. A
configuração de acesso
da instância (definida por meio de permissões do IAM) precisa permitir o tunelamento de
TCP por meio do IAP.
gcloud compute ssh INSTANCE_NAME
Substitua INSTANCE_NAME pelo nome da instância para o SSH.
Se a instância não tiver um endereço IP externo, a conexão usará automaticamente o encapsulamento de TCP do IAP. Se a instância tiver um endereço IP externo, a conexão usará o endereço IP externo em vez do encapsulamento de TCP do IAP.
Você pode usar o sinalizador --tunnel-through-iap
para que gcloud compute ssh
sempre use o encapsulamento IAP para TCP.
Use a sinalização --internal-ip
para que gcloud compute ssh
nunca use o tunelamento de TCP do IAP
e, em vez disso, se conecte diretamente ao IP interno da VM. Isso
é útil para clientes que estão conectados à mesma rede VPC que a
VM de destino.
IAP Desktop
Você pode usar o IAP para computadores a uma instância de VM usando SSH e encaminhamento de TCP do IAP.
No aplicativo, selecione Arquivo > Adicionar projeto do Google Cloud.
Digite o ID ou nome do seu projeto e clique em OK.
Na janela Project Explorer, clique com o botão direito do mouse na instância da VM à qual você quer se conectar e selecione Connect.
Para mais informações sobre o IAP Desktop, consulte a página do projeto no GitHub (em inglês).
App PuTTY
É possível configurar o app de emulador de terminal PuTTY para que ele use o encaminhamento de TCP do IAP para se conectar a uma instância de VM. A configuração de acesso da instância (definida por permissões do IAM) precisa permitir o tunelamento de TCP por meio do IAP.
Antes de configurar o app PuTTY, use o comando gcloud compute ssh
uma vez
para garantir que você tenha uma chave SSH particular no seu computador local e que
sua chave SSH pública seja publicada no Compute Engine:
Abra um prompt de comando e execute o seguinte comando para se conectar à instância de VM:
gcloud compute ssh INSTANCE_NAME ` --tunnel-through-iap ` --project PROJECT_ID ` --zone ZONE
Substitua:
- INSTANCE_NAME: nome da instância a ser conectada
- PROJECT_ID: ID do projeto em que a instância de VM está localizada
- ZONE: zona em que a instância de VM está localizada
Se necessário, confirme se você quer gerar chaves SSH pressionando
Y
.Na VM, determine seu nome de usuário executando o comando a seguir:
whoami
Esse nome de usuário será necessário mais tarde.
Agora configure o app PuTTY para usar o encaminhamento de TCP do IAP:
- Abra o app PuTTY e selecione a categoria Conexão > Proxy.
Defina as configurações de proxy a seguir:
- Em Tipo de proxy, selecione Local.
No campo Comando Telnet ou comando proxy local, digite isto:
gcloud.cmd compute start-iap-tunnel %host %port --listen-on-stdin --project PROJECT_ID --zone ZONE
Substitua:
- PROJECT_ID: ID do projeto em que a instância de VM está localizada
- ZONE: zona em que a instância de VM está localizada
Para Imprimir o diagnóstico do proxy na janela do terminal, selecione Apenas até o início da sessão.
Selecione a categoria Conexão > SSH > Auth.
Clique em Procurar, cole o seguinte nome de arquivo e, em seguida, clique em Abrir:
%USERPROFILE%\.ssh\google_compute_engine.ppk
Selecione a categoria Sessão.
Defina as configurações de proxy a seguir:
No campo Nome de host (ou endereço IP), digite isto:
USERNAME@INSTANCE_NAME
Substitua:
- USERNAME: o nome de usuário do Linux que você determinou anteriormente
- INSTANCE_NAME: o nome da instância de VM a que você quer se conectar
Sessões salvas: insira um nome para a sessão.
Clique em Save.
Clique em Abrir para iniciar a sessão SSH.
ssh
É possível usar o comando ssh diretamente com uma opção ProxyCommand
que usa gcloud
para iniciar o túnel. Use isso para gerar o comando ssh
completo:
gcloud compute ssh INSTANCE_NAME --dry-run
Como fazer tunelamento de conexões RDP
É possível conectar-se a instâncias do Windows que não têm um endereço IP externo encapsulando o tráfego RDP por meio do IAP:
IAP Desktop
Você pode usar o IAP para computadores para se conectar à área de trabalho remota de uma ou mais instâncias de VM usando o encaminhamento de TCP do IAP.
No aplicativo, selecione Arquivo > Adicionar projeto do Google Cloud.
Digite o ID ou nome do seu projeto e clique em OK.
Na janela Project Explorer, clique com o botão direito do mouse na instância da VM à qual você quer se conectar e selecione Connect.
Para mais informações sobre o IAP Desktop, consulte a página do projeto no GitHub (em inglês).
gcloud
Para conectar-se à Área de Trabalho Remota de uma instância de VM, primeiro crie um túnel.
Use o comando
gcloud compute start-iap-tunnel
para criar um túnel criptografado para a porta RDP da instância de VM.gcloud compute start-iap-tunnel INSTANCE_NAME 3389 \ --local-host-port=localhost:LOCAL_PORT \ --zone=ZONE
Substitua INSTANCE_NAME pelo nome da instância de VM à qual você quer se conectar. Substitua LOCAL_PORT pela porta localhost em que você quer que o proxy seja vinculado ou use 0 para que um não usado seja selecionado automaticamente. Substitua ZONE pela zona em que a instância de VM está localizada.
gcloud
executa um teste de conectividade com a instância de VM, abre um túnel e mostra um número de porta.Listening on port [LOCAL_PORT].
Todo o tráfego enviado para o localhost:LOCAL_PORT é encaminhado para a instância da VM. A porta é acessível apenas por aplicativos em execução no seu computador local.
Deixe o
gcloud
em execução e abra o aplicativo Conexão de Área de Trabalho Remota do Microsoft Windows.Digite o endpoint do túnel como nome do computador:
localhost:LOCAL_PORT
Substitua LOCAL_PORT pelo número da porta mostrado quando o túnel foi aberto por
gcloud
.Clique em Connect.
Como fazer tunelamento de outras conexões TCP
É possível usar o encaminhamento de TCP do IAP para outros protocolos baseados em TCP
usando o
comando gcloud compute start-iap-tunnel
para alocar uma porta local. A porta local encapsula o tráfego de dados da
máquina local para a máquina remota em stream HTTPS. O IAP então recebe os dados, aplica os controles de acesso e encaminha os dados não encapsulados para a porta remota. Por outro lado, todos os dados da porta remota também são encapsulados antes de serem enviados para a porta local em que são desencapsulados.
gcloud
Crie um tunelamento criptografado para uma porta da instância da VM:
gcloud compute start-iap-tunnel INSTANCE_NAME INSTANCE_PORT \ --local-host-port=localhost:LOCAL_PORT \ --zone=ZONE
Substitua INSTANCE_NAME e INSTANCE_PORT pelo nome e pela porta da instância de VM a que você quer se conectar. Substitua LOCAL_PORT pela porta do localhost onde você quer que o proxy seja vinculado. Substitua ZONE pela zona em que a instância de VM está localizada.
gcloud
executa um teste de conectividade com a instância de VM,
abre um túnel e mostra um número de porta.
Listening on port [LOCAL_PORT].
Todo o tráfego enviado para o localhost:LOCAL_PORT é encaminhado para a instância da VM. A porta é acessível apenas por aplicativos em execução no seu computador local.
Como aumentar a largura de banda de upload TCP do IAP
Para aumentar a largura de banda de upload TCP do IAP, considere instalar o NumPy na mesma máquina em que a CLI gcloud está instalada.
Linux
Para instalar o NumPy usando o pip em plataformas Unix, execute o seguinte comando em uma nova instância de terminal:
$(gcloud info --format="value(basic.python_location)") -m pip install numpy
Se a mensagem de erro persistir após a instalação do NumPy, siga esta etapa: Execute o comando a seguir para permitir que o gcloud acesse pacotes externos:
export CLOUDSDK_PYTHON_SITEPACKAGES=1
Windows
Para instalar o NumPy usando o pip em plataformas Windows, execute o seguinte comando em uma nova instância do PowerShell:
start (gcloud info --format="value(basic.python_location)") "-m pip install numpy"
Se a mensagem ainda persistir após a instalação do NumPy, outra etapa será necessária. Execute o comando abaixo para permitir que o gcloud acesse pacotes externos:
$env:CLOUDSDK_PYTHON_SITEPACKAGES="1"
Limitações conhecidas
Largura de banda: o recurso de encaminhamento de TCP do IAP não se destina à transferência em massa de dados. O IAP se reserva o direito de limitar a taxa dos usuários que abusam desse serviço.
Comprimento da conexão: o IAP desconecta automaticamente as sessões
após uma hora de inatividade. Atualmente, o gcloud compute start-iap-tunnel
tenta restabelecer o túnel se ele for desconectado.
Próximas etapas
Para as solicitações de acesso, ative os registros de auditoria do Cloud.
Configure o VPC Service Controls para proteger com IAP para TCP.