In questa pagina viene spiegato come utilizzare l'inoltro TCP di Identity-Aware Proxy (IAP) a abilita l'accesso amministrativo alle istanze VM che non hanno un IP esterno indirizzi web o non consentire l'accesso diretto su Internet.
L'inoltro TCP IAP consente di stabilire un tunnel criptato su cui puoi inoltrare SSH, RDP e altro traffico alle istanze VM. L'inoltro TCP IAP offre inoltre un controllo granulare quali utenti sono autorizzati a stabilire i tunnel e quali istanze VM utilizzano a cui è consentito connettersi.
Per ulteriori informazioni su come funziona l'inoltro TCP IAP, vedi Panoramica dell'inoltro TCP.
Preparazione del progetto per l'inoltro TCP IAP
Questa sezione illustra i passaggi necessari per attivare IAP. l'inoltro TCP nel tuo progetto Google Cloud.
Crea una regola firewall
Per consentire a IAP di connettersi alle tue istanze VM, crea una regola firewall che:
- Si applichi a tutte le istanze VM a cui vuoi accedere tramite IAP.
- Consenta il traffico in entrata dall'intervallo IP
35.235.240.0/20
. Questo intervallo contiene tutti gli indirizzi IP che utilizzati da IAP per l'inoltro TCP. - Consenta le connessioni a tutte le porte che vuoi rendere accessibili utilizzando l'inoltro TCP di 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.
Apri la pagina Regole firewall
I passaggi rimanenti vengono visualizzati nella console Google Cloud.
- Seleziona un progetto Google Cloud.
- 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 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 gli 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 l'inoltro TCP IAP
Per controllare quali utenti e gruppi sono autorizzati a utilizzare il protocollo TCP IAP il forwarding e a quali istanze VM possono connettersi, concedi i ruoli IAM (Identity and Access Management) appropriati per il progetto.
La tabella seguente mostra i ruoli predefiniti che devi concedere amministratori attendibili per l'inoltro TCP e le attività correlate:
Attività | Ruoli | Ulteriori informazioni |
---|---|---|
Inoltro TCP |
Utente del tunnel con protezione IAP (roles/iap.tunnelResourceAccessor )
|
Vedi Concedere l'accesso a tutte le istanze VM in un progetto o Concedi l'accesso a una VM specifica. |
Accesso SSH |
Amministratore istanze Compute (v1) (roles/compute.instanceAdmin.v1 )
|
|
OS Login (consigliato) | Vari | Vedi Configurazione dei ruoli OS Login per gli account utente. |
Utilizzare un account di servizio | Utente account di servizio (roles/iam.serviceAccountUser ) |
Vedi Il ruolo serviceAccountUser. |
Se vuoi creare ruoli personalizzati con solo le autorizzazioni specifiche necessarie per questa attività, consulta la sezione Dettagli delle autorizzazioni.
Puoi concedere a un utente o a un gruppo l'accesso a tutte le istanze VM di un progetto oppure una VM specifica, a seconda di come concedi i ruoli richiesti.
I tag non sono supportati
Concessione dell'autorizzazione tramite tag per L'inoltro TCP IAP non è attualmente supportato.
Concedi l'accesso a tutte le istanze VM in un progetto
Puoi concedere a un utente o a un gruppo l'accesso a tutte le istanze VM in un progetto concedendo i ruoli IAM richiesti a livello di progetto:
Console
- Apri la pagina IAM e amministrazione nella console Google Cloud.
Apri la pagina IAM e amministrazione
I passaggi rimanenti vengono visualizzati nella console Google Cloud.
- 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.
- Facoltativamente, 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
è una esistente livello di accesso e utilizza 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 questi comandi:
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
.
Concedi l'accesso a una VM specifica
Per concedere a un utente o a un gruppo l'accesso a una VM specifica, devi concedere
il ruolo roles/iap.tunnelResourceAccessor
su quella VM. Gli altri ruoli devono essere
concessi per il progetto.
Console
- Apri la pagina di amministrazione di IAP e seleziona la scheda Risorse SSH e TCP.
Apri la pagina di amministrazione di IAP
I passaggi rimanenti vengono visualizzati nella console Google Cloud.
- 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.
Facoltativamente, 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 Salva.
API
Per modificare il file policy.json
della tua applicazione, procedi nel seguente modo.
Vedi Gestione dell'accesso alle risorse protette da IAP
per ulteriori informazioni sull'uso dell'API IAM per gestire
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 trasformacurl
in POST anziché in 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 ''
Concedi il ruolo
iap.tunnelResourceAccessor
alle entità tramite modificando il file JSON del criterio IAM.Se vuoi, concedi il ruolo solo alle entità che soddisfano specifiche basati su IAM Condizioni e 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, dando loro accesso alle risorse di tunnel protette da IAP. È stata aggiunta una condizione IAM per rendere le risorse accessibile solo alle entità nel gruppo di amministratori delle istanze VM con un indirizzo IP privato di10.0.0.1
sulla porta22
utilizzando Condizioni IAMdestination.ip
edestination.port
. Inoltre devono soddisfare i requisiti delle ACCESS_LEVEL_NAME livello di accesso.Tieni presente che, se un'entità ha Proprietario, dispone dell'autorizzazione per 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 nuovo file
policy.json
utilizzando il metodosetIamPolicy
.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}
Dettagli sulle autorizzazioni
Le autorizzazioni richieste variano a seconda di come un utente utilizzerà l'inoltro TCP IAP:
Scenari | Autorizzazioni obbligatorie | |
---|---|---|
Tutti |
|
|
Uso: gcloud compute [start-iap-tunnel, ssh, scp] |
|
|
Uso: gcloud compute [ssh, scp] |
|
|
VM con OS Login | Consulta queste istruzioni. | |
Mancato utilizzo di OS Login |
|
|
SSH alla 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 che utilizza un account di servizio, l'utente deve disporre delle 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
Tunnel delle connessioni SSH
Puoi connetterti a istanze Linux che non hanno un indirizzo IP esterno con il tunneling del traffico SSH tramite IAP.
Quando utilizzi il tunneling IAP, i proxy IAP si connettono
Indirizzo IPv4 di nic0
sulla VM.
Console
Per connetterti all'istanza, utilizza il pulsante SSH nella console Google Cloud. La configurazione dell'accesso della tua istanza (definito tramite le autorizzazioni IAM) deve consentire il protocollo TCP il tunneling attraverso IAP.
gcloud
Per connetterti all'istanza, utilizza
Comando gcloud compute ssh
. Il tuo
la configurazione dell'accesso dell'istanza
(definito tramite le autorizzazioni IAM) deve consentire il protocollo TCP
il tunneling attraverso IAP.
gcloud compute ssh INSTANCE_NAME
Sostituisci INSTANCE_NAME con il nome dell'istanza in cui accedere tramite SSH.
Se l'istanza non ha un indirizzo IP esterno, la connessione utilizza automaticamente il tunneling TCP IAP. Se l'istanza un indirizzo IP esterno, la connessione utilizza l'indirizzo IP esterno anziché il tunneling TCP IAP.
Puoi utilizzare la --tunnel-through-iap
in modo che gcloud compute ssh
utilizzi sempre il tunneling TCP IAP.
Utilizza la --internal-ip
in modo che gcloud compute ssh
non utilizzi mai TCP IAP
tunneling, ma si connette direttamente all'IP interno della VM. Attività
pertanto è utile per i client connessi alla stessa rete VPC
VM di destinazione.
IAP per computer desktop
Puoi usare IAP desktop per connettersi a un'istanza VM mediante l'inoltro TCP SSH e IAP.
Nell'applicazione, seleziona File > Aggiungi un progetto Google Cloud.
Inserisci l'ID o il nome del progetto e fai clic su OK.
Nella finestra Explorer progetti, fai clic con il tasto destro del mouse sull'istanza VM che vuoi connetterti e seleziona Connetti.
Per ulteriori informazioni su IAP per desktop, consulta Pagina del progetto GitHub.
App PuTTY
Puoi configurare l'app dell'emulatore di terminale PuTTY Windows in modo che utilizzi Inoltro TCP IAP per connettersi a un'istanza VM. Il tuo la configurazione dell'accesso dell'istanza (definite tramite le autorizzazioni IAM) deve consentire il tunneling TCP tramite IAP.
Prima di configurare l'app PuTTY, usa il comando gcloud compute ssh
una volta
di disporre di una chiave SSH privata sul computer locale e
la chiave SSH pubblica sia pubblicata su Compute Engine:
Apri un prompt dei comandi ed esegui questo comando per connetterti al 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 del progetto in cui si trova l'istanza VM
- ZONE: zona in cui si trova l'istanza VM
Se necessario, conferma di voler generare chiavi SSH premendo
Y
.Sulla VM, determina il tuo nome utente eseguendo questo comando:
whoami
Dovrai utilizzare questo nome utente in seguito.
Ora puoi configurare l'app PuTTY in modo che utilizzi l'inoltro TCP IAP:
- Apri l'app PuTTY e seleziona la categoria Connessione > Proxy.
Configura le seguenti impostazioni del proxy:
- Per 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 del progetto in cui si trova l'istanza VM
- ZONE: zona in cui si trova l'istanza VM
Per Diagnostica proxy di stampa nella finestra del terminale, seleziona Solo fino all'inizio della sessione.
Seleziona la categoria Connessione > SSH > Autenticità.
Fai clic su Sfoglia e incolla il seguente nome file, 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 usare direttamente il comando ssh con un'opzione ProxyCommand
che usa gcloud
per avviare il tunnel. Usa questo comando per generare il comando ssh
completo:
gcloud compute ssh INSTANCE_NAME --dry-run
tunneling delle connessioni RDP
Puoi connetterti a istanze Windows che non hanno un indirizzo IP esterno mediante il tunneling del traffico RDP attraverso IAP:
IAP per computer desktop
Puoi usare IAP desktop per la connessione al desktop remoto di una o più istanze VM utilizzando l'inoltro TCP IAP.
Nell'applicazione, seleziona File > Aggiungi un progetto Google Cloud.
Inserisci l'ID o il nome del progetto e fai clic su OK.
Nella finestra Explorer progetti, fai clic con il tasto destro del mouse sull'istanza VM che vuoi connetterti e seleziona Connetti.
Per ulteriori informazioni su IAP per desktop, consulta Pagina del progetto GitHub.
gcloud
Per connetterti al desktop remoto di un'istanza VM, devi prima creare un tunnel.
Utilizza la
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 che hai a cui vuoi connetterti. Sostituisci LOCAL_PORT con localhost porta a cui vuoi che il proxy sia associato o che utilizzi 0 per averne uno inutilizzato viene selezionata automaticamente. Sostituisci ZONE con la zona in cui si trova un'istanza VM.
gcloud
esegue un test di connettività con l'istanza VM, poi apre una e mostra un numero di porta.Listening on port [LOCAL_PORT].
Tutto il traffico inviato a localhost:LOCAL_PORT viene inoltrato a di un'istanza VM. La porta è accessibile solo dalle applicazioni in esecuzione sul tuo computer locale.
Lascia
gcloud
in esecuzione e apri Microsoft Windows Remote Desktop Connessione.Inserisci l'endpoint del tunnel come nome del computer:
localhost:LOCAL_PORT
Sostituisci LOCAL_PORT con il numero di porta mostrato durante il tunnel è stato aperto da
gcloud
.Fai clic su Connetti.
tunneling di altre connessioni TCP
È possibile utilizzare l'inoltro TCP IAP per altri protocolli basati su TCP
utilizzando
gcloud compute start-iap-tunnel
per allocare una porta locale. Il porto locale trasferisce il traffico di dati dalla
dalla macchina locale alla macchina remota in un flusso HTTPS. IAP
riceve i dati, applica i controlli di accesso e inoltra i dati di cui è stato eseguito il wrapping
alla porta remota. Al contrario, tutti i dati provenienti dalla porta remota vengono
prima di essere inviato alla porta locale, dove verrà
eseguito l'unwrapping.
gcloud
Crea un tunnel criptato verso 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 dove vuoi che sia il proxy limitato. Sostituisci ZONE con la zona in cui si trova l'istanza VM individuarlo.
gcloud
esegue un test di connettività con l'istanza VM, poi apre una
e mostra un numero di porta.
Listening on port [LOCAL_PORT].
Tutto il traffico inviato a localhost:LOCAL_PORT viene inoltrato alla VM in esecuzione in un'istanza Compute Engine. La porta è accessibile solo dalle applicazioni in esecuzione sul tuo computer.
Aumento della larghezza di banda per il caricamento TCP IAP
Per aumentare la larghezza di banda per il caricamento TCP IAP, valuta 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, consulta: NumPy.org
Se il messaggio di errore persiste dopo l'installazione di NumPy, completa il seguente passaggio: Esegui questo comando 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 PowerShell:
start (gcloud info --format="value(basic.python_location)") "-m pip install numpy"Per ulteriori informazioni, consulta: 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 inoltro TCP di IAP non è prevista per il trasferimento collettivo dei dati. IAP si riserva il diritto di limita la frequenza degli utenti che abusano di questo servizio.
Durata della connessione: IAP disconnette automaticamente le sessioni.
dopo un'ora di inattività. Attualmente gcloud compute start-iap-tunnel
tenta di ristabilire il tunnel se viene disconnesso.
Passaggi successivi
Visualizza le richieste di accesso abilitando Cloud Audit Logs.
Configura i Controlli di servizio VPC per proteggere progetto con IAP per TCP.