Questo documento descrive le best practice per connettersi in modo sicuro alle istanze di macchine virtuali (VM) Compute Engine, tra cui l'archiviazione delle chiavi host attivando gli attributi guest e impedendo alle VM di essere raggiungibili da internet pubblico.
Prima di iniziare
-
Se non l'hai ancora fatto, configura l'autenticazione.
L'autenticazione è
il processo mediante il quale la tua identità viene verificata per l'accesso ai Google Cloud servizi e alle API.
Per eseguire codice o esempi da un ambiente di sviluppo locale, puoi autenticarti su
Compute Engine selezionando una delle seguenti opzioni:
Select the tab for how you plan to use the samples on this page:
Console
When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.
gcloud
-
After installing the Google Cloud CLI, initialize it by running the following command:
gcloud init
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
- Set a default region and zone.
- Debian
- Ubuntu
- Red Hat Enterprise Linux (RHEL)
- CentOS
- SUSE Linux Enterprise Server (SLES)
Prima di avviare la VM per la prima volta, attiva gli attributi guest su VM selezionate durante la creazione della VM o sull'intero progetto.
Connettiti alla VM utilizzando
gcloud compute ssh
.Assicurati di avere l'ultima versione di Google Cloud CLI:
gcloud components update
Connettiti alla VM:
gcloud compute ssh --project=PROJECT_ID \ --zone=ZONE \ VM_NAME
Sostituisci quanto segue:
PROJECT_ID
: l'ID del progetto che contiene la VMZONE
: il nome della zona in cui si trova la VMVM_NAME
: il nome della VM
Se hai impostato proprietà predefinite per Google Cloud CLI, puoi omettere i flag
--project
e--zone
da questo comando. Ad esempio:gcloud compute ssh VM_NAME
Rivedi il messaggio di avvio. Ad esempio, un sistema operativo Debian potrebbe mostrare il seguente messaggio:
Writing 3 keys to YOUR_HOME_DIRECTORY/.ssh/google_compute_known_hosts Linux host-key-2 4.9.0-9-amd64 #1 SMP Debian 4.9.168-1+deb9u3 (2019-06-16) x86_64
VM_NAME
: il nome della VMZONE
: il nome della zona in cui si trova la VM- Visualizza l'output della porta seriale.
- Seleziona porta seriale 1.
Cerca il seguente messaggio:
INFO Wrote ssh-rsa host key to guest attributes
Se la tua immagine utilizza un sistema operativo supportato, ma l'impostazione degli attributi guest non è stata abilitata prima del primo avvio della VM, potresti visualizzare il seguente messaggio:
Unable to write ssh-rsa host key to guest attributes
Ciò significa che le chiavi host non vengono archiviate come attributi guest per questa VM. Se vuoi archiviare le chiavi host per altre VM che prevedi di creare, attiva gli attributi guest prima del primo avvio della VM.
- I servizi web sono ancora in fase di sviluppo e non sono pronti per essere esposti a utenti esterni perché le funzionalità sono incomplete o non sono ancora stati configurati con HTTPS.
- La VM potrebbe fornire servizi progettati per essere utilizzati solo da altre VM nel progetto.
- Le VM devono essere raggiungibili solo tramite opzioni di interconnessione dedicate dagli uffici o dai data center dell'azienda.
- Registrare un nome di dominio.
- Acquista un certificato SSL da un'autorità di certificazione.
- Registra il certificato con il bilanciatore del carico HTTPS e le relative VM connesse oppure configura un server web o un proxy con terminazione SSL su una o più VM Compute Engine.
VM_NAME
è il nome della VM a cui vuoi connetterti.PROJECT_ID
è il tuo Google Cloud ID progetto.ZONE
: la zona in cui è in esecuzione la VM, ad esempious-central1-a
.LOCAL_PORT
: la porta locale su cui stai ascoltando, ad esempio,2222
.REMOTE_PORT
: la porta remota a cui ti connetti, ad esempio8888
.- Configura un singolo tunnel SSH a uno degli host sulla rete e crea un proxy SOCKS su quell'host.
- Modifica la configurazione del browser per eseguire tutte le ricerche utilizzando l'host proxy SOCKS.
VM_NAME
: il nome della VM a cui vuoi connetterti.PROJECT_ID
: il tuo Google Cloud ID progetto.ZONE
: la zona in cui è in esecuzione la VM, ad esempious-central1-a
.LOCAL_PORT
: la porta locale su cui stai ascoltando, ad esempio,1080
.- Apri Preferenze.
- Fai clic su Avanzate > Reti > Impostazioni per aprire la finestra di dialogo Impostazioni di connessione.
- Scegli l'opzione Configurazione manuale del proxy.
- Nella sezione Host SOCKS, inserisci
localhost
come host e la porta che hai selezionato quando hai eseguito il comandogcloud
in precedenza. - Scegli SOCKS v5.
- Seleziona la casella DNS remoto.
- Lascia vuote tutte le altre voci.
- Nella sezione Host SOCKS, inserisci
- Fai clic su Ok e chiudi la finestra di dialogo Preferenze.
- Altre VM sulla rete
- Funzionalità di inoltro TCP di Identity-Aware Proxy
- Il server dei metadati
- Google Cloud SDK
- Gateway VPN gestito
- Limita l'intervallo CIDR degli IP di origine che possono comunicare con il bastion host.
- Configura le regole firewall per consentire il traffico SSH alle VM private solo dal bastion host.
Memorizzazione delle chiavi host attivando gli attributi guest
Una chiave host è una coppia di chiavi che identifica un particolare host o macchina. Quando ti connetti a un host remoto, la chiave host viene utilizzata per verificare che la connessione sia stabilita con la macchina prevista.
Se utilizzi
gcloud compute ssh
per connetterti alle tue VM Linux, puoi aggiungere un livello di sicurezza memorizzando le chiavi host come attributi guest.L'archiviazione delle chiavi host SSH come attributi guest migliora la sicurezza delle connessioni contribuendo a proteggere da vulnerabilità come gli attacchi man-in-the-middle (MITM). Al primo avvio di una VM, se gli attributi guest sono abilitati, Compute Engine archivia le chiavi host generate come attributi guest. Dopodiché, Compute Engine utilizza queste chiavi host archiviate per verificare tutte le connessioni successive alla VM.
Le chiavi host possono essere archiviate come attributi guest nelle seguenti immagini del sistema operativo pubblico:
Per scrivere le chiavi host negli attributi guest, devi abilitare gli attributi guest prima di avviare la VM per la prima volta. Puoi attivare gli attributi guest su VM selezionate durante la creazione della VM o sull'intero progetto.
Dopo aver abilitato gli attributi guest per un progetto o una VM, l'agente del sistema operativo guest pubblica automaticamente la chiave host come attributo guest. Se utilizzi
gcloud compute ssh
anziché un semplice client SSH, gcloud CLI legge automaticamente gli attributi e aggiorna il fileknown_hosts
al successivo tentativo di connessione.Per archiviare le chiavi host come attributi guest, completa i seguenti passaggi:
Per verificare che le chiavi host siano archiviate come attributi guest per questa VM, esamina i valori delle chiavi host per verificare che le chiavi SSH siano scritte negli attributi guest per la VM (opzione 1) oppure esamina la porta seriale per la presenza di chiavi host (opzione 2):
Opzione 1: rivedi i valori delle chiavi host
Puoi utilizzare Google Cloud CLI per verificare che le chiavi SSH siano scritte negli attributi guest:
gcloud compute instances get-guest-attributes VM_NAME \ --query-path="hostkeys/" \ --zone=ZONE
Sostituisci quanto segue:
L'output è simile al seguente:
NAMESPACE KEY VALUE hostkeys ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBBJAGpTm V3mFxBTHK1NIu9a7kVQWaHsZVaFUsqF8cLxQRQ+N96/Djiiuz1tucHQ8vBTJI= hostkeys ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIM/WYBn3jIEW5t3BZumx0X/Htm61J6S9FcU8L hostkeys ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDU3jReR/MoSttlWYfauW6qEqS2dhe5 Zdd3guYk2H7ZyxblNuP56nOl/IMuniVmsFa9v8W6MExViu6G5Cy4iIesot09 1hsgkG0U7sbWrXM10PQ8pnpI3B5arplCiEMhRtXy64rlW3Nx156bLdcxv5l+ 7Unu4IviKlY43uqqwSyTv+V8q4ThpQ9dNbk1Gg838+KzazljzHahtbIaE1rm I0L1lUqKiKLSLKuBgrI2Y/WSuqvqGEz+bMH7Ri4ht+7sAwykph6FbOgKqoBI hVWBo38/Na/gEuvtmgULUwK+xy9zWg9k8k/Qtihc6El9GD9y
Opzione 2: controlla la porta seriale
Impedire che le VM siano raggiungibili da internet pubblico
Quando sviluppi progetti su Compute Engine, esistono vari scenari in cui vuoi impedire che le VM siano raggiungibili da internet pubblico:
Anche quando un servizio è intenzionalmente rivolto a internet, è importante che la comunicazione con il servizio sia limitata ai gruppi di utenti target e avvenga su canali sicuri, come SSH o HTTPS, per proteggere le informazioni sensibili.
Questo articolo illustra diversi metodi per proteggere le comunicazioni con le VM con indirizzi IP esterni e le VM senza indirizzi IP esterni. Indipendentemente dal fatto che tu protegga le comunicazioni con questi metodi, Google Cloud consente sempre la comunicazione tra un'istanza VM e il relativo server metadati. Per maggiori informazioni, vedi Traffico sempre consentito.
Protezione dei servizi sulle macchine con indirizzi IP esterni
Quando le VM hanno un indirizzo IP pubblico, è importante che siano raggiungibili solo i servizi e il traffico che intendi esporre e che, per quelli esposti, tutte le informazioni sensibili siano protette durante il transito. In questo documento sono descritti diversi metodi per proteggere i servizi sulle VM con indirizzi IP esterni, tra cui firewall, HTTPS e SSL, port forwarding tramite SSH e proxy SOCKS tramite SSH.
Firewall
La tua prima linea di difesa è limitare chi può raggiungere la VM utilizzando i firewall. Creando regole firewall, puoi limitare tutto il traffico a una rete o macchine di destinazione su un determinato insieme di porte a indirizzi IP di origine specifici.
I firewall non sono una soluzione autonoma. La limitazione del traffico a indirizzi IP di origine specifici non protegge le informazioni sensibili, come credenziali di accesso, comandi che creano o eliminano risorse o file oppure log. Quando esegui un servizio web su una macchina accessibile pubblicamente, ad esempio una VM di Compute Engine con un IP esterno, devi criptare tutte le comunicazioni tra l'host e la VM di cui è stato eseguito il deployment per garantire una sicurezza adeguata.
Inoltre, i firewall non sono sempre la soluzione appropriata. Ad esempio, i firewall non sono ideali per gli ambienti di sviluppo che non hanno indirizzi IP statici, come i laptop in roaming.
HTTPS e SSL
Per i sistemi web di produzione, devi configurare HTTPS/SSL. HTTPS/SSL può essere configurato impostando una VM per terminare HTTPS o configurando il bilanciamento del carico HTTPS. HTTPS/SSL comporta una certa complessità iniziale, in quanto richiede di eseguire le seguenti attività:
Port forwarding tramite SSH
Puoi utilizzare Google Cloud CLI per avviare un server su una determinata porta locale che inoltra tutto il traffico a un host remoto tramite una connessione SSH.
Innanzitutto, prendi nota della VM e della porta che forniscono il servizio a cui vuoi stabilire una connessione sicura. Quindi, esegui il comando seguente:
gcloud compute ssh VM_NAME \ --project PROJECT_ID \ --zone ZONE \ -- -NL LOCAL_PORT:localhost:REMOTE_PORT
Sostituisci quanto segue:
Ad esempio, se specifichi una porta locale "2222" e una porta remota "8888", e apri http://localhost:2222/ nel browser, la connessione HTTP utilizza il tunnel SSH che hai creato all'host remoto per connettersi alla VM specificata tramite SSH. La connessione HTTP utilizzerà quindi il tunnel SSH per connettersi alla porta
8888
sulla stessa macchina, ma tramite una connessione SSH criptata e sicura.Il comando
gcloud
crea e gestisce una connessione SSH mentre la sessione SSH è attiva. Non appena esci dalla sessione SSH, il port forwarding tramite http://VM_NAME
:LOCAL_PORT
smette di funzionare.Per creare più di una regola di port forwarding, puoi specificare più regole in una singola riga di comando ripetendo i flag:
gcloud compute ssh VM_NAME \ --project PROJECT_ID \ --zone ZONE \ -- -NL LOCAL_PORT:localhost:REMOTE_PORT \ -- -NL LOCAL_PORT:localhost:REMOTE_PORT
In alternativa, puoi eseguire un nuovo comando
gcloud
ogni volta per creare un tunnel separato. Tieni presente che non puoi aggiungere o rimuovere il port forwarding da una connessione esistente senza uscire e ristabilire la connessione da zero.Proxy SOCKS su SSH
Se vuoi connetterti a un numero di host diversi nel tuo deployment cloud, il modo più semplice è modificare il browser in modo che esegua le ricerche direttamente dalla tua rete. Questo approccio ti consente di utilizzare il nome breve degli host anziché cercare l'indirizzo IP di ciascun host, aprire le porte per ogni servizio o creare un tunnel SSH per ogni coppia host/porta.
L'approccio che utilizzi qui è il seguente:
Tieni presente che, poiché esegui il tunneling di tutto il traffico utilizzando questo host, evita di utilizzare questo browser o questo profilo specifico per navigare sul web, perché devi dedicare la larghezza di banda al tuo servizio cloud. In generale, ti consigliamo di utilizzare un profilo del browser separato e di passare a questo profilo quando necessario.
Avvia il proxy SOCKS
Per avviare il proxy SOCKS, esegui questo comando:
gcloud compute ssh VM_NAME \ --project PROJECT_ID \ --zone ZONE --ssh-flag="-D" \ --ssh-flag="LOCAL_PORT" \ --ssh-flag="-N"
Sostituisci quanto segue:
Tieni presente che, in questo caso, non è necessario specificare una porta remota. Poiché un proxy SOCKS non si associa a una porta remota specifica, qualsiasi connessione effettuata utilizzando il proxy SOCKS verrà risolta in relazione all'host a cui ti connetti.
Utilizzando un proxy SOCKS, puoi connetterti a qualsiasi VM che condivida una rete Compute Engine con la tua VM proxy utilizzando il nome breve della VM. Inoltre, puoi connetterti a qualsiasi porta di una determinata VM.
Questo approccio è molto più flessibile del semplice metodo di port forwarding, ma richiede anche di modificare le impostazioni del browser web per utilizzare il proxy.
Poi, configura Chrome o Firefox per utilizzare il proxy.
Chrome
Chrome utilizza le impostazioni proxy a livello di sistema per impostazione predefinita, quindi devi specificare un proxy diverso utilizzando i flag della riga di comando. L'avvio di Chrome per impostazione predefinita crea una VM di un profilo già in esecuzione, quindi per consentirti di eseguire più copie di Chrome contemporaneamente, una che utilizza il proxy e altre che non lo utilizzano, hai bisogno di un nuovo profilo.
Avvia Chrome utilizzando un nuovo profilo. Verrà creato automaticamente se non esiste.
Linux:
/usr/bin/google-chrome \ --user-data-dir="$HOME/chrome-proxy-profile" \ --proxy-server="socks5://localhost:1080"
macOS:
"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" \ --user-data-dir="$HOME/chrome-proxy-profile" \ --proxy-server="socks5://localhost:1080"
Windows:
"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" ^ --user-data-dir="%USERPROFILE%\chrome-proxy-profile" ^ --proxy-server="socks5://localhost:1080"
Imposta la porta localhost sullo stesso valore utilizzato nel comando
gcloud
precedente (1080
nel nostro esempio).Firefox
Prima di modificare queste impostazioni, ti consigliamo di creare un nuovo profilo Firefox. In caso contrario, tutte le VM di Firefox utilizzeranno questo host come proxy, il che probabilmente non è quello che vuoi.
Dopo aver eseguito Firefox con un profilo separato, puoi configurare il proxy SOCKS:
Connessione alle VM senza indirizzi IP esterni
Quando le VM non hanno indirizzi IP esterni (incluse le VM che sono backend per i bilanciatori del carico HTTPS e proxy SSL), possono essere raggiunte solo da:
Puoi eseguire il provisioning delle VM nella tua rete in modo che fungano da relè attendibili per le connessioni in entrata, noti anche come bastion host. Inoltre, puoi configurare un Cloud NAT per il traffico di rete in uscita o configurare la console seriale interattiva per gestire o risolvere i problemi delle VM senza indirizzi IP esterni.
Bastion host
I bastion host forniscono un punto di accesso rivolto verso l'esterno per entrare in una rete che contiene istanze di rete private, come illustrato nel seguente diagramma.
Questo host può fornire un unico punto di fortificazione o controllo e può essere avviato e arrestato per attivare o disattivare l'SSH in entrata. Utilizzando un bastion host, puoi connetterti a una VM che non ha un indirizzo IP esterno. Questo approccio ti consente di connetterti a un ambiente di sviluppo o gestire l'istanza del database per la tua applicazione esterna, ad esempio, senza configurare regole firewall aggiuntive.
La protezione completa di un bastion host non rientra nell'ambito di questo articolo, ma alcuni passaggi iniziali possono includere:
Per impostazione predefinita, SSH sulle VM è configurato per utilizzare le chiavi private per l'autenticazione. Quando utilizzi un bastion host, accedi prima al bastion host e poi alla VM privata di destinazione. A causa di questo accesso in due passaggi, motivo per cui i bastion host vengono a volte chiamati "server di salto", devi utilizzare l'inoltro
ssh
anziché archiviare la chiave privata della macchina di destinazione sul bastion host come modo per raggiungere la macchina di destinazione. Devi farlo anche se utilizzi la stessa coppia di chiavi sia per le VM bastion che per quelle di destinazione, perché la VM bastion ha accesso diretto solo alla metà pubblica della coppia di chiavi.Per scoprire come utilizzare un'istanza bastion host per connetterti ad altre VM sulla tua rete Google Cloud , consulta Connettiti alle VM Linux utilizzando un bastion host.
Per scoprire come utilizzare l'inoltro
ssh
e altri metodi per connetterti alle VM che non hanno un indirizzo IP esterno, consulta Connessione alle VM che non hanno indirizzi IP esterni.IAP per inoltro TCP
Utilizzando SSH con la funzionalità di inoltro TCP di IAP, si delimita una connessione SSH all'interno di HTTPS. La funzionalità di inoltro TCP di IAP lo invia quindi alla VM remota.
Per scoprire come connetterti a una VM remota con IAP, consulta Connettersi alle VM Linux utilizzando Identity-Aware Proxy.
VPN
Cloud VPN ti consente di connettere la tua rete esistente alla tua reteGoogle Cloud utilizzando una connessione IPsec a un dispositivo gateway VPN. In questo modo, il traffico viene instradato direttamente dai tuoi locali alle interfacce IP private delle VM di Compute Engine. Il traffico viene criptato durante il transito sui link pubblici a Google.
Per informazioni dettagliate su come configurare e utilizzare la VPN con Compute Engine, consulta la documentazione di Cloud VPN.
Per scoprire come connetterti alle VM sulla tua rete Google Cloud tramite una VPN esistente anziché tramite indirizzi IP esterni delle VM, leggi Connettersi alle VM Linux utilizzando Cloud VPN o Cloud Interconnect.
Traffico in uscita che utilizza Cloud NAT
Quando a una VM non è assegnato un indirizzo IP esterno, non può effettuare collegamenti diretti a servizi esterni, inclusi altri servizi Google Cloud. Per consentire a queste VM di raggiungere i servizi sulla rete internet pubblica, puoi configurare Cloud NAT, che può instradare il traffico per conto di qualsiasi VM sulla rete. Non considerare una singola VM ad alta disponibilità o in grado di supportare un'elevata velocità effettiva del traffico per più VM.
Accesso alla console seriale interattiva
Quando una VM non ha un indirizzo IP esterno, potresti comunque dover interagire con la VM per la risoluzione dei problemi o per scopi di manutenzione. La configurazione di un bastion host, come discusso in precedenza, è un'opzione, ma potrebbe richiedere una configurazione più complessa di quanto valga la pena per le tue esigenze. Se vuoi risolvere i problemi relativi a una VM senza un indirizzo IP esterno, valuta la possibilità di abilitare l'accesso interattivo alla console seriale, che ti consente di interagire con la console seriale di una VM utilizzando SSH e di eseguire comandi sulla console seriale.
Per scoprire di più, consulta Interazione con la console seriale.
Bilanciatori del carico HTTPS e del proxy SSL
Le VM che sono backend per i bilanciatori del carico del proxy HTTPS e SSL non devono avere indirizzi IP esterni per essere accessibili tramite il bilanciatore del carico. Per accedere direttamente a queste risorse è necessario utilizzare i metodi elencati nella sezione Connessione alle VM senza indirizzi IP esterni.
Per saperne di più, consulta la documentazione sul bilanciamento del carico per questi bilanciatori del carico.
Salvo quando diversamente specificato, i contenuti di questa pagina sono concessi in base alla licenza Creative Commons Attribution 4.0, mentre gli esempi di codice sono concessi in base alla licenza Apache 2.0. Per ulteriori dettagli, consulta le norme del sito di Google Developers. Java è un marchio registrato di Oracle e/o delle sue consociate.
Ultimo aggiornamento 2025-07-10 UTC.
-