Connettiti a una VM

Google Distributed Cloud (GDC) air-gapped utilizza l'autenticazione SSH basata su chiavi per stabilire connessioni alle istanze di macchine virtuali (VM) Linux. Per impostazione predefinita, le password non sono configurate per gli utenti locali sulle VM Linux.

Prima di iniziare

Prima di connetterti a una VM, devi soddisfare i seguenti prerequisiti:

  • Abilitare la gestione dell'accesso. Non puoi procedere senza la gestione dell'accesso abilitata nell'ambiente guest. Per impostazione predefinita, la gestione dell'accesso è abilitata sulle nuove VM.
  • Attiva l'accesso esterno alla VM per qualsiasi peer sulla porta 22 del Transmission Control Protocol (TCP).
    • Per le VM Windows, attiva l'accesso esterno alla VM sulla porta 3389.
  • Configura una risorsa personalizzata ProjectNetworkPolicy (PNP) nel progetto in cui si trova la VM.
    • Se configuri un PNP nel progetto, puoi accedere alla VM al di fuori del progetto o dell'organizzazione.
    • Per diagnosticare se non hai un PNP, chiedi all'operatore dell'infrastruttura (IO).
  • Accesso di login al cluster. Segui i passaggi della CLI in Accedi per accedere al cluster.
Per utilizzare i comandi dell'interfaccia a riga di comando (CLI) gdcloud, assicurati di aver scaricato, installato e configurato la CLI gdcloud. Tutti i comandi per Distributed Cloud utilizzano la CLI gdcloud o kubectl e richiedono un ambiente Linux.

Recupera il percorso del file kubeconfig

Per eseguire comandi sul server API Management, assicurati di disporre delle seguenti risorse:

  1. Accedi e genera il file kubeconfig per il server API Management se non ne hai uno.

  2. Utilizza il percorso del file kubeconfig del server API Management per sostituire MANAGEMENT_API_SERVER in queste istruzioni.

Richiedere autorizzazioni e accesso

Per eseguire le attività elencate in questa pagina, devi disporre del ruolo Amministratore macchina virtuale progetto. Segui i passaggi per verificare di disporre del ruolo Amministratore VirtualMachine progetto (project-vm-admin) nello spazio dei nomi del progetto in cui si trova la VM.

Per le operazioni sulle VM che utilizzano la console GDC o gcloud CLI, chiedi all'amministratore IAM del progetto di assegnarti sia il ruolo Project VirtualMachine Admin sia il ruolo Project Viewer (project-viewer).

Stabilisci una connessione VM

Questa sezione descrive come stabilire una connessione alle VM Linux e Windows.

Connettiti a una VM Linux

Per stabilire una connessione a una VM Linux, utilizza la console GDC, gcloud CLI o l'API Virtual Machine Manager.

Console

  1. Nel menu di navigazione, fai clic su Virtual Machines > Instances.

  2. Nell'elenco delle VM, individua la riga della VM in esecuzione a cui vuoi connetterti. Nella colonna Connetti, fai clic su SSH.

  3. Si apre un terminale del browser SSH. Inserisci un comando nella shell o fai clic su FTP per navigare nella struttura dei file e caricare i file.

gdcloud

Connettiti a una VM utilizzando SSH eseguendo il comando gdcloud compute ssh

gdcloud compute ssh VM_NAME --project=PROJECT_ID

Sostituisci le seguenti variabili:

  • VM_NAME: il nome della VM.
  • PROJECT_ID: l'ID del progetto che contiene la VM.

Se hai impostato proprietà predefinite per la CLI, puoi omettere il flag --project da questo comando. Ad esempio:

gdcloud compute ssh VM_NAME

API

Connettiti a una VM:

  • Apri un terminale.
  • Crea una coppia di chiavi SSH.
  • Carica la chiave pubblica e il nome utente con un valore Time To Live (TTL).

GDC recupera la chiave SSH e il nome utente e crea un account utente con il nome utente. Sulle VM Linux, GDC archivia la chiave pubblica nel file ~/.ssh/authorized_keys dell'utente sulla VM.

Per connetterti a una VM dalla riga di comando, completa i seguenti passaggi:

  1. Crea una coppia di chiavi SSH e un nome utente.

    Sulle workstation Linux e macOS, utilizza l'utilità ssh-keygen per creare una nuova coppia di chiavi SSH. Il seguente esempio di codice crea una coppia di chiavi RSA (Rivest-Shamir-Adleman):

    ssh-keygen -t rsa -f ~/.ssh/KEY_FILENAME -C USERNAME -b 2048
    

    Sostituisci le variabili utilizzando le seguenti definizioni.

    VariabileDefinizione
    KEY_FILENAME Il nome del file di chiave SSH. Ad esempio, il nome file my-ssh-key genera un file di chiavi private denominato my-ssh-key e un file di chiavi pubbliche denominato my-ssh-key.pub.
    USERNAME Il tuo nome utente sulla VM, ad esempio testuser o testuser_gmail_com.

    L'utilità ssh-keygen salva il file della chiave privata nel percorso ~/.ssh/KEY_FILENAME e il file della chiave pubblica nel percorso ~/.ssh/KEY_FILENAME.pub.

    Una chiave pubblica per l'utente, testuser, è simile al seguente esempio:

    ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAu5kKQCPF... testuser
    
  2. Carica la chiave nella VM e crea una risorsa Kubernetes con la chiave pubblica, il nome utente e il valore durata (TTL) per la chiave.

    L'esempio seguente utilizza un file access_request.yaml per concedere l'accesso all'istanza VM con la chiave privata KEY_FILENAME e un valore TTL di dieci minuti:

    apiVersion: virtualmachine.gdc.goog/v1
    kind: VirtualMachineAccessRequest
    metadata:
      namespace: VM_NAMESPACE
      name: AR_NAME
    spec:
      ssh:
        key: |
          ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAu5kKQCPF... cloudysanfrancisco
        ttl: 10m
      user: USERNAME
      vm: VM_NAME
    

    Sostituisci le variabili utilizzando le seguenti definizioni:

    VariabileDefinizione
    VM_NAMESPACE Lo spazio dei nomi per la VM.
    AR_NAME Il nome della richiesta di accesso.
    USERNAME Il tuo nome utente sulla VM, ad esempio testuser o testuser_gmail_com.
    VM_NAME Il nome dell'istanza VM.
  3. Crea la chiave:

    kubectl create -f access_request.yaml --kubeconfig MANAGEMENT_API_SERVER
    
  4. Controlla lo stato della tua richiesta di accesso:

    kubectl get virtualmachineaccessrequests.virtualmachine.gdc.goog -n VM_NAMESPACE --kubeconfig MANAGEMENT_API_SERVER
    

    Sostituisci VM_NAMESPACE con lo spazio dei nomi della VM.

    Uno stato configured indica che puoi connetterti alla VM.

  5. Connettiti alla VM:

    ssh -i PATH_TO_PRIVATE_KEY USERNAME@EXTERNAL_IP
    

    Sostituisci i seguenti valori:

    • PATH_TO_PRIVATE_KEY con il percorso del file della chiave SSH privata corrispondente alla chiave pubblica che hai aggiunto alla VM.
    • USERNAME con il nome utente specificato durante la creazione della chiave SSH. Ad esempio, cloudysanfrancisco_example_com o cloudysanfrancisco.
    • EXTERNAL_IP con l'indirizzo IP in entrata esterno della VM.

Risoluzione dei problemi

Questa sezione descrive come risolvere i problemi che potrebbero verificarsi durante la connessione a un'istanza VM dopo la creazione della richiesta di accesso.

Segui questi passaggi per identificare i possibili problemi:

  1. Verifica che la VM sia in esecuzione. Sostituisci le variabili modificabili con i tuoi valori nel seguente comando:

    kubectl get virtualmachines.virtualmachine.gdc.goog VM_NAME -n VM_NAMESPACE --kubeconfig MANAGEMENT_API_SERVER
    

    Se la VM non è in esecuzione, non puoi connetterti o configurare nuove richieste.

  2. Verifica che la VM sia in esecuzione da alcuni minuti. Se la VM è appena stata avviata, i servizi richiesti per l'accesso SSH potrebbero non essere ancora in esecuzione. In genere, vengono eseguiti entro cinque minuti dall'avvio.

  3. Verifica di non aver superato il valore TTL nella richiesta di accesso. La chiave viene rimossa dopo che il tempo raggiunge il valore TTL.

  4. Se il tuo VirtualMachineAccessRequest mostra lo stato configured, verifica i seguenti requisiti:

    1. Hai attivato il trasferimento dei dati in alla tua VM sulla porta 22.
    2. La tua macchina esegue il routing alla VM. Ad esempio, puoi utilizzare il comando
      curl -vso /dev/null --connect-timeout 5 EXTERNAL_IP:22 per controllare il routing.
  5. Se il tuo VirtualMachineAccessRequest mostra lo stato failed, visualizza lo stato completo e rivedi il messaggio di errore che indica la causa del mancato completamento della richiesta:

    kubectl describe virtualmachineaccessrequest.virtualmachine.gdc.goog AR_NAME -n VM_NAMESPACE --kubeconfig MANAGEMENT_API_SERVER
    

    Sostituisci le variabili modificabili nel comando precedente con i tuoi valori.

  6. Se lo stato di VirtualMachineAccessRequest è vuoto, l'ambiente guest potrebbe non essere in esecuzione.

Connettiti a una VM Windows

La connessione a una VM Windows richiede l'utilizzo del protocollo RDP (Remote Desktop Protocol) tramite un'applicazione di desktop remoto. Per accedere alla VM tramite RDP, devi disporre di una password che puoi recuperare dalla console GDC o dalla risorsa personalizzata VirtualMachinePasswordResetRequest dell'API Virtual Machine Manager.

Prima di continuare, devi installare il client di Desktop remoto. Utilizza il seguente link per completare i passaggi in base al tuo sistema operativo specifico. Per accedere al link, è necessaria una connessione a internet.

https://remmina.org/how-to-install-remmina/

Per stabilire una connessione VM Windows, segui questi passaggi:

Console

  1. Nel menu di navigazione, fai clic su Macchine virtuali > Istanze.
  2. Nell'elenco delle VM, cerca la VM Windows in esecuzione a cui connetterti.
  3. Nella colonna Azioni, fai clic su Reimposta password. Viene visualizzata la finestra di dialogo Imposta la nuova password di Windows.
  4. Nel campo Nome utente, inserisci il tuo nome utente.
  5. Fai clic su Imposta. Viene visualizzata la finestra di dialogo Nuova password di Windows con una password generata in modo casuale. Questa password contiene caratteri alfanumerici e non alfanumerici.
  6. Fai clic su Copia.
  7. Vai al client Remote Desktop e seleziona il tuo nome utente.
  8. Nel campo di input Password, inserisci la tua password.
  9. Premi INVIO.

API

  1. Genera una chiave RSA. Hai bisogno di questa chiave per recuperare la password dalla risorsa VirtualMachinePasswordResetRequest.

    openssl genrsa -out private-key.pem 2048
    # Get the RSA public key
    openssl rsa -in private-key.pem -outform PEM -pubout
    
  2. Crea un file YAML.

  3. Carica la chiave RSA che hai generato, il nome della VM e un nome utente che fornisci per accedere al client Remote Desktop:

    apiVersion: virtualmachine.gdc.goog/v1
    kind: VirtualMachinePasswordResetRequest
    metadata:
      namespace: VM_NAMESPACE
      name: PRR_NAME
    spec:
      vmName: VM_NAME
      user: USERNAME
      publicKey: PUBLIC_KEY
    

    Sostituisci le variabili utilizzando le seguenti definizioni:

    Variabile Definizione
    VM_NAMESPACE Il nome dello spazio dei nomi in cui si trova la VM.
    PRR_NAME Il nome che assegni alla richiesta di reimpostazione della password. Ad esempio, vmprr2.
    VM_NAME Il nome della VM. Ad esempio, vm-test.
    USERNAME Il nome utente che fornisci per accedere alla VM con il client Remote Desktop. Ad esempio, test-user.
    PUBLIC_KEY La chiave RSA generata nel passaggio 2. Devi formattare PUBLIC_KEY su più righe.

    L'esempio seguente mostra un file YAML con i valori e la formattazione necessari per eseguire una richiesta di reimpostazione della password:

    apiVersion: virtualmachine.gdc.goog/v1
    kind: VirtualMachinePasswordResetRequest
    metadata:
      namespace: test-namespace
      name: vmprr2
    spec:
      vmName: vm2
      user: test-user
      publicKey: |-
       -----BEGIN PUBLIC KEY-----
    
       # Input the RSA key data in multi-line format.
    
       -----END PUBLIC KEY-----
    
  4. Applica i contenuti del file:

    kubectl --kubeconfig=MANAGEMENT_API_SERVER apply -f FILENAME
    

    Sostituisci FILENAME con il nome del file per la richiesta di reimpostazione della password.

  5. Visualizza lo stato della risorsa VirtualMachinePasswordResetRequest. A condizione che la VM sia nello stato Running, la risorsa genera la password in un minuto o meno.

    kubectl --kubeconfig=MANAGEMENT_API_SERVER describe \
      -n VM_NAMESPACE PRR_NAME
    

    Individua il campo status.encryptedPassword che contiene la password generata.

  6. Copia il valore in status.encryptedPassword e decripta la password generata:

    echo ENCRYPTED_PASSWORD | base64 -d > PASSWORD_FILENAME
    openssl pkeyutl -decrypt -in PASSWORD_FILENAME -inkey private-key.pem \
      -pkeyopt rsa_padding_mode:oaep -pkeyopt rsa_oaep_md:sha1 -pkeyopt rsa_mgf1_md:sha1
    

    Sostituisci quanto segue:

    • ENCRYPTED_PASSWORD: la password generata dal campo status.encryptedPassword.
    • PASSWORD_FILENAME: un file temporaneo per archiviare la password decodificata in Base64.

    Successivamente, visualizzi la password decrittografata come output per connetterti alla VM tramite RDP.

  7. Apri il client di Remote Desktop e fai clic su Profilo di connessione remota. Viene visualizzata una finestra di dialogo di connessione.

  8. Nella scheda Base, inserisci i valori nei seguenti campi:

    • Server: l'indirizzo IP in entrata dello stato di accesso esterno della VM con il numero di porta di accesso esterno della VM aggiunto. Per recuperare l'indirizzo IP in entrata, vedi Ingress.
    • Nome utente: il nome utente specificato nella richiesta di reimpostazione della password. Ad esempio, test-user.
    • Password: la password generata che hai decriptato dallo stato della richiesta di reimpostazione della password.
  9. Fai clic su Salva e connetti.