Configura l'inoltro TCP IAP

Questa pagina descrive come configurare e utilizzare l'inoltro TCP di Identity-Aware Proxy (IAP) con un indirizzo IP o un nome host in un ambiente Google Cloud o nonGoogle Cloud .

Panoramica

Puoi utilizzare Google Cloud CLI per creare tunnel alle risorse utilizzando un indirizzo IP privato o un nome host della risorsa. Se hai risorse esterne in ambienti nonGoogle Cloud connessi a Google Cloud tramite Cloud Interconnect o una VPN, puoi utilizzare l'inoltro TCP di IAP con queste risorse.

Prima di iniziare

Se devi eseguire il tunneling alle risorse esterne Google Cloud, devi aver configurato la connettività ibrida. La connettività ibrida è necessaria per connettere le risorse esterne nonGoogle Cloud a Google Cloud. Per ulteriori informazioni, consulta la documentazione di Cloud Interconnect o Cloud VPN.

Il router cloud deve annunciare l'intervallo IP IAP-TCP 35.235.240.0/20, in modo che le destinazioni inviino il traffico di risposta tramite Cloud VPN o Cloud Interconnect e non tramite internet. Se non disponi di questa configurazione, non puoi creare tunnel alle risorse esterne al tuo progetto Google Cloud .

Per configurare il router cloud in modo che annunci l'intervallo IP IAP-TCP 35.235.240.0/20, segui le istruzioni riportate in Annuncio di intervalli IP personalizzati.

Le seguenti procedure forniscono esempi di Google Cloud CLI per completare le attività. Per informazioni su come interagire con i gruppi di destinazione utilizzando le API, consulta Risorsa REST: projects.iap_tunnel.locations.destGroups.

Crea un gruppo di destinazione del tunnel

Quando configuri un tunnel, specifichi un gruppo di destinazione del tunnel da utilizzare per i controlli delle autorizzazioni. I gruppi di destinazione del tunnel rappresentano le risorse che hanno le stesse limitazioni di accesso al tunnel. Puoi creare un numero qualsiasi di gruppi di destinazione, ognuno con un numero qualsiasi di intervalli IP o nomi di dominio completi (FQDN) corrispondenti. I gruppi di destinazioni possono sovrapporsi per una maggiore flessibilità.

Quando crei un gruppo di destinazioni, devi specificare una regione. Per ottenere risultati ottimali, la regione specificata deve corrispondere alla posizione delle risorse di destinazione. Ad esempio, se le risorse sono connesse da una VPN, devi utilizzare la regione del gateway VPN.

Per creare un gruppo di destinazioni, devi disporre dell'autorizzazione iap.tunnelDestGroups.create, che puoi concedere tramite il ruolo iap.tunnelDestGroupEditor. Per concedere un singolo ruolo, consulta Concedi un singolo ruolo nella documentazione di IAM.

Console

  1. Vai alla pagina IAP e seleziona un progetto se non ne è già stato selezionato uno.

  2. Nella scheda Risorse SSH e TCP, fai clic su Crea gruppo di destinazione.

  3. Inserisci un nome per il nome del gruppo. Il nome del gruppo può contenere solo lettere minuscole (a-z) e trattini (-).

  4. Dall'elenco a discesa, seleziona la regione in cui creare il gruppo di destinazione.

  5. Nella sezione Indirizzo IP, fai clic su Aggiungi riga e poi inserisci gli indirizzi IP o i nomi di dominio completi delle risorse.

    Un intervallo IP è costituito da intervalli separati da virgole che utilizzano la notazione CIDR, ad esempio 10.1.2.0/24,172.0.0.0/8.

    Un elenco di nomi di dominio completi è un elenco di nomi host separati da virgole, ad esempio *.internal.company.com. Puoi utilizzare i caratteri jolly con la voce FQDN.

  6. Fai clic su Crea gruppo di destinazioni.

gcloud

gcloud iap tcp dest-groups create YOUR_GROUP_NAME \
  --region=REGION \
  --ip-range-list=IP_RANGE_LIST \
  --fqdn-list=FQDN_LIST

Sostituisci quanto segue:

  • YOUR_GROUP_NAME: il nome del gruppo. Il nome di un gruppo può contenere solo lettere minuscole (a-z) e trattini (-).
  • REGION: la regione in cui creare il gruppo di destinazione, ad esempio us-central1.
  • IP_RANGE_LIST: facoltativo. L'elenco degli intervalli IP, costituito da intervalli separati da virgole che utilizzano la notazione CIDR, ad esempio 10.1.2.0/24,172.0.0.0/8.
  • FQDN_LIST: facoltativo. L'elenco dei nomi di dominio completi è un elenco separato da virgole di nomi host, ad esempio *.internal.company.com. Se una voce FQDN ha un prefisso jolly, corrisponderà a qualsiasi nome host con il finale specificato. In caso contrario, è richiesta una corrispondenza esatta. Se una richiesta corrisponde a un intervallo IP o a un FQDN, viene considerata una corrispondenza.

Se non sai quali gruppi esistono già, esegui il seguente comando per elencare i gruppi:

gcloud iap tcp dest-groups list \
  --region=REGION

Gestire i gruppi di destinazione tunnel

Puoi visualizzare i dettagli di un gruppo di destinazione, modificarlo e rimuoverlo.

Console

  1. Vai alla pagina IAP e fai clic sulla scheda Risorse SSH e TCP.

    • Per visualizzare i dettagli di un gruppo di destinazioni, fai clic sul nome del gruppo di destinazioni.

    • Per modificare un gruppo di destinazioni, selezionalo e fai clic sull'icona a forma di matita per aprire il riquadro Modifica gruppo di destinazioni. Puoi anche eliminare il gruppo di destinazione da questo riquadro.

    • Per rimuovere un gruppo di destinazioni, selezionalo e fai clic sull'icona del cestino.

gcloud

Per informazioni dettagliate su come gestire i gruppi di destinazione utilizzando gcloud CLI, consulta Comandi gcloud per i gruppi di destinazione.

Configurazione delle autorizzazioni del tunnel

Per creare un tunnel, devi disporre dell'autorizzazione iap.tunnelDestGroups.accessViaIAP sul gruppo di destinazione pertinente. Puoi concedere l'autorizzazione tramite il ruolo iap.tunnelResourceAccessor.

Per configurare le autorizzazioni sui gruppi di destinazione, devi disporre dell'autorizzazione iap.tunnelDestGroups.setIamPolicy, che puoi concedere tramite il ruolo iap.admin.

Console

  1. Vai alla pagina IAP.

  2. Nella scheda Risorse SSH e TCP, seleziona il gruppo di destinazione per cui vuoi configurare le autorizzazioni.

  3. Nel riquadro che si apre, fai clic su Aggiungi entità e inserisci un indirizzo email per l'utente.

  4. Nella sezione Assegna ruoli, seleziona un ruolo da assegnare all'entità.

  5. Fai clic su Salva.

gcloud

gcloud iap tcp dest-groups add-iam-policy-binding \
  --member=MEMBER \
  --role=ROLE \
  --dest-group=GROUP_NAME \
  --region=REGION

Sostituisci quanto segue:

  • MEMBER: l'indirizzo email dell'utente, ad esempio user:exampleuser@company.com.

  • ROLE: il ruolo IAP richiesto, roles/iap.tunnelResourceAccessor.

  • GROUP_NAME: il nome del gruppo di destinazione.

  • REGION: il nome della regione, ad esempio us-central1.

Informazioni sull'utilizzo del tunnel

Esistono tre comandi gcloud CLI che puoi utilizzare quando lavori con IAP-TCP: start-iap-tunnel, ssh e scp.

I comandi IAP-TCP sono stati aggiornati per supportare il tunneling basato su IP e FQDN. Per passare all'indirizzo IP o all'FQDN, esegui le seguenti operazioni quando utilizzi i comandi:

  • Specifica un indirizzo IP o un FQDN anziché il nome dell'istanza.
  • Utilizza --region al posto di --zone.
  • Utilizza --dest-group per specificare il gruppo di destinazione da utilizzare.
  • Utilizza --network per specificare il nome della rete VPC da utilizzare.

L'indirizzo IP specificato deve essere l'indirizzo IP privato della destinazione. Non puoi utilizzare IAP-TCP con indirizzi IP pubblici. Se utilizzi un FQDN, questo deve essere risolto nell'indirizzo IP privato della destinazione. Tieni presente che la risoluzione dei nomi viene eseguita dall'interno della rete VPC specificata, non dalla rete del client. Ad esempio, se tenti di creare un tunnel per vm.corp.company.com, il passaggio che converte vm.corp.company.com in un indirizzo IP avviene nel contesto della rete VPC.

La regione specificata deve corrispondere a quella del gruppo di destinazione.

La rete specificata deve corrispondere al nome della rete VPC che ha accesso alla destinazione. Un nome di rete tipico è default. Puoi visualizzare l'elenco dei nomi di rete nella pagina Reti VPC della console Google Cloud oppure puoi recuperare l'elenco dei nomi di rete eseguendo il comando seguente:

gcloud compute networks list --format='value(name)'

Esempi

I seguenti esempi utilizzano un indirizzo IP di esempio 172.16.1.2. Ogni comando può anche accettare un FQDN (ad esempio example.internal.company.com) al posto dell'indirizzo IP.

Esempio di SSH

Per avviare una sessione SSH su 172.16.1.2, esegui questo comando:

gcloud compute ssh 172.16.1.2 \
    --region=us-central1 \
    --dest-group=DESTINATION_GROUP_NAME \
    --network=default \
    --tunnel-through-iap

Sostituisci DESTINATION_GROUP_NAME con il nome del gruppo di destinazione.

Tieni presente che --plain è implicito, quindi non viene effettuato alcun tentativo di gestire e inviare automaticamente le chiavi SSH quando viene utilizzato un indirizzo IP.

Se ricevi l'errore Permission denied (publickey), il comando non ha trovato il file che contiene le chiavi SSH. Per risolvere il problema, aggiungi il percorso del file contenente le chiavi private SSH come parametro per il comando SSH, come mostrato nell'esempio seguente:

gcloud compute ssh 172.16.1.2 \
    --region=us-central1 \
    --dest-group=DESTINATION_GROUP_NAME \
    --network=default \
    --tunnel-through-iap \
    -- -i ~/.ssh/google_compute_engine

Sostituisci DESTINATION_GROUP_NAME con il nome del gruppo di destinazione.

Se vuoi accedere come utente specifico, utilizza il formato USER@IP anziché specificare solo l'IP:

gcloud compute ssh user@172.16.1.2 \
    --region=us-central1 \
    --dest-group=DESTINATION_GROUP_NAME \
    --network=default \
    --tunnel-through-iap

Se l'account è protetto da password, devi inserirne una. Se l'account è protetto da una coppia di chiavi SSH privata o pubblica, devi specificarla utilizzando il flag -- -i come indicato sopra.

Esempio di tunnel

Per stabilire un tunnel a una porta TCP diversa, utilizza il comando start-iap-tunnel. Per creare un tunnel da localhost:8022 alla porta 172.16.1.2:8085, esegui il comando seguente:

gcloud compute start-iap-tunnel 172.16.1.2 8085 \
    --local-host-port=localhost:8022 \
    --region=us-central1 \
    --dest-group=DESTINATION_GROUP_NAME \
    --network=default

Tieni presente che in questo esempio la macchina di destinazione deve essere in ascolto sulla porta 8085.

Dopo aver stabilito un tunnel, puoi utilizzare qualsiasi strumento, ad esempio PuTTY, per stabilire una connessione.

Esempio di SCP

Per copiare un file in 172.16.1.2 utilizzando SCP, esegui questo comando:

gcloud compute scp file.txt 172.16.1.2:~/ \
    --region=us-central1 \
    --dest-group=DESTINATION_GROUP_NAME \
    --network=default \
    --tunnel-through-iap

Tieni presente che --plain è implicito, quindi non viene effettuato alcun tentativo di gestire e inviare automaticamente le chiavi SSH quando viene utilizzato un indirizzo IP.

Esempio di ProxyCommand SSH

Per utilizzare il comando come ProxyCommand che esegue sempre il tunneling a 172.16.1.2, aggiungi una voce alla configurazione ~/.ssh/config o equivalente, come mostrato nell'esempio seguente:

Host example
ProxyCommand gcloud compute start-iap-tunnel 172.16.1.2 '%p' --region=us-central1 --dest-group=DESTINATION_GROUP_NAME --network=default --verbosity=warning
  

ProxyCommand ha effetto quando esegui il seguente comando: ssh example

Puoi anche configurare ProxyCommand per gestire molti nomi host, come mostrato nell'esempio seguente:

Host *.internal.company.com
ProxyCommand gcloud compute start-iap-tunnel '%h' '%p' --region=us-central1 --dest-group=DESTINATION_GROUP_NAME --network=default --verbosity=warning

ProxyCommand ha effetto quando esegui il seguente comando: ssh example.internal.company.com