Limita le chiavi SSH dalle VM


Questo documento descrive come impedire agli utenti di accedere alle istanze di macchine virtuali (VM) rimuovendo e bloccando le chiavi SSH dalle VM.

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

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

      2. Set a default region and zone.
      3. REST

        Per utilizzare gli esempi di API REST in questa pagina in un ambiente di sviluppo locale, utilizzi le credenziali che fornisci a gcloud CLI.

          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.

        Per saperne di più, consulta la sezione Autenticarsi per l'utilizzo di REST nella documentazione sull'autenticazione di Google Cloud .

Rimuovere le chiavi SSH

Puoi rimuovere le chiavi SSH dalle VM che utilizzano OS Login e dalle VM che utilizzano chiavi SSH basate su metadati.

Rimuovi le chiavi SSH dalle VM che utilizzano OS Login

Le VM che utilizzano OS Login accettano le chiavi SSH associate al tuo Account Google. Puoi rimuovere una chiave SSH pubblica dal tuo account utente utilizzando Google Cloud CLI o l'API OS Login. Se sei un amministratore della tua organizzazione, puoi rimuovere le chiavi SSH dagli account utente utilizzando l'API Directory. Compute Engine rimuove automaticamente le chiavi scadute dal tuo Account Google.

gcloud

Per rimuovere una chiave SSH pubblica dal tuo account:

  1. Se non sai quale chiave vuoi rimuovere, esegui il comando gcloud compute os-login describe-profile per visualizzare tutte le chiavi associate al tuo account:

    gcloud compute os-login describe-profile
    
  2. Copia il valore fingerprint della chiave che vuoi eliminare.

  3. Rimuovi la chiave dal tuo account utilizzando il comando gcloud compute os-login ssh-keys remove:

    gcloud compute os-login ssh-keys remove --key=KEY
    

    Sostituisci KEY con la chiave SSH pubblica che vuoi rimuovere o con l'impronta OS Login della chiave che vuoi rimuovere.

REST

Per rimuovere una chiave SSH pubblica dal tuo account:

  1. Se non sai quale chiave vuoi rimuovere, utilizza il metodo users.getLoginProfile per visualizzare tutte le chiavi associate al tuo account:

    GET https://oslogin.googleapis.com/v1/users/ACCOUNT_EMAIL/loginProfile
    

    Sostituisci ACCOUNT_EMAIL con l'indirizzo email associato al tuo account.

  2. Copia il valore fingerprint della chiave che vuoi eliminare.

  3. Rimuovi la chiave dal tuo account utilizzando il metodo users.sshPublicKeys.delete:

    DELETE https://oslogin.googleapis.com/v1/users/ACCOUNT_EMAIL/sshPublicKeys/FINGERPRINT
    

    Sostituisci quanto segue:

    • ACCOUNT_EMAIL: inserisci l'indirizzo email associato al tuo account
    • FINGERPRINT: l'impronta SHA-256 della chiave da rimuovere

Rimuovi le chiavi SSH dalle VM che utilizzano chiavi basate su metadati

Puoi rimuovere una chiave SSH pubblica dai metadati del progetto o dell'istanza utilizzando la consoleGoogle Cloud , gcloud CLI o l'API Compute Engine.

Dopo aver rimosso l'ultima chiave dai metadati per un determinato utente o quando l'ultima chiave nei metadati per un determinato utente scade, Compute Engine elimina il file ~/.ssh/authorized_keys dell'utente sulla VM.

Attenzione: se gestisci le chiavi SSH nei metadati, potresti interrompere la capacità dei membri del progetto di connettersi alle VM. Inoltre, rischi di concedere inavvertitamente agli utenti, inclusi quelli esterni al progetto, l'accesso alle VM. Per saperne di più, consulta Rischi della gestione manuale delle chiavi.

Rimuovere una chiave pubblica dai metadati del progetto

Rimuovi una chiave SSH pubblica dai metadati del progetto per rimuovere l'accesso a tutte le VM di un progetto.

Quando rimuovi una chiave dai metadati utilizzando gcloud CLI e l'API Compute Engine, devi recuperare l'elenco delle chiavi esistenti, modificare l'elenco delle chiavi per rimuovere quelle indesiderate e sovrascrivere le chiavi precedenti con l'elenco delle chiavi che vuoi conservare, come spiegato nella sezione seguente.

Console

Per rimuovere una chiave SSH pubblica dai metadati del progetto utilizzando la consoleGoogle Cloud , segui questi passaggi:

  1. Nella console Google Cloud , vai alla pagina Metadati

    Vai a Metadati

  2. Fai clic sulla scheda Chiavi SSH.

  3. Fai clic su Modifica nella parte superiore della pagina.

  4. Vai alla chiave SSH che vuoi rimuovere e fai clic sul pulsante di eliminazione accanto alla chiave SSH.

    Ripeti questo passaggio per ogni chiave SSH che vuoi rimuovere.

  5. Fai clic su Salva.

gcloud

Per rimuovere una chiave SSH pubblica dai metadati del progetto utilizzando gcloud CLI, procedi nel seguente modo:

  1. Esegui il comando gcloud compute project-info describe per recuperare i metadati del progetto:

    gcloud compute project-info describe
    

    L'output è simile al seguente:

    ...
    metadata:
      ...
      - key: ssh-keys
        value: |-
          cloudysanfrancisco:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAu5kKQCPF
          baklavainthebalkans:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDQDx3FNVC8 google-ssh {"userName":"baklavainthebalkans","expireOn":"2021-06-14T16:59:03+0000"}
    ...
    
  2. Copia il valore dei metadati ssh-keys.

  3. Crea e apri un nuovo file di testo sulla tua workstation.

  4. Nel file, incolla l'elenco di chiavi SSH appena copiato, quindi elimina le chiavi che vuoi rimuovere dai metadati del progetto.

  5. Salva e chiudi il file.

  6. Esegui il comando gcloud compute project-info add-metadata per impostare il valore ssh-keys a livello di progetto:

    gcloud compute project-info add-metadata --metadata-from-file=ssh-keys=KEY_FILE
    

    Sostituisci KEY_FILE con una delle seguenti opzioni:

    • il percorso del file creato nel passaggio precedente, se nel progetto erano presenti chiavi SSH esistenti;
    • il percorso del file della nuova chiave SSH pubblica, se nel progetto non erano presenti chiavi SSH esistenti.

REST

Per rimuovere una chiave SSH pubblica dai metadati del progetto utilizzando l'API Compute Engine, procedi nel seguente modo:

  1. Utilizza il metodo projects.get per ottenere i valori fingerprint e ssh-keys dai metadati.

    GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID
    

    Sostituisci PROJECT_ID con l'ID progetto.

    La risposta è simile alla seguente:

    ...
    "fingerprint": "utgYE_XWtE8=",
    "items": [
     {
      "key": "ssh-keys",
      "value": "cloudysanfrancisco:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAu5kKQCPF\nbaklavainthebalkans:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDQDx3FNVC8 google-ssh {"userName":"baklavainthebalkans","expireOn":"2021-06-14T16:59:03+0000"}"
     }
    ]
    ...
    
  2. Copia l'elenco dei valori delle chiavi SSH ed elimina le chiavi che vuoi rimuovere.

  3. Utilizza projects.setCommonInstanceMetadata per rimuovere le chiavi SSH.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/setCommonInstanceMetadata
    
    {
    "items": [
     {
      "key": "ssh-keys",
      "value": "EXISTING_SSH_KEYS"
     }
    ]
    "fingerprint": "FINGERPRINT"
    }
    

    Sostituisci quanto segue:

    • PROJECT_ID: il tuo ID progetto
    • EXISTING_SSH_KEYS: l'elenco delle chiavi SSH che vuoi conservare
    • FINGERPRINT: il valore di fingerprint dalla risposta della richiesta projects.get

Rimuovi una chiave SSH pubblica dai metadati dell'istanza

Rimuovi una chiave SSH pubblica dai metadati dell'istanza per rimuovere l'accesso a una singola VM.

Quando rimuovi una chiave dai metadati utilizzando gcloud CLI e l'API Compute Engine, devi recuperare l'elenco delle chiavi esistenti, modificare l'elenco delle chiavi per rimuovere quelle indesiderate e sovrascrivere le chiavi precedenti con l'elenco delle chiavi che vuoi conservare, come spiegato nella sezione seguente.

Console

Per rimuovere una chiave SSH pubblica dai metadati dell'istanza utilizzando la consoleGoogle Cloud , segui questi passaggi:

  1. Nella console Google Cloud , vai alla pagina Istanze VM.

    Vai a Istanze VM

  2. Fai clic sul nome della VM per cui vuoi rimuovere una chiave.

  3. Fai clic su Modifica.

  4. Nella sezione Chiavi SSH, fai clic su Mostra e modifica. La sezione si espande per mostrare tutte le chiavi SSH pubbliche a livello di istanza.

  5. Fai clic sul pulsante Elimina accanto alla chiave SSH che vuoi rimuovere.

    Ripeti questo passaggio per ogni chiave SSH che vuoi rimuovere.

  6. Fai clic su Salva.

gcloud

Per rimuovere una chiave SSH pubblica dai metadati dell'istanza utilizzando gcloud CLI, procedi nel seguente modo:

  1. Esegui il comando gcloud compute instances describe per recuperare i metadati della VM:

    gcloud compute instances describe VM_NAME
    

    Sostituisci VM_NAME con il nome della VM per cui devi aggiungere o rimuovere le chiavi SSH pubbliche.

    L'output è simile al seguente:

    ...
    metadata:
    ...
    - key: ssh-keys
     value: |-
       cloudysanfrancisco:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAu5kKQCPF
       baklavainthebalkans:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDQDx3FNVC8 google-ssh {"userName":"baklavainthebalkans","expireOn":"2021-06-14T16:59:03+0000"}
    ...
    
  2. Copia il valore dei metadati ssh-keys.

  3. Crea e apri un nuovo file di testo sulla tua workstation locale.

  4. Nel file, incolla l'elenco di chiavi SSH appena copiato, quindi rimuovi le chiavi che vuoi eliminare.

  5. Salva e chiudi il file.

  6. Esegui il comando gcloud compute project-info add-metadata per impostare il valore ssh-keys a livello di progetto:

    gcloud compute instances add-metadata VM_NAME --metadata-from-file ssh-keys=KEY_FILE
    

    Sostituisci quanto segue:

    • VM_NAME: la VM per cui vuoi rimuovere la chiave SSH
    • KEY_FILE: il percorso del file che contiene l'elenco di tutte le chiavi SSH del progetto

REST

Per rimuovere una chiave SSH pubblica dai metadati dell'istanza utilizzando l'API Compute Engine, procedi nel seguente modo:

  1. Utilizza il metodo instances.get per ottenere i valori fingerprint e ssh-keys dai metadati.

    GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME
    

    Sostituisci quanto segue:

    • PROJECT_ID: il tuo ID progetto
    • ZONE: la zona della VM per cui stai aggiungendo una chiave SSH
    • VM_NAME: la VM per cui stai aggiungendo una chiave SSH

    La risposta è simile alla seguente:

    ...
    "fingerprint": "utgYE_XWtE8=",
    "items": [
    {
     "key": "ssh-keys",
     "value": "cloudysanfrancisco:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAu5kKQCPF\nbaklavainthebalkans:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDQDx3FNVC8 google-ssh {"userName":"baklavainthebalkans","expireOn":"2021-06-14T16:59:03+0000"}"
    }
    ]
    ...
    
  2. Copia l'elenco dei valori delle chiavi SSH ed elimina le chiavi che vuoi rimuovere.

  3. Utilizza instances.setMetadata per rimuovere le chiavi SSH.

    
    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/setMetadata
    
    {
    "items": [
     {
      "key": "ssh-keys",
      "value": "EXISTING_SSH_KEYS
     }
    ]
    "fingerprint": "FINGERPRINT"
    }
    

    Sostituisci quanto segue:

    • PROJECT_ID: il tuo ID progetto
    • EXISTING_SSH_KEYS: il valore della chiave ssh-keys ottenuta dalla risposta della richiesta projects.get
    • FINGERPRINT: il valore di fingerprint dalla risposta della richiesta instances.get

Blocca le chiavi SSH del progetto dalle VM che utilizzano chiavi SSH basate su metadati

Puoi impedire alle VM di accettare le chiavi SSH archiviate nei metadati del progetto bloccando le chiavi SSH del progetto dalle VM. Puoi bloccare le chiavi SSH del progetto dalle VM quando crei una VM o dopo aver creato una VM.

Blocca le chiavi SSH del progetto da una VM durante la creazione della VM

Puoi bloccare le chiavi SSH del progetto dalle VM durante la creazione della VM utilizzando la consoleGoogle Cloud , gcloud CLI o l'API Compute Engine.

Console

Per creare un'istanza e impedirle di accettare le chiavi SSH archiviate nei metadati del progetto utilizzando la console Google Cloud , procedi nel seguente modo:

  1. Nella console Google Cloud , vai alla pagina Crea un'istanza.

    Vai a Crea un'istanza

  2. Per bloccare le chiavi SSH del progetto:

    1. Nel menu di navigazione, fai clic su Sicurezza.

    2. Espandi la sezione Gestisci accesso.

    3. Per disattivare OS Login, deseleziona la casella di controllo Controlla l'accesso alle VM tramite autorizzazioni IAM.

    4. Seleziona la casella di controllo Blocca chiavi SSH a livello di progetto.

  3. (Facoltativo) Specifica altre opzioni di configurazione. Per ulteriori informazioni, consulta Opzioni di configurazione durante la creazione dell'istanza.

  4. Per creare e avviare l'istanza, fai clic su Crea.

gcloud

Per creare una VM e impedirle di accettare le chiavi SSH archiviate nei metadati del progetto utilizzando gcloud CLI, utilizza il comando gcloud compute instances create:

gcloud compute instances create VM_NAME \
    --metadata block-project-ssh-keys=TRUE

Sostituisci VM_NAME con il nome della nuova VM.

REST

Per creare una VM e impedirle di accettare le chiavi SSH archiviate nei metadati del progetto utilizzando Compute Engine, crea una richiesta POST al metodo instances.insert:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances

Sostituisci quanto segue:

  • PROJECT_ID: l'ID progetto
  • ZONE: la zona della VM

Nel corpo della richiesta, fornisci i nomi utente e le chiavi SSH pubbliche nella proprietà items:

...
{
 "items": [
    {
     "key": "block-project-ssh-keys",
     "value": TRUE
    }
   ]
}
...

Blocca le chiavi SSH del progetto da una VM dopo la creazione della VM

Puoi bloccare le chiavi SSH del progetto dalle VM dopo la creazione della VM utilizzando la consoleGoogle Cloud , gcloud CLI o l'API Compute Engine.

Console

Per impedire alle VM di accettare connessioni dalle chiavi SSH archiviate nei metadati del progetto utilizzando la console Google Cloud , procedi nel seguente modo:

  1. Nella console Google Cloud , vai alla pagina Istanze VM.

    Vai a Istanze VM

  2. Fai clic sul nome della VM per cui vuoi bloccare le chiavi SSH del progetto.

  3. Fai clic su Modifica.

  4. Nella sezione Chiavi SSH, seleziona la casella di controllo Blocca chiavi SSH a livello di progetto.

  5. Al termine della modifica dell'impostazione di connessione per le chiavi SSH, fai clic su Salva.

gcloud

Per impedire alle VM di accettare connessioni dalle chiavi SSH archiviate nei metadati del progetto utilizzando gcloud CLI, procedi nel seguente modo:

Esegui il comando gcloud compute instances add-metadata:

gcloud compute instances add-metadata VM_NAME --metadata block-project-ssh-keys=TRUE

Sostituisci VM_NAME con il nome della VM per cui vuoi bloccare le chiavi SSH pubbliche a livello di progetto.

REST

Per impedire alle VM di accettare connessioni dalle chiavi SSH archiviate nei metadati del progetto utilizzando l'API Compute Engine, procedi nel seguente modo:

  1. Utilizza il metodo instances.get per ottenere fingerprint dai metadati.

    GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME
    

    Sostituisci quanto segue:

    • PROJECT_ID: il tuo ID progetto
    • ZONE: la zona della VM per cui stai aggiungendo una chiave SSH
    • VM_NAME: la VM per cui stai aggiungendo una chiave SSH

    La risposta è simile alla seguente:

    ...
    "fingerprint": "utgYE_XWtE8="
    ...
    
  2. Utilizza il metodo instances.setMetadata per impostare block-project-ssh-keys su TRUE:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/setMetadata
    
    {
    "items": [
     {
      "key": "block-project-ssh-keys",
      "value": TRUE
     }
    ]
    "fingerprint": "FINGERPRINT"
    }
    

    Sostituisci quanto segue:

    • PROJECT_ID è l'ID progetto
    • ZONE è la zona in cui si trova l'istanza
    • INSTANCE_NAME è l'istanza in cui vuoi bloccare le chiavi a livello di progetto.
    • FINGERPRINT: il valore di fingerprint dalla risposta della richiesta instances.get.

Passaggi successivi