Configura un bastion host

Questa pagina descrive come configurare un bastion host nel deployment connesso di Google Distributed Cloud per consentire agli ingegneri Google di accedere ai nodi nella zona connessa di Distributed Cloud e risolvere i relativi problemi tramite Secure Shell (SSH).

Google fornisce il codice sorgente completo da cui puoi creare una macchina virtuale bastion host personalizzata in base ai requisiti aziendali.

Prerequisiti

Questa sezione elenca i prerequisiti per il deployment della soluzione di bastion host connesso a Distributed Cloud.

Attiva Access Approval

La funzionalità Bastion Host utilizza la funzionalità Approvazione accesso di Access Transparency per consentire a Google di richiedere l'accesso ai tuoi dati. Prima di eseguire il deployment delle macchine virtuali host bastion, devi attivare Access Transparency e Access Approval nel tuo progetto Google Cloud . Per saperne di più, consulta le pagine seguenti:

Specifiche della macchina virtuale

La soluzione bastion host di Distributed Cloud connesso richiede l'equivalente di un deployment OpenStack di dimensioni small con le seguenti specifiche:

  • CPU: 1 vCPU
  • RAM: 2GB
  • Disco: 20 GB

Google consiglia di eseguire il deployment di macchine virtuali bastion host N+1 per Google Cloud regione per una maggiore affidabilità.

Requisiti di networking

La soluzione Distributed Cloud connected bastion host richiede la configurazione delle seguenti sessioni di peering di rete per ogni macchina virtuale bastion host:

  • Direzione nord. Connette la macchina virtuale bastion host a internet. Richiede l'accesso a internet e deve consentire le connessioni sulla porta 22 da indirizzi IP specifici che Google fornisce come parte del pacchetto di codice sorgente e dell'immagine del disco della soluzione bastion host.
  • Direzione sud. Connette la macchina virtuale bastion host sulla porta 22 alle zone connesse Distributed Cloud corrispondenti in una singola regione. Google Cloud
  • Gestione. Collega la macchina virtuale bastion host alla rete locale per scopi di funzionamento e manutenzione. Configura questa sessione di peering in base alle norme di sicurezza della tua organizzazione.

Best practice per la sicurezza

Google consiglia vivamente di seguire le best practice per la sicurezza descritte in questa sezione quando configuri una soluzione bastion host nel deployment connesso di Distributed Cloud, oltre alle norme di sicurezza della tua organizzazione:

  • Segui la regola del privilegio minimo e mantieni una chiara separazione dei compiti per gli utenti.
  • Per tutti gli account utente diversi dall'amministratore, utilizza solo l'autenticazione basata su certificati; disattiva l'autenticazione basata su password e l'accesso root alle macchine virtuali bastion host.
  • Rifiuta l'accesso da tutti gli IP della sessione di peering in direzione nord che non fanno parte dell'elenco di indirizzi IP di assistenza fornito da Google.
  • Chiudi tutte le porte nella sessione di peering in uscita, ad eccezione della porta 22 (SSH), e consentila solo per gli indirizzi IP nell'elenco degli indirizzi IP di assistenza forniti da Google.
  • Mantieni aggiornate tutte le macchine virtuali bastion host. Google fornisce un nuovo pacchetto di codice sorgente con ogni patch di sicurezza e aggiornamento della versione.
  • Configura una soluzione di avviso e controllo che soddisfi le norme di sicurezza della tua organizzazione.

Attiva il supporto del bastion host

Per abilitare il supporto dell'bastion host nella tua implementazione di Distributed Cloud connesso, invia una richiesta.

Devi abilitare e configurare individualmente il supporto dell'bastion host per ciascuna delle tue zone connesse a Distributed Cloud. In questo modo puoi implementare diverse configurazioni di accesso e di rete che si adattano meglio alle esigenze aziendali della tua organizzazione per ogni zona connessa a Distributed Cloud.

Ottieni il software bastion host

Il pacchetto software dell&#bastion host ti viene inviato dopo che l'assistenza Google attiva la funzionalità dell&#39bastion hostn per il deployment connesso a Distributed Cloud. Il pacchetto contiene quanto segue:

  • Codice sorgente. Puoi personalizzare e creare le tue immagini di macchine virtuali bastion host in base alle tue esigenze aziendali.
  • Documentazione. Documentazione aggiuntiva per attività come la configurazione dei certificati.

Crea un'immagine di macchina virtuale bastion host

Questa sezione fornisce una panoramica dei passaggi necessari per creare un'immagine macchina virtuale bastion host dal codice sorgente fornito da Google. Le istruzioni complete sono fornite nel file README fornito con il codice sorgente.

Prerequisiti

Per creare un'immagine macchina virtuale bastion host, sono necessari i seguenti elementi:

  • Una macchina che esegue Debian 11.
  • L'ultima immagine del server cloud Debian.
  • I software qemu-img, qemu-system-x86_x64 e GNU mtools installati sul computer.
  • Un file denominato host-user-key.pub contenente una chiave SSH pubblica per accedere all'istanza bastion host e avviare una sessione host-user. Questa chiave può essere utilizzata per l'autenticazione diretta o come chiave di firma dell'autorità di certificazione. L'istanza bastion host deve considerare attendibile questa CA.
  • Un file denominato admin-user-key.pub contenente una chiave SSH pubblica per l'esecuzione di attività amministrative sull'istanzabastion hostn di destinazione. Questa chiave può essere utilizzata per l'autenticazione diretta o come chiave di firma dell'autorità di certificazione. L'istanza bastion host deve considerare attendibile questa CA.
  • Un file denominato guest-user-key.pub contenente una chiave di firma dell'autorità di certificazione SSH pubblica fornita da Google che consente all'assistenza Google di autenticarsi come guest-user quando si connette all'istanza bastion host.

Crea l'immagine della macchina virtuale

Segui le istruzioni fornite nel file README incluso nel codice sorgente per creare l'immagine della macchina virtuale bastion host dal codice sorgente fornito da Google. Gli esempi in questa guida fanno riferimento al file immagine risultante come bastion-host.img.

Crea il pacchetto HIBA

Crea il pacchetto di installazione Debian per il livello software di autenticazione Host Identity-Based Authorization for SSH (HIBA) nel seguente modo:

  1. Installa le dipendenze richieste utilizzando il seguente comando:

    sudo apt-get install autoconf autogen build-essential git libssl-dev libtool zlib1g-dev
  2. Crea il pacchetto di installazione utilizzando il seguente comando:

    ./build-hiba.sh -j $(nproc) /tmp/hiba-build-workdir

Il pacchetto di installazione viene inserito nella directory /tmp/hiba-build-workdir e viene denominato hiba_x.y-z_amd64.deb, dove x, y e z indicano il numero di versione di HIBA.

Genera le configurazioni cloud-init

Utilizza lo script generate-cloud-init.py per generare le configurazioni cloud-init richieste. Puoi anche generare queste configurazioni utilizzando i tuoi strumenti. Queste configurazioni fanno quanto segue:

  • Crea gli account utente richiesti all'interno dell'immagine della macchina virtuale bastion host e configura questi account con le chiavi SSH descritte in precedenza.
  • Aggiungi uno script che limiti i privilegi dell'account guest-user alla sola partecipazione a una sessione di multiplexer terminale stabilita.
  • Aggiungi script che creano e gestiscono una sessione di multiplexer del terminale.
  • Prepara i file di configurazione HIBA.

Lo script generate-cloud-init.py richiede il pacchetto HIBA creato in precedenza e i tre file contenenti le chiavi SSH richieste. Esegui lo script nel seguente modo:

./generate-cloud-init.py \
    --hiba-package="${WORK_DIR}/hiba_1.0-1_amd64.deb" \
    --host-user-key="HOST_USER_KEY_FILE" \
    --manager-user-key="ADMIN_USER_KEY_FILE" \
    --guest-user-ca="GUEST_USER_KEY_FILE" \
    "${WORK_DIR}/cloud-init/"

Sostituisci quanto segue:

  • HOST_USER_KEY_FILE: il percorso completo e il nome del file host-user-key.pub.
  • ADMIN_USER_KEY_FILE: il percorso completo e il nome del file admin-user-key.pub.
  • GUEST_USER_KEY_FILE: il percorso completo e il nome del file guest-user-key.pub.

Lo script inserisce il file cloud-init.img nella directory cloud-init all'interno della tua directory di lavoro locale.

Applica le configurazioni cloud-init all'immagine della macchina virtuale bastion host

Utilizza lo strumento qemu-system-x86_64 per applicare le configurazioni cloud-init generate in precedenza al file immagine della macchina virtuale bastion host nel seguente modo:

qemu-system-x86_64 \
      -nographic \
      -enable-kvm \
      -smp 1 \
      -m 1g \
      -drive format=qcow2,index=0,file=${WORK_DIR}/bastion-host.img \
      -drive format=raw,index=1,file=${WORK_DIR}/cloud-init/cloud-init.img \
      -nic user,hostfwd=tcp::10022-:22

Se questo comando restituisce un errore, potrebbe essere necessario ridimensionare la dimensione del disco nell'immagine della macchina virtuale bastion host.

Puoi verificare che le configurazioni siano state applicate correttamente dopo l'avvio della macchina virtuale. Nei log di auditd vedrai un output simile al seguente:

[   52.659013] cloud-init[615]: Cloud-init v. 20.4.1 finished at Fri, 28 Apr 2023 18:53:55 +0000.

Puoi anche esaminare manualmente i suoi account utente e la configurazione di sshd per verificarli.

Importa l'immagine della macchina virtuale bastion host

Prima di importare l'immagine della macchina virtuale bastion host completamente configurata nell'infrastruttura di deployment, devi creare uno snapshot utilizzando lo strumento qemu-img nel seguente modo:

qemu-img snapshot -c installed bastion-image.img

Segui le procedure stabilite dalla tua organizzazione per importare l'immagine della macchina virtuale bastion host nell'infrastruttura di deployment.

Configura la macchina virtuale bastion host

Segui i passaggi descritti in questa sezione per configurare una macchina virtuale bastion host.

Configura gli account utente richiesti

La funzionalità di bastion host di Distributed Cloud Connected richiede uno o più account utente in ciascuna delle seguenti categorie:

  • Gestione. Questo è l'account amministratore della macchina virtuale bastion host. Ha accesso root.
  • Utente host. Questo è l'account dell'ingegnere delle operazioni. Può avviare e gestire sessioni di multiplexer del terminale per l'assistenza Google, ma non può inserire comandi in queste sessioni.
  • Utente ospite. Questo è l'account dell'ingegnere dell'Assistenza Google. Può stabilire una connessione SSH all'interno di una sessione di multiplexer del terminale condivisa con l'ingegnere delle operazioni su una macchina virtuale bastion host. Non ha altri privilegi.
  • Utente congiunto. Questo account stabilisce la sessione del multiplexer del terminale sulla macchina virtuale bastion host. Il tuo ingegnere delle operazioni e un ingegnere dell'assistenza Google si connettono congiuntamente a questa sessione.

Configurare i certificati

Devi configurare i certificati che consentono agli account descritti nella sezione precedente di accedere alla macchina virtuale bastion host. Il pacchetto software bastion host include uno script denominato generate-cloud-init.py che genera la configurazione cloud-init richiesta con gli account, le chiavi SSH e i certificati richiesti per ogni account.

Per le istruzioni, vedi Generare le configurazioni cloud-init.

Configura logging

I log dell'host bastion sono disponibili in tempo reale e on demand dal daemon audit. Puoi gestire la configurazione della registrazione tramite il file auditd.conf. Sei responsabile della rotazione e dell'esportazione dei log dalle macchine virtuali bastion host in base ai requisiti aziendali. Devi anche mantenere uno spazio su disco adeguato per archiviarli sulla macchina virtuale.

Test della configurazione

Completa i passaggi descritti in questa sezione per testare il deployment della macchina virtuale bastion host, inclusa la connettività da entrambe le estremità econtrollo dell'accessoo appropriato per gli account utente richiesti. Ti consigliamo inoltre di collaborare con l'assistenza Google per eseguire test in tempo reale.

Testare il deployment localmente

  1. Verifica di poter stabilire una sessione SSH come host-user con la macchina virtuale bastion host. Se l'operazione non va a buon fine, controlla le chiavi e i certificati SSH.

  2. Verifica di poter avviare una sessione di multiplexer del terminale utilizzando il comando seguente:

    ./opt/create-shared-tmux-session
  3. Verifica che il deployment connesso a Distributed Cloud sia raggiungibile dalla macchina virtuale bastion host utilizzando il seguente comando:

    ssh -vv bastion-user@TARGET_ADDRESS

    Sostituisci TARGET_ADDRESS con l'indirizzo IP della macchina Distributed Cloud o dello switch ToR di destinazione.

    La richiesta verrà rifiutata dall'autenticazione SSH, ma le richieste di autenticazione e trasporto SSH devono comunque raggiungere il deployment connesso a Distributed Cloud. Se questa operazione non va a buon fine, controlla la configurazione del firewall.

  4. Verifica che sia Access Transparency sia Access Approval siano stati attivati nella tua organizzazione e nel progetto di destinazione, come descritto in precedenza in questa guida. Google Cloud

Testare l'implementazione dal vivo con l'assistenza Google

Dopo aver testato correttamente il deployment dell'bastion host in locale, contatta l'Assistenza Google per pianificare una sessione di test dal vivo. Prima della sessione, l'Assistenza Google ti invierà una richiesta di approvazione dell'accesso. Durante la sessione di test in tempo reale, tu e Google tratterete i seguenti argomenti:

  • Generazione e approvazione delle richieste di Access Approval.
  • Flusso di lavoro di accesso end-to-end per il deployment dell'bastion host.
  • Log di Access Approval e Access Transparency.
  • Come risolvere i problemi relativi ai seguenti scenari:
    • Google tenta di connettersi a un'istanza bastion host non specificata in una richiesta di approvazione dell'accesso.
    • Google tenta di connettersi a un'istanza bastion host quando non hai avviato una sessione di multiplexer del terminale.
    • Google tenta di connettersi a un'istanza bastion host dopo che la richiesta di approvazione dell'accesso corrispondente è stata rifiutata o revocata.
    • La disconnessione o la chiusura della sessione del multiplexer del terminale.

Passaggi successivi