Utilizzo di IAP per inoltro TCP

Questa pagina spiega come utilizzare l'inoltro TCP di Identity-Aware Proxy (IAP) per abilitare l'accesso amministrativo alle istanze VM che non dispongono di indirizzi IP esterni o che non consentono l'accesso diretto su internet.

L'inoltro TCP IAP consente di stabilire un tunnel criptato tramite cui puoi inoltrare SSH, RDP e altro traffico alle istanze VM. L'inoltro TCP IAP offre inoltre un controllo granulare sugli utenti autorizzati a stabilire i tunnel e sulle istanze VM a cui gli utenti sono autorizzati a connettersi.

Per scoprire di più su come funziona l'inoltro TCP di IAP, consulta la panoramica dell'inoltro TCP.

Preparazione del progetto per l'inoltro TCP di IAP

Questa sezione descrive i passaggi necessari per abilitare l'inoltro TCP di IAP 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.

    Per le VM IPv6, utilizza il seguente intervallo IP: 2600:2d00:1:7::/64.

  • 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 porta 3389 per RDP.

Console

Per consentire l'accesso RDP e SSH a tutte le istanze VM della tua rete, procedi nel seguente modo:

  1. Apri la pagina Regole firewall.

    Apri la pagina Regole firewall

    I passaggi rimanenti vengono visualizzati nella console Google Cloud .

  2. Seleziona un Google Cloud progetto.
  3. Nella pagina Regole firewall, fai clic su Crea regola firewall.
  4. 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 3389,22 per consentire sia RDP che SSH.
  5. Fai clic su Crea.

gcloud

Per consentire l'accesso RDP a tutte le istanze VM della 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 l'inoltro TCP IAP

Per controllare quali utenti e gruppi sono autorizzati a utilizzare l'inoltro TCP IAP e a quali istanze VM sono autorizzati a connettersi, concedi i ruoli IAM (Identity and Access Management) appropriati per il progetto.

Se utilizzi OS Login (consigliato), consulta la sezione Configurazione dei ruoli OS Login sugli account utente.

La seguente tabella mostra i ruoli predefiniti che devi concedere agli 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) Consulta Concedere l'accesso a tutte le istanze VM di un progetto o Concedere l'accesso a una VM specifica.
Accesso SSH Amministratore istanze Compute (v1) (roles/compute.instanceAdmin.v1)
Utilizzare un account di servizio Service Account User (roles/iam.serviceAccountUser) Vedi Il ruolo serviceAccountUser.

Se vuoi creare ruoli personalizzati con solo le autorizzazioni specifiche necessarie per questa attività, consulta Dettagli delle autorizzazioni.

Puoi concedere a un utente o a un gruppo l'accesso a tutte le istanze VM di un progetto o a una VM specifica, a seconda di come concedi i ruoli richiesti.

I tag non sono supportati

La concessione dell'autorizzazione tramite tag per l'inoltro TCP di IAP non è attualmente supportata.

Concedi l'accesso a tutte le istanze VM di un progetto

Puoi consentire a un utente o a un gruppo l'accesso a tutte le istanze VM di un progetto concedendo i ruoli IAM richiesti a livello di progetto:

Console

  1. 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 .

  2. 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.
  3. 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

  4. Fai clic su Aggiungi un altro ruolo e configura quanto segue:
    • Seleziona un ruolo Seleziona Compute Engine > Compute Instance Admin (v1).
  5. Fai clic su Salva.

gcloud

Concedi i due ruoli all'utente eseguendo i seguenti 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 progetto
  • EMAIL: l'indirizzo email dell'utente a cui vuoi concedere l'accesso, ad esempio user@example.com.

Concedi l'accesso a una VM specifica

Per concedere a un utente o a un gruppo l'accesso a una VM specifica, concedi il ruolo roles/iap.tunnelResourceAccessor su quella VM. Gli altri ruoli devono essere concessi sul progetto.

Console

  1. 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 .

  2. Nella scheda Risorse SSH e TCP della pagina di amministrazione di IAP, seleziona le istanze VM da configurare.
  3. Se il riquadro informazioni non è visibile, fai clic su Mostra riquadro informazioni.
  4. 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.
  5. 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.

  6. Fai clic su Salva.

API

Per modificare il file policy.json della tua applicazione, segui la procedura riportata di seguito. Per ulteriori informazioni sull'utilizzo dell'API IAM per gestire i criteri di accesso, consulta la pagina Gestione dell'accesso alle risorse protette da IAP.

  1. 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
    

  2. Recupera la policy IAM per l'istanza Compute Engine utilizzando il metodo getIamPolicy. Il bit di dati vuoto alla fine trasforma la richiesta curl in POST anziché 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 ''

  3. Concedi il ruolo iap.tunnelResourceAccessor alle tue entità modificando il file JSON dei criteri IAM.

  4. 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 ruolo iap.tunnelResourceAccessor a un gruppo di amministratori di istanze VM, che hanno accesso alle risorse tunnel protette da IAP. È stata aggiunta una condizione IAM per rendere le risorse accessibili solo ai principal nel gruppo di amministratori delle istanze VM con un indirizzo IP privato 10.0.0.1 sulla porta 22 utilizzando le condizioni IAM destination.ip e destination.port. Devono inoltre soddisfare i requisiti del livello di accesso ACCESS_LEVEL_NAME.

    Tieni presente che se un'entità ha il ruolo Proprietario, ha l'autorizzazione per utilizzare IAP per l'inoltro TCP.


    File policy.json di esempio

    {
      "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 una policy , chiama il numero accessPolicies.list:

    GET https://accesscontextmanager.googleapis.com/v1/accessPolicies
    
  5. Imposta il nuovo file policy.json utilizzando il metodo setIamPolicy.

    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 di IAP:

Scenari Autorizzazioni obbligatorie
Tutti
  • iap.tunnelInstances.accessViaIAP
Uso: gcloud compute [start-iap-tunnel, ssh, scp]
  • compute.instances.get
  • compute.instances.list
Uso: gcloud compute [ssh, scp]
  • compute.projects.get
VM che utilizza OS Login Consulta queste istruzioni
Non utilizzo di OS Login
  • compute.instances.setMetadata
  • compute.projects.setCommonInstanceMetadata
  • compute.globalOperations.get
Accedere alla VM tramite SSH utilizzando un account di servizio
  • iam.serviceAccounts.actAs
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 avrebbe bisogno 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

Tunneling delle connessioni SSH

Puoi connetterti alle istanze Linux che non hanno un indirizzo IP esterno tramite il tunneling del traffico SSH tramite IAP.

Quando utilizzi il tunneling IAP, i proxy IAP si connettono all'indirizzo IPv4 interno principale di nic0 sulla VM.

Console

Per connetterti all'istanza, utilizza il pulsante SSH nella consoleGoogle Cloud . La configurazione di accesso della tua 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 di accesso della tua istanza (definita tramite le autorizzazioni IAM) deve consentire il tunneling TCP tramite IAP.

gcloud compute ssh INSTANCE_NAME

Sostituisci INSTANCE_NAME con il nome dell'istanza a cui connetterti tramite SSH.

Se l'istanza non ha un indirizzo IP esterno, la connessione utilizza automaticamente il tunneling TCP IAP. Se l'istanza ha un indirizzo IP esterno, la connessione utilizza l'indirizzo IP esterno anziché il tunneling TCP IAP.

Puoi utilizzare il flag --tunnel-through-iap in modo che gcloud compute ssh utilizzi sempre il tunneling TCP IAP.

Utilizza il flag --internal-ip in modo che gcloud compute ssh non utilizzi mai il tunneling TCP di IAP e si connetta direttamente all'IP interno della VM. Questa operazione è utile per i client connessi alla stessa rete VPC della VM di destinazione.

IAP Desktop

Puoi utilizzare IAP Desktop per connetterti a un'istanza VM utilizzando SSH e IAP TCP forwarding.

  1. Nell'applicazione, seleziona File > Aggiungi progetto Google Cloud.

  2. Inserisci l'ID o il nome del progetto e fai clic su Ok.

  3. Nella finestra Project Explorer (Esplora progetti), fai clic con il tasto destro del mouse sull'istanza VM a cui vuoi connetterti e seleziona Connect (Connetti).

IAP Desktop

Per saperne di più su IAP Desktop, consulta la pagina del progetto su GitHub.

App PuTTY

Puoi configurare l'app emulatore di terminale PuTTY per Windows in modo che utilizzi l'inoltro TCP di IAP per connettersi a un'istanza VM. La configurazione di 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 computer locale e che la chiave SSH pubblica sia pubblicata su Compute Engine:

  1. 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: il nome dell'istanza a cui connettersi
    • PROJECT_ID: l'ID progetto del progetto in cui si trova l'istanza VM
    • ZONE: la zona in cui si trova l'istanza VM

    Se necessario, conferma di voler generare le chiavi SSH premendo Y.

  2. Sulla VM, determina il tuo nome utente eseguendo questo comando:

    whoami

    Avrai bisogno di questo nome utente in un secondo momento.

Ora puoi configurare l'app PuTTY per utilizzare l'inoltro TCP di IAP:

  1. Apri l'app PuTTY e seleziona la categoria Connessione > Proxy.
  2. 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: l'ID progetto del progetto in cui si trova l'istanza VM
      • ZONE: la zona in cui si trova l'istanza VM
    • Per Stampa diagnostica proxy nella finestra del terminale, seleziona Solo fino all'inizio della sessione.

  3. Seleziona la categoria Connection (Connessione) > SSH > Auth (Autenticazione).

  4. Fai clic su Sfoglia, incolla il seguente nome file e poi fai clic su Apri:

    %USERPROFILE%\.ssh\google_compute_engine.ppk
  5. Seleziona la categoria Sessione.

  6. 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 determinato in precedenza
      • INSTANCE_NAME: il nome dell'istanza VM a cui vuoi connetterti
    • Sessioni salvate: inserisci un nome per la sessione.

  7. Fai clic su Salva.

  8. Fai clic su Apri per avviare la sessione SSH.

ssh

Puoi utilizzare direttamente il comando ssh con un'opzione ProxyCommand che utilizza gcloud per avviare il tunnel. Utilizza questo comando per generare il comando ssh completo:

gcloud compute ssh INSTANCE_NAME --dry-run

Tunneling delle connessioni RDP

Puoi connetterti alle istanze Windows che non hanno un indirizzo IP esterno tramite il tunneling del traffico RDP tramite IAP:

IAP Desktop

Puoi utilizzare IAP Desktop per connetterti al desktop remoto di una o più istanze VM utilizzando il forwarding TCP di IAP.

  1. Nell'applicazione, seleziona File > Aggiungi progetto Google Cloud.

  2. Inserisci l'ID o il nome del progetto e fai clic su Ok.

  3. Nella finestra Project Explorer (Esplora progetti), fai clic con il tasto destro del mouse sull'istanza VM a cui vuoi connetterti e seleziona Connect (Connetti).

IAP Desktop

Per saperne di più su IAP Desktop, consulta la pagina del progetto su GitHub.

gcloud

Per connetterti al desktop remoto di un'istanza VM, devi prima creare un tunnel.

  1. Utilizza il comando gcloud compute start-iap-tunnel per creare un tunnel criptato sulla 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 a cui vuoi che il proxy sia associato o utilizza 0 per selezionarne automaticamente una non utilizzata. Sostituisci ZONE con la zona in cui si trova l'istanza VM.

  2. 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 tuo computer locale.

  3. Lascia gcloud in esecuzione e apri l'app Connessione desktop remoto di Microsoft Windows.

  4. Inserisci l'endpoint del tunnel come nome computer:

    localhost:LOCAL_PORT

    Sostituisci LOCAL_PORT con il numero di porta visualizzato quando il tunnel è stato aperto da gcloud.

  5. Fai clic su Connetti.

Tunneling di altre connessioni TCP

Puoi utilizzare l'inoltro TCP di IAP per altri protocolli basati su TCP utilizzando il comando gcloud compute start-iap-tunnel per allocare una porta locale. La porta locale incanala il traffico di dati dalla macchina locale alla macchina remota in un flusso HTTPS. IAP riceve quindi i dati, applica i controlli dell'accesso e inoltra i dati decriptati alla porta remota. Al contrario, tutti i dati della porta remota vengono anche incapsulati prima di essere inviati alla porta locale, dove vengono poi decapsulati.

gcloud

Crea un tunnel criptato a 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 alle applicazioni in esecuzione sul computer locale.

Aumentare la larghezza di banda di caricamento TCP IAP

Per aumentare la larghezza di banda di caricamento TCP di IAP, valuta l'installazione di NumPy sulla stessa macchina in cui è installata gcloud CLI.

Linux

Per installare NumPy utilizzando pip nelle piattaforme Unix, esegui questo comando in una nuova istanza del terminale:

$(gcloud info --format="value(basic.python_location)") -m pip install numpy
Per ulteriori informazioni, visita il sito 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 sulle piattaforme Windows, esegui questo comando in una nuova istanza di PowerShell:

start (gcloud info --format="value(basic.python_location)") "-m pip install numpy"
Per ulteriori informazioni, visita il sito NumPy.org

Se il messaggio persiste anche 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 è pensata per il trasferimento collettivo di dati. IAP si riserva il diritto di limitare la frequenza degli utenti che utilizzano in modo improprio 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 la connessione viene interrotta.

Passaggi successivi