Questa pagina spiega come utilizzare il forwarding TCP di Identity-Aware Proxy (IAP) per abilitare l'accesso amministrativo alle istanze VM che non hanno indirizzi IP esterni o non consentono l'accesso diretto su Internet.
L'inoltro TCP IAP consente di definire un tunnel criptato su cui puoi inoltrare SSH, RDP e altro traffico alle istanze VM. Il forwarding TCP di IAP offre anche un controllo granulare su quali utenti sono autorizzati a stabilire tunnel e a quali istanze VM possono connettersi.
Per saperne di più su come funziona l'inoltro TCP IAP, vedi la panoramica sull'inoltro TCP.
Preparazione del progetto per l'inoltro TCP in IAP
In questa sezione vengono illustrati i passaggi necessari per abilitare il forwarding TCP per IAP nel tuo progetto Google Cloud.
Crea una regola firewall
Per consentire a IAP di connettersi alle istanze VM, crea una regola firewall che:
- si applica a tutte le istanze VM a cui vuoi accedere utilizzando IAP.
- consente il traffico in entrata dall'intervallo IP
35.235.240.0/20
. Questo intervallo contiene tutti gli indirizzi IP che IAP utilizza per l'inoltro TCP. consente le connessioni a tutte le porte a cui vuoi accedere utilizzando l'inoltro TCP IAP, ad esempio la porta
22
per SSH e la porta3389
per RDP.
Console
Per consentire l'accesso RDP e SSH a tutte le istanze VM della tua rete, procedi nel seguente modo:
- Apri la pagina Regole firewall.
- Nella pagina Regole firewall, fai clic su Crea regola firewall.
- Configura le seguenti impostazioni:
- Nome:
allow-ingress-from-iap
- Direzione del traffico: in entrata
- Target: tutte le istanze nella rete
- Filtro di origine: intervalli IP
- Intervalli IP di origine:
35.235.240.0/20
- Protocolli e porte: seleziona TCP e inserisci
22,3389
per consentire sia RDP che SSH.
- Nome:
- Fai clic su Create (Crea).
gcloud
Per consentire l'accesso RDP a tutte le istanze VM nella tua rete, esegui:
gcloud compute firewall-rules create allow-rdp-ingress-from-iap \ --direction=INGRESS \ --action=allow \ --rules=tcp:3389 \ --source-ranges=35.235.240.0/20
Per l'accesso SSH, esegui:
gcloud compute firewall-rules create allow-ssh-ingress-from-iap \ --direction=INGRESS \ --action=allow \ --rules=tcp:22 \ --source-ranges=35.235.240.0/20
Per altri protocolli, esegui
gcloud compute firewall-rules create allow-ingress-from-iap \ --direction=INGRESS \ --action=allow \ --rules=tcp:PORT \ --source-ranges=35.235.240.0/20
dove PORT
è la porta utilizzata dal protocollo.
Concedi ruoli per il forwarding TCP di IAP
Per controllare a quali utenti e gruppi è consentito utilizzare l'inoltro IAP TCP e a quali istanze VM possono connettersi, concedi i ruoli Identity and Access Management (IAM) appropriati nel progetto.
Ti consigliamo di concedere tutti i seguenti ruoli agli amministratori attendibili:
roles/iap.tunnelResourceAccessor
(progetto o VM)roles/compute.instanceAdmin.v1
(progetto)
Inoltre, se utilizzi OS Login (consigliato), consulta la pagina relativa alla configurazione dei ruoli di OS Login negli account utente.
Se utilizzi gli account di servizio, consulta queste istruzioni per configurare il ruolo serviceAccountUser
.
Puoi concedere a un utente o a un gruppo l'accesso a tutte le istanze VM di un progetto concedendo ruoli IAM a livello di progetto:
Console
- Apri la pagina IAM e amministrazione in Google Cloud Console.
- Nella pagina IAM e amministrazione, fai clic su Aggiungi e configura quanto segue:
- Nuove entità: specifica l'utente o il gruppo a cui concedere l'accesso.
- Seleziona un ruolo: seleziona Cloud IAP > Utente del tunnel con protezione IAP.
- In via facoltativa, fai clic su Aggiungi condizione e configura una condizione:
- Titolo: inserisci un nome per la condizione.
- Espressione: inserisci una condizione che un utente deve soddisfare per ottenere le autorizzazioni nel ruolo Utente del tunnel con protezione IAP.
Ad esempio, la seguente espressione CEL concede l'accesso solo alla porta 22:
destination.port == 22
Puoi anche concedere l'accesso in base al livello di accesso:
destination.port == 22 && "FULL_ACCESS_LEVEL_NAME" in request.auth.access_levels
Dove
FULL_ACCESS_LEVEL_NAME
è un livello di accesso esistente e utilizza il seguente formato:accessPolicies/POLICY_NAME/accessLevels/ACCESS_LEVEL_NAME
- Fai clic su Aggiungi un altro ruolo e configura quanto segue:
- Seleziona un ruolo Seleziona Compute Engine > Amministratore istanze Compute (v1).
- Fai clic su Salva.
gcloud
Concedi i due ruoli all'utente eseguendo i comandi seguenti:
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
Sostituisci quanto segue:
PROJECT_ID
: ID del progettoEMAIL
: indirizzo email dell'utente a cui vuoi concedere l'accesso, ad esempiouser@example.com
.
Se vuoi, puoi invece concedere il ruolo roles/iap.tunnelResourceAccessor
a
una VM specifica (gli altri ruoli devono essere concessi al progetto):
Console
- Apri la pagina di amministrazione di IAP e seleziona la scheda SSH and TCP Resources (Risorse SSH e TCP).
- Nella scheda Risorse SSH e TCP della pagina di amministrazione di IAP, seleziona le istanze VM da configurare.
- Se il riquadro informazioni non è visibile, fai clic su Mostra riquadro informazioni.
Fai clic su Aggiungi entità e configura quanto segue:
- Nuove entità: specifica l'utente o il gruppo a cui concedere l'accesso.
- Seleziona un ruolo: seleziona Cloud IAP > Utente del tunnel con protezione IAP.
In via facoltativa, fai clic su Aggiungi condizione e configura una condizione:
- Titolo: inserisci un nome per la condizione.
- Espressione: inserisci una condizione che un utente deve soddisfare per ottenere le autorizzazioni nel ruolo Utente del tunnel con protezione IAP.
Ad esempio, la seguente espressione CEL concede l'accesso solo alla porta 22:
destination.port == 22
Puoi anche concedere l'accesso in base al livello di accesso:
destination.port == 22 && "FULL_ACCESS_LEVEL_NAME" in request.auth.access_levels
Dove
FULL_ACCESS_LEVEL_NAME
è un livello di accesso esistente e utilizza il formatoaccessPolicies/POLICY_NAME/accessLevels/ACCESS_LEVEL_NAME
.- Fai clic su Salva.
API
Per modificare il file policy.json
dell'applicazione, procedi nel seguente modo.
Consulta la pagina relativa alla gestione dell'accesso alle risorse protette da IAP per ulteriori informazioni sull'utilizzo dell'API IAM per gestire i criteri di accesso.
Esporta le seguenti variabili.
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
Ottieni il criterio IAM per l'istanza Compute Engine utilizzando il metodo
getIamPolicy
. Il bit di dati vuoto alla fine trasforma la richiestacurl
in POST anziché in GET.curl -i -H "Authentication: Bearer $(gcloud auth print-access-token)" \ ${IAP_BASE_URL}/zones/ZONE_NAME/instances/INSTANCE_ID or INSTANCE_NAME:getIamPolicy \ -d ''
Concedi il ruolo
iap.tunnelResourceAccessor
alle entità modificando il file JSON del criterio IAM.Facoltativamente, concedi il ruolo solo alle entità che soddisfano criteri specifici, in base alle Condizioni IAM e ai livelli di accesso.
Di seguito è riportato un esempio di file
policy.json
modificato che concede il ruoloiap.tunnelResourceAccessor
a un gruppo di amministratori di istanze VM, concedendo loro l'accesso alle risorse del tunnel con protezione IAP. È stata aggiunta una condizione IAM per rendere le risorse accessibili solo alle entità nel gruppo di amministratori di istanze VM con un indirizzo IP privato di10.0.0.1
sulla porta22
utilizzando le condizioni IAMdestination.ip
edestination.port
. Devono inoltre soddisfare i requisiti del livello di accesso ACCESS_LEVEL_NAME.Tieni presente che se un'entità ha il ruolo Proprietario, è autorizzata a utilizzare IAP per l'inoltro TCP.
Esempio di file 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" } } ] } }
Per trovare il nome di un criterio, chiama
accessPolicies.list
:GET https://accesscontextmanager.googleapis.com/v1/accessPolicies
Imposta il tuo nuovo file
policy.json
utilizzando il metodosetIamPolicy
.curl -i -H "Content-Type:application/json" \ -H "Authentication: Bearer $(gcloud auth print-access-token)" \ ${IAP_BASE_URL}/zones/ZONE_NAME/instances/INSTANCE_ID or INSTANCE_NAME:setIamPolicy \ -d @${JSON_NEW_POLICY}
Dettagli autorizzazioni
Le autorizzazioni richieste variano in base al modo in cui un utente utilizzerà il forwarding IAP TCP:
Scenari | Autorizzazioni obbligatorie | |
---|---|---|
Tutti |
|
|
Uso: gcloud compute [start-iap-tunnel, ssh, scp] |
|
|
Uso: gcloud compute [ssh, scp] |
|
|
VM che utilizza OS Login | Consulta queste istruzioni. | |
OS Login non utilizzato |
|
|
Da SSH a VM utilizzando un account di servizio |
|
|
SSH dal browser | Consulta queste istruzioni. |
Ad esempio, se un utente vuole connettersi utilizzando gcloud compute ssh
a una VM che non utilizza OS Login, ma questo utilizza un account di servizio, l'utente deve avere le seguenti autorizzazioni:
iap.tunnelInstances.accessViaIAP
compute.instances.get
compute.instances.list
compute.projects.get
compute.instances.setMetadata
compute.projects.setCommonInstanceMetadata
compute.globalOperations.get
iam.serviceAccounts.actAs
Tunneling Connessioni SSH
Puoi connetterti a istanze Linux che non hanno un indirizzo IP esterno eseguendo il tunneling del traffico SSH tramite IAP.
Quando utilizzi il tunneling IAP, i proxy IAP si connettono all'indirizzo IPv4 interno primario di nic0
sulla VM.
Console
Per connetterti all'istanza, utilizza il pulsante SSH in Google Cloud Console. La configurazione dell'accesso dell'istanza, definita tramite le autorizzazioni IAM, deve consentire il tunneling TCP tramite IAP.
gcloud
Per connetterti all'istanza, utilizza il comando gcloud compute ssh
. La configurazione dell'accesso della tua istanza (definita tramite le autorizzazioni IAM) deve consentire il tunnel TCP tramite IAP.
gcloud compute ssh INSTANCE_NAME
Sostituisci INSTANCE_NAME con il nome dell'istanza in SSH.
Se l'istanza non ha un indirizzo IP esterno, la connessione utilizza automaticamente il tunneling IAP TCP. Se l'istanza ha un indirizzo IP esterno, la connessione utilizza l'indirizzo IP esterno anziché il tunneling IAP TCP.
Puoi utilizzare il flag --tunnel-through-iap
in modo che gcloud compute ssh
utilizzi sempre il tunneling IAP TCP.
Utilizza il flag --internal-ip
in modo che gcloud compute ssh
non utilizzi mai il tunneling IAP TCP e si connetta direttamente all'IP interno della VM. Questa operazione è utile per i client collegati alla stessa rete VPC della VM di destinazione.
Desktop IAP
Puoi utilizzare IAP Desktop per connetterti a un'istanza VM tramite SSH e forwarding TCP IAP.
Nell'applicazione, seleziona File > Aggiungi progetto Google Cloud.
Inserisci l'ID o il nome del progetto e fai clic su OK.
Nella finestra Esplora progetto, fai clic con il pulsante destro del mouse sull'istanza VM a cui vuoi connetterti e seleziona Connetti.
Per ulteriori informazioni su IAP Desktop, consulta la pagina del progetto GitHub.
App PuTTY
Puoi configurare l'app dell'emulatore di terminale Windows di PuTTY in modo che utilizzi l'inoltro TCP IAP per connetterti a un'istanza VM. La configurazione dell'accesso della tua istanza (definita tramite le autorizzazioni IAM) deve consentire il tunneling TCP tramite IAP.
Prima di configurare l'app PuTTY, utilizza il comando gcloud compute ssh
una volta per assicurarti di avere una chiave SSH privata sul tuo computer locale e che la tua chiave SSH pubblica sia pubblicata su Compute Engine:
Apri un prompt dei comandi ed esegui questo comando per connetterti all'istanza VM:
gcloud compute ssh INSTANCE_NAME ` --tunnel-through-iap ` --project PROJECT_ID ` --zone ZONE
Sostituisci quanto segue:
- INSTANCE_NAME: nome dell'istanza a cui connetterti
- PROJECT_ID: ID progetto del progetto in cui si trova l'istanza VM
- ZONE: zona in cui si trova l'istanza VM
Se necessario, conferma di voler generare le chiavi SSH premendo
Y
.Sulla VM, determina il tuo nome utente eseguendo il comando seguente:
whoami
Questo nome utente ti servirà in un secondo momento.
Ora puoi configurare l'app PuTTY in modo che utilizzi il forwarding TCP di IAP:
- Apri l'app PuTTY e seleziona la categoria Connessione > Proxy.
Configura le seguenti impostazioni del proxy:
- In Tipo di proxy, seleziona Locale.
Nel campo Comando Telnet o comando proxy locale, inserisci quanto segue:
gcloud.cmd compute start-iap-tunnel %host %port --listen-on-stdin --project PROJECT_ID --zone ZONE
Sostituisci quanto segue:
- PROJECT_ID: ID progetto del progetto in cui si trova l'istanza VM
- ZONE: zona in cui si trova l'istanza VM
Per l'opzione Stampa diagnostica proxy nella finestra del terminale, seleziona Solo fino all'inizio della sessione.
Seleziona la categoria Connessione > SSH > Autentica.
Fai clic su Sfoglia e incolla il nome del file seguente, quindi fai clic su Apri:
%USERPROFILE%\.ssh\google_compute_engine.ppk
Seleziona la categoria Sessione.
Configura le seguenti impostazioni del proxy:
Nel campo Nome host (o indirizzo IP), inserisci quanto segue:
USERNAME@INSTANCE_NAME
Sostituisci quanto segue:
- USERNAME: il nome utente Linux che hai stabilito in precedenza
- INSTANCE_NAME: il nome dell'istanza VM a cui vuoi connetterti
Sessioni salvate: inserisci un nome per la sessione.
Fai clic su Salva.
Fai clic su Apri per avviare la sessione SSH.
ssh
Puoi utilizzare direttamente il comando ssh con un'opzione ProxyCommand
che usa gcloud
per avviare il tunnel. Utilizzalo per generare il comando ssh
completo:
gcloud compute ssh INSTANCE_NAME --dry-run
Tunneling RDP connections
Puoi connetterti alle istanze Windows che non hanno un indirizzo IP esterno eseguendo il tunneling del traffico RDP tramite IAP:
Desktop IAP
Puoi utilizzare IAP Desktop per connetterti al desktop remoto di una o più istanze VM utilizzando l'inoltro TCP IAP.
Nell'applicazione, seleziona File > Aggiungi progetto Google Cloud.
Inserisci l'ID o il nome del progetto e fai clic su OK.
Nella finestra Esplora progetto, fai clic con il pulsante destro del mouse sull'istanza VM a cui vuoi connetterti e seleziona Connetti.
Per ulteriori informazioni su IAP Desktop, consulta la pagina del progetto GitHub.
gcloud
Per connetterti al desktop remoto di un'istanza VM, devi prima creare un tunnel.
Utilizza il comando
gcloud compute start-iap-tunnel
per creare un tunnel criptato alla porta RDP dell'istanza VM.gcloud compute start-iap-tunnel INSTANCE_NAME 3389 \ --local-host-port=localhost:LOCAL_PORT \ --zone=ZONE
Sostituisci INSTANCE_NAME con il nome dell'istanza VM a cui vuoi connetterti. Sostituisci LOCAL_PORT con la porta localhost in cui vuoi associare il proxy oppure utilizza 0 per selezionarne automaticamente una inutilizzata. Sostituisci ZONE con la zona in cui si trova l'istanza VM.
gcloud
esegue un test di connettività con l'istanza VM, quindi apre un tunnel e mostra un numero di porta.Listening on port [LOCAL_PORT].
Tutto il traffico inviato a localhost:LOCAL_PORT viene inoltrato all'istanza VM. La porta è accessibile solo dalle applicazioni in esecuzione sul computer locale.
Lascia
gcloud
in esecuzione e apri l'app Connessione Microsoft Desktop remoto.Inserisci l'endpoint del tunnel come nome del computer:
localhost:LOCAL_PORT
Sostituisci LOCAL_PORT con il numero di porta mostrato quando il tunnel è stato aperto da
gcloud
.Fai clic su Connetti.
Tunnel di altre connessioni TCP
Puoi utilizzare il forwarding TCP IAP per altri protocolli basati su TCP utilizzando il comando gcloud compute start-iap-tunnel
per allocare una porta locale. La porta locale esegue il tunneling del traffico dati dalla macchina locale alla macchina remota in uno stream HTTPS. IAP riceve i dati, applica i controlli di accesso e li inoltra alla porta remota. Al contrario, tutti i dati provenienti dalla porta remota vengono aggregati anche prima di essere inviati alla porta locale in cui vengono poi decriptati.
gcloud
Crea un tunnel criptato con una porta dell'istanza VM:
gcloud compute start-iap-tunnel INSTANCE_NAME INSTANCE_PORT \ --local-host-port=localhost:LOCAL_PORT \ --zone=ZONE
Sostituisci INSTANCE_NAME e INSTANCE_PORT con il nome e la porta dell'istanza VM a cui vuoi connetterti. Sostituisci LOCAL_PORT con la porta localhost a cui vuoi associare il proxy. Sostituisci ZONE con la zona in cui si trova l'istanza VM.
gcloud
esegue un test di connettività con l'istanza VM, quindi apre un tunnel e mostra un numero di porta.
Listening on port [LOCAL_PORT].
Tutto il traffico inviato a localhost:LOCAL_PORT viene inoltrato all'istanza VM. La porta è accessibile solo dalle applicazioni in esecuzione sul computer locale.
Aumento della larghezza di banda di caricamento IAP TCP
Per aumentare la larghezza di banda di caricamento IAP TCP, considera l'installazione di NumPy nella stessa macchina in cui è installato gcloud CLI.
Linux
Per installare NumPy utilizzando pip nelle piattaforme Unix, esegui il comando seguente in una nuova istanza del terminale:
$(gcloud info --format="value(basic.python_location)") -m pip install numpyPer ulteriori informazioni, visita la pagina NumPy.org.
Se il messaggio di errore persiste dopo l'installazione di NumPy, completa la procedura seguente: Esegui il comando seguente per consentire a gcloud di accedere ai pacchetti esterni:
export CLOUDSDK_PYTHON_SITEPACKAGES=1
Windows
Per installare NumPy utilizzando pip nelle piattaforme Windows, esegui il comando seguente in una nuova istanza di PowerShell:
start (gcloud info --format="value(basic.python_location)") "-m pip install numpy"Per ulteriori informazioni, visita la pagina NumPy.org.
Se il messaggio persiste dopo l'installazione di NumPy, è necessario un altro passaggio. Esegui questo comando per consentire a gcloud di accedere ai pacchetti esterni:
$env:CLOUDSDK_PYTHON_SITEPACKAGES="1"
Limitazioni note
Larghezza di banda: la funzionalità di forwarding TCP di IAP non è destinata al trasferimento collettivo dei dati. IAP si riserva il diritto di limitare la frequenza degli utenti che abusano di questo servizio.
Durata della connessione: IAP disconnette automaticamente le sessioni dopo un'ora di inattività. Consigliamo di avere una logica nelle applicazioni per gestire il ripristino di un tunnel quando viene disconnesso.
Passaggi successivi
Visualizza le richieste di accesso attivando Cloud Audit Logs.
Configura i Controlli di servizio VPC per proteggere il tuo progetto con IAP per TCP.