Esta página explica como pode usar o encaminhamento TCP do Identity-Aware Proxy (IAP) para ativar o acesso administrativo a instâncias de VM que não têm endereços IP externos ou não permitem o acesso direto através da Internet.
O encaminhamento TCP do IAP permite-lhe estabelecer um túnel encriptado através do qual pode encaminhar SSH, RDP e outro tráfego para instâncias de VMs. O encaminhamento TCP do IAP também lhe oferece um controlo detalhado sobre que utilizadores têm autorização para estabelecer túneis e a que instâncias de VM os utilizadores têm autorização para se ligarem.
Para saber como funciona o reencaminhamento de TCP da IAP, consulte a vista geral do reencaminhamento de TCP.
Preparar o projeto para o encaminhamento TCP do IAP
Esta secção explica os passos necessários para ativar o encaminhamento de TCP da IAP no seu projeto Google Cloud .
Crie uma regra de firewall
Para permitir que o IAP se ligue às suas instâncias de VM, crie uma regra de firewall que:
- aplica-se a todas as instâncias de VM às quais quer que seja possível aceder através do IAP.
- permite o tráfego de entrada do intervalo de IP
35.235.240.0/20
. Este intervalo contém todos os endereços IP que o IAP usa para o encaminhamento TCP.Para VMs IPv6, use o seguinte intervalo de IP:
2600:2d00:1:7::/64
. - permite ligações a todas as portas que quer que sejam acessíveis por
através do encaminhamento TCP do IAP, por exemplo, a porta
22
para SSH e a porta3389
para RDP.
Consola
Para permitir o 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.
Abra a página Regras de firewall
Os passos restantes aparecem na Google Cloud consola.
- Selecione um Google Cloud projeto.
Mostrar-me . - Na página Regras de firewall, clique em
Criar regra de firewall . - Configure as seguintes definições:
- Nome:
allow-ingress-from-iap
- Direção do tráfego: entrada
- Segmentação: todas as instâncias na rede
- Filtro de origem: intervalos de IP
- Intervalos de IP de origem:
35.235.240.0/20
- Protocolos e portas: selecione TCP e introduza
22,3389
para permitir o RDP e o SSH.
- Nome:
- Clique em Criar.
gcloud
Para permitir o acesso RDP a todas as instâncias de VM na sua rede, execute o seguinte comando:
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 aceder ao SSH, execute o seguinte comando:
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
em que PORT
é a porta usada pelo protocolo.
Conceda funções para o encaminhamento TCP do IAP
Para controlar que utilizadores e grupos têm autorização para usar o encaminhamento TCP do IAP e a que instâncias de VM têm autorização para se ligarem, conceda as funções da gestão de identidade e de acesso (IAM) adequadas no projeto.
Se estiver a usar o Início de sessão do SO (recomendado), consulte o artigo Configurar funções do Início de sessão do SO em contas de utilizador.
A tabela seguinte mostra as funções predefinidas que tem de conceder aos administradores fidedignos para o encaminhamento TCP e tarefas relacionadas:
Tarefa | Funções | Mais informações |
---|---|---|
Encaminhamento TCP |
Utilizador do túnel protegido por IAP (roles/iap.tunnelResourceAccessor )
|
Consulte Conceda acesso a todas as instâncias de VMs num projeto ou Conceda acesso a uma VM específica. |
Acesso SSH |
Administrador de instâncias do Compute (v1) (roles/compute.instanceAdmin.v1 )
|
|
Use uma conta de serviço | Utilizador da conta de serviço (roles/iam.serviceAccountUser ) |
Consulte o artigo sobre a função serviceAccountUser. |
Se quiser criar funções personalizadas apenas com as autorizações específicas necessárias para esta tarefa, consulte os detalhes das autorizações.
Pode conceder a um utilizador ou a um grupo acesso a todas as instâncias de VM num projeto ou a uma VM específica, consoante a forma como concede as funções necessárias.
As etiquetas não são suportadas
A concessão de autorização através de etiquetas para o encaminhamento TCP de IAP não é suportada atualmente.
Conceda acesso a todas as instâncias de VM num projeto
Pode conceder a um utilizador ou a um grupo acesso a todas as instâncias de VM num projeto através da concessão das funções de IAM necessárias ao nível do projeto:
Consola
- Abra a página IAM e administrador na Google Cloud consola.
Abra a página IAM e administrador
Os passos restantes aparecem na Google Cloud consola.
- Na página IAM e administrador, clique em Adicionar e configure o seguinte:
- Novos principais: especifique o utilizador ou o grupo ao qual quer conceder acesso.
- Selecionar uma função: selecione Cloud IAP > Utilizador do túnel protegido por IAP.
- Opcionalmente, clique em Adicionar condição e configure uma condição:
- Título: introduza um nome para a condição.
- Expressão: introduza uma condição que um utilizador tem de cumprir para obter as autorizações na função de utilizador do túnel protegido por IAP.
Por exemplo, a seguinte expressão de IEC concede acesso apenas à porta 22:
destination.port == 22
Também pode 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 seguinte formato:accessPolicies/POLICY_NAME/accessLevels/ACCESS_LEVEL_NAME
- Clique em Adicionar outra função e configure o seguinte:
- Selecione uma função. Selecione Compute Engine > Compute Instance Admin (v1).
- Clique em Guardar.
gcloud
Conceda as duas funções ao utilizador executando os seguintes comandos:
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 o seguinte:
PROJECT_ID
: ID do projetoEMAIL
: endereço de email do utilizador ao qual quer conceder acesso, por exemplo,user@example.com
.
Conceda acesso a uma VM específica
Para conceder a um utilizador ou a um grupo acesso a uma VM específica, atribua a função
roles/iap.tunnelResourceAccessor
nessa VM. As outras funções têm de ser
concedidas no projeto.
Consola
- Abra a página de administração da IAP e selecione o separador Recursos de SSH e TCP.
Abra a página de administração do Chrome Enterprise Premium
Os passos restantes aparecem na Google Cloud consola.
- No separador Recursos de SSH e TCP da página de administração do IAP, selecione as instâncias de VM que quer configurar.
- Clique em Mostrar painel de informações se o painel de informações não estiver visível.
Clique em Adicionar principal e configure o seguinte:
- Novos principais: especifique o utilizador ou o grupo ao qual quer conceder acesso.
- Selecionar uma função: selecione Cloud IAP > Utilizador do túnel protegido por IAP.
Opcionalmente, clique em Adicionar condição e configure uma condição:
- Título: introduza um nome para a condição.
- Expressão: introduza uma condição que um utilizador tem de cumprir para obter as autorizações na função de utilizador do túnel protegido por IAP.
Por exemplo, a seguinte expressão de IEC concede acesso apenas à porta 22:
destination.port == 22
Também pode conceder acesso com base no nível de acesso:
destination.port == 22 &&
"FULL_ACCESS_LEVEL_NAME" in request.auth.access_levelsOnde
FULL_ACCESS_LEVEL_NAME
é um nível de acesso existente e usa o formatoaccessPolicies/POLICY_NAME/accessLevels/ACCESS_LEVEL_NAME
.- Clique em Guardar.
API
Para editar o ficheiro policy.json
da sua aplicação, siga o processo abaixo.
Consulte o artigo Gerir o acesso a recursos protegidos pelo Chrome Enterprise Premium
para mais informações sobre a utilização da API IAM para gerir
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
Obtenha a política IAM para a instância do Compute Engine através do método
getIamPolicy
. O bit de dados vazio no final transforma o pedidocurl
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 a função
iap.tunnelResourceAccessor
aos seus principais modificando o ficheiro JSON da política de IAM.Opcionalmente, conceda a função apenas a responsáveis que cumpram critérios específicos, com base nas condições da IAM e nos níveis de acesso.
Segue-se um exemplo de um ficheiro
policy.json
editado que concede a funçãoiap.tunnelResourceAccessor
a um grupo de administradores de instâncias de VM, dando-lhes acesso a recursos de túneis protegidos do Chrome Enterprise Premium. Foi adicionada uma condição do IAM para tornar os recursos acessíveis apenas aos responsáveis no grupo de administradores de instâncias de VM com um endereço IP privado de10.0.0.1
na porta22
através das condições do IAMdestination.ip
edestination.port
. Também têm de cumprir os requisitos do ACCESS_LEVEL_NAME nível de acesso.Tenha em atenção que, se um principal tiver a função de proprietário, tem autorização para usar o IAP para encaminhamento de TCP.
Exemplo de ficheiro 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 , ligue para
accessPolicies.list
:GET https://accesscontextmanager.googleapis.com/v1/accessPolicies
Defina o novo ficheiro
policy.json
através do 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 autorizações
As autorizações necessárias variam consoante a forma como um utilizador vai usar o encaminhamento TCP do IAP:
Cenários | Autorizações necessárias | |
---|---|---|
Tudo |
|
|
A usar gcloud compute [start-iap-tunnel, ssh, scp] |
|
|
A usar gcloud compute [ssh, scp] |
|
|
VM que usa o Início de sessão do SO | Consulte estas instruções | |
Não usar o Início de sessão do SO |
|
|
SSH para VM através de uma conta de serviço |
|
|
SSH a partir do navegador | Consulte estas instruções |
Por exemplo, se um utilizador quiser estabelecer ligação através de gcloud compute ssh
a uma VM que não use o Início de sessão do SO, mas que use uma conta de serviço, o utilizador precisa das seguintes autorizaçõ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
Encaminhamento de ligações SSH
Pode estabelecer ligação a instâncias do Linux que não tenham um endereço IP externo através do encaminhamento do tráfego SSH através do IAP.
Quando usa o tunelamento do IAP, os proxies do IAP estabelecem ligação ao endereço IPv4 interno principal de nic0
na VM.
Consola
Para estabelecer ligação à sua instância, use o botão SSH na Google Cloud consola. A configuração de acesso da sua instância (definida através de autorizações da IAM) tem de permitir o encaminhamento TCP através do IAP.
gcloud
Para estabelecer ligação à sua instância, use o comando
gcloud compute ssh
. A configuração de acesso da instância (definida através das autorizações da IAM) tem de permitir o encaminhamento TCP através do IAP.
gcloud compute ssh INSTANCE_NAME
Substitua INSTANCE_NAME pelo nome da instância na qual quer usar o SSH.
Se a instância não tiver um endereço IP externo, a ligação usa automaticamente o túnel TCP do IAP. Se a instância tiver um endereço IP externo, a ligação usa o endereço IP externo em vez do túnel TCP do IAP.
Pode usar a flag --tunnel-through-iap
para que o gcloud compute ssh
use sempre o túnel TCP da IAP.
Use a flag --internal-ip
para que o gcloud compute ssh
nunca use o túnel TCP do IAP e, em vez disso, se ligue diretamente ao IP interno da VM. Isto é útil para clientes que estão ligados à mesma rede VPC que a VM de destino.
IAP Desktop
Pode usar o IAP Desktop para estabelecer ligação a uma instância de VM através do SSH e do encaminhamento TCP do IAP.
Na aplicação, selecione Ficheiro > Adicionar projeto do Google Cloud.
Introduza o ID ou o nome do seu projeto e clique em OK.
Na janela Project Explorer, clique com o botão direito do rato na instância de VM à qual quer ligar-se e selecione Ligar.
Para mais informações sobre o IAP Desktop, consulte a página do projeto do GitHub.
App PuTTY
Pode configurar a app do emulador de terminal do Windows PuTTY para que use o encaminhamento TCP do IAP para estabelecer ligação a uma instância de VM. A configuração de acesso da instância (definida através das autorizações da IAM) tem de permitir o túnel TCP através do IAP.
Antes de configurar a app PuTTY, use o comando gcloud compute ssh
uma vez para garantir que tem uma chave SSH privada no seu computador local e que a sua chave SSH pública está publicada no Compute Engine:
Abra uma linha de comandos e execute o seguinte comando para se ligar à instância de VM:
gcloud compute ssh INSTANCE_NAME ` --tunnel-through-iap ` --project PROJECT_ID ` --zone ZONE
Substitua o seguinte:
- INSTANCE_NAME: nome da instância à qual estabelecer ligação
- PROJECT_ID: ID do projeto no qual a instância de VM está localizada
- ZONE: zona onde a instância de VM está localizada
Se necessário, confirme que quer gerar chaves SSH premindo
Y
.Na VM, determine o seu nome de utilizador executando o seguinte comando:
whoami
Vai precisar deste nome de utilizador mais tarde.
Agora, pode configurar a app PuTTY para usar o encaminhamento TCP do IAP:
- Abra a app PuTTY e selecione a categoria Ligação > Proxy.
Configure as seguintes definições de proxy:
- Para Tipo de proxy, selecione Local.
No campo Comando Telnet ou comando de proxy local, introduza o seguinte:
gcloud.cmd compute start-iap-tunnel %host %port --listen-on-stdin --project PROJECT_ID --zone ZONE
Substitua o seguinte:
- PROJECT_ID: ID do projeto no qual a instância de VM está localizada
- ZONE: zona onde a instância de VM está localizada
Para Imprimir diagnósticos de proxy na janela do terminal, selecione Apenas até ao início da sessão.
Selecione a categoria Ligação > SSH > Autenticação.
Clique em Procurar, cole o seguinte nome de ficheiro e, de seguida, clique em Abrir:
%USERPROFILE%\.ssh\google_compute_engine.ppk
Selecione a categoria Sessão.
Configure as seguintes definições de proxy:
No campo Nome do anfitrião (ou endereço IP), introduza o seguinte:
USERNAME@INSTANCE_NAME
Substitua o seguinte:
- USERNAME: o nome de utilizador do Linux que determinou anteriormente
- INSTANCE_NAME: o nome da instância de VM à qual quer estabelecer ligação
Sessões guardadas: introduza um nome para a sessão.
Clique em Guardar.
Clique em Abrir para iniciar a sessão SSH.
ssh
Pode usar diretamente o comando ssh com uma opção ProxyCommand
que usa gcloud
para iniciar o túnel. Use isto para gerar o comando ssh
completo:
gcloud compute ssh INSTANCE_NAME --dry-run
Encaminhamento de ligações RDP
Pode estabelecer ligação a instâncias do Windows que não tenham um endereço IP externo encaminhando o tráfego RDP através do IAP:
IAP Desktop
Pode usar o IAP Desktop para estabelecer ligação ao Ambiente de Trabalho Remoto de uma ou mais instâncias de VM através do encaminhamento TCP do IAP.
Na aplicação, selecione Ficheiro > Adicionar projeto do Google Cloud.
Introduza o ID ou o nome do seu projeto e clique em OK.
Na janela Project Explorer, clique com o botão direito do rato na instância de VM à qual quer ligar-se e selecione Ligar.
Para mais informações sobre o IAP Desktop, consulte a página do projeto do GitHub.
gcloud
Para se ligar ao ambiente de trabalho remoto de uma instância de VM, primeiro cria um túnel.
Use o comando
gcloud compute start-iap-tunnel
para criar um túnel encriptado para a porta RDP da instância da 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 quer estabelecer ligação. Substitua LOCAL_PORT pela porta localhost onde quer que o proxy seja associado ou use 0 para que seja selecionada automaticamente uma porta não usada. Substitua ZONE pela zona onde a instância de VM está localizada.
gcloud
faz um teste de conetividade com a instância de VM e, em seguida, abre um túnel e mostra um número de porta.Listening on port [LOCAL_PORT].
Todo o tráfego enviado para localhost:LOCAL_PORT é encaminhado para a instância de VM. A porta só está acessível a aplicações em execução no seu computador local.
Deixe o
gcloud
em execução e abra a app Ligação ao Ambiente de Trabalho Remoto do Microsoft Windows.Introduza o ponto final do túnel como nome do computador:
localhost:LOCAL_PORT
Substitua LOCAL_PORT pelo número da porta apresentado quando o túnel foi aberto por
gcloud
.Clique em Ligar.
Encaminhamento de outras ligações TCP
Pode usar o encaminhamento TCP da IAP para outros protocolos baseados em TCP usando o comando gcloud compute start-iap-tunnel
para atribuir uma porta local. A porta local encaminha o tráfego de dados da máquina local para a máquina remota numa stream HTTPS. Em seguida, o IAP recebe os dados, aplica controlos de acesso e encaminha os dados não processados para a porta remota. Por outro lado, todos os dados da porta remota também são envolvidos antes de serem enviados para a porta local, onde são posteriormente desembrulhados.
gcloud
Crie um túnel encriptado para uma porta da instância de 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 à qual quer estabelecer ligação. Substitua LOCAL_PORT pela porta do anfitrião local onde quer que o proxy seja associado. Substitua ZONE pela zona onde a instância de VM está localizada.
gcloud
faz um teste de conetividade com a instância de VM e, em seguida, abre um túnel e mostra um número de porta.
Listening on port [LOCAL_PORT].
Todo o tráfego enviado para localhost:LOCAL_PORT é encaminhado para a instância de VM. A porta só está acessível a aplicações executadas no seu computador local.
Aumentar a largura de banda de carregamento TCP do IAP
Para aumentar a largura de banda de carregamento de TCP da IAP, considere instalar o NumPy na mesma máquina onde a CLI gcloud está instalada.
Linux
Para instalar o NumPy através do pip em plataformas Unix, execute o seguinte comando numa nova instância do 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, conclua o seguinte passo: Execute o seguinte comando para permitir que o gcloud aceda a pacotes externos:
export CLOUDSDK_PYTHON_SITEPACKAGES=1
Windows
Para instalar o NumPy através do pip em plataformas Windows, execute o seguinte comando numa nova instância do PowerShell:
start (gcloud info --format="value(basic.python_location)") "-m pip install numpy"
Se a mensagem persistir após a instalação do NumPy, é necessário outro passo. Execute o seguinte comando para permitir que o gcloud aceda a pacotes externos:
$env:CLOUDSDK_PYTHON_SITEPACKAGES="1"
Limitações conhecidas
Largura de banda: a funcionalidade de encaminhamento TCP do IAP não se destina à transferência em massa de dados. O IAP reserva-se o direito de limitar a taxa de utilizadores que abusam deste serviço.
Duração da ligação: o IAP desliga automaticamente as sessões após uma hora de inatividade. Atualmente, o gcloud compute start-iap-tunnel
tenta restabelecer o túnel se a ligação for interrompida.
Passos seguintes
- Defina regras de contexto mais detalhadas aplicando níveis de acesso.
- Veja pedidos de acesso ativando os registos de auditoria do Cloud.
- Saiba mais sobre as compras na app.