SSH-Schlüssel von VMs einschränken


In diesem Dokument wird beschrieben, wie Sie den Zugriff von Nutzern auf VM-Instanzen verhindern, indem Sie SSH-Schlüssel von VMs entfernen und blockieren.

Hinweise

  • Richten Sie die Authentifizierung ein, falls Sie dies noch nicht getan haben. Bei der Authentifizierung wird Ihre Identität für den Zugriff auf Google Cloud-Dienste und APIs überprüft. Zur Ausführung von Code oder Beispielen aus einer lokalen Entwicklungsumgebung können Sie sich wie folgt bei Compute Engine authentifizieren.

    Wählen Sie den Tab für die Verwendung der Beispiele auf dieser Seite aus:

    Console

    Wenn Sie über die Google Cloud Console auf Google Cloud-Dienste und -APIs zugreifen, müssen Sie die Authentifizierung nicht einrichten.

    gcloud

    1. Installieren Sie die Google Cloud CLI und initialisieren Sie sie mit folgendem Befehl:

      gcloud init
    2. Legen Sie eine Standardregion und -zone fest.

    REST

    Verwenden Sie die von der gcloud CLI bereitgestellten Anmeldedaten, um die REST API-Beispiele auf dieser Seite in einer lokalen Entwicklungsumgebung zu verwenden.

      Installieren Sie die Google Cloud CLI und initialisieren Sie sie mit folgendem Befehl:

      gcloud init

SSH-Schlüssel entfernen

Sie können SSH-Schlüssel aus VMs entfernen, die OS Login verwenden und aus VMs, die metadatenbasierte SSH-Schlüssel verwenden.

SSH-Schlüssel von VMs mit OS Login entfernen

VMs, die OS Login verwenden, akzeptieren SSH-Schlüssel, die Ihrem Google-Konto zugeordnet sind. Sie können einen öffentlichen SSH-Schlüssel mithilfe der Google Cloud CLI oder der OS Login API aus Ihrem Nutzerkonto entfernen. Als Administrator für Ihre Organisation können Sie SSH-Schlüssel mithilfe der Directory API aus Nutzerkonten entfernen. Compute Engine entfernt abgelaufene Schlüssel automatisch aus Ihrem Google-Konto.

gcloud

So entfernen Sie einen öffentlichen SSH-Schlüssel aus Ihrem Konto:

  1. Wenn Sie nicht wissen, welchen Schlüssel Sie entfernen möchten, führen Sie den Befehl gcloud compute os-login describe-profile aus, um alle mit Ihrem Konto verknüpften Schlüssel einzusehen:

    gcloud compute os-login describe-profile
    
  2. Kopieren Sie den Wert fingerprint des Schlüssels, den Sie löschen möchten.

  3. Entfernen Sie den Schlüssel mit dem Befehl gcloud compute os-login ssh-keys remove aus Ihrem Konto:

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

    Ersetzen Sie KEY durch den öffentlichen SSH-Schlüssel, den Sie entfernen möchten, oder durch den OS Login-Fingerabdruck für den Schlüssel, den Sie entfernen möchten.

REST

So entfernen Sie einen öffentlichen SSH-Schlüssel aus Ihrem Konto:

  1. Wenn Sie nicht wissen, welchen Schlüssel Sie entfernen möchten, verwenden Sie die Methode users.getLoginProfile, um alle mit Ihrem Konto verknüpften Schlüssel einzusehen:

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

    Ersetzen Sie dabei ACCOUNT_EMAIL durch die mit Ihrem Konto verknüpfte E-Mail-Adresse.

  2. Kopieren Sie den Wert fingerprint des Schlüssels, den Sie löschen möchten.

  3. Entfernen Sie den Schlüssel mit der Methode users.sshPublicKeys.delete aus Ihrem Konto:

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

    Dabei gilt:

    • ACCOUNT_EMAIL: Die mit Ihrem Konto verknüpfte E-Mail-Adresse.
    • FINGERPRINT: SHA-256-Fingerabdruck des zu entfernenden Schlüssels

SSH-Schlüssel von VMs mit metadatenbasierten Schlüsseln entfernen

Sie können einen öffentlichen SSH-Schlüssel aus den Metadaten eines Projekts oder einer Instanz entfernen. Dazu verwenden Sie die Google Cloud Console, die gcloud CLI oder die Compute Engine API.

Nachdem Sie den letzten Schlüssel aus den Metadaten für einen bestimmten Nutzer entfernt haben oder der letzte Schlüssel in den Metadaten für einen bestimmten Nutzer abläuft, löscht Compute Engine die Datei ~/.ssh/authorized_keys des Nutzers auf der VM.

Achtung: Wenn Sie SSH-Schlüssel in Metadaten verwalten, können Ihre Projektmitglieder möglicherweise keine Verbindung zu VMs mehr herstellen. Außerdem riskieren Sie, dass Nutzer, einschließlich Nutzer außerhalb Ihres Projekts, unbeabsichtigten Zugriff auf VMs erhalten. Weitere Informationen finden Sie unter Risiken der manuellen Schlüsselverwaltung.

Öffentlichen Schlüssel aus Projektmetadaten entfernen

Entfernen Sie einen öffentlichen SSH-Schlüssel aus den Projektmetadaten, um den Zugriff auf alle VMs in einem Projekt zu entfernen.

Wenn Sie einen Schlüssel aus Metadaten mit der gcloud CLI und der Compute Engine API entfernen, müssen Sie die Liste der vorhandenen Schlüssel abrufen, die Liste der Schlüssel bearbeiten, um die unerwünschten Schlüssel zu entfernen, und die alten Schlüssel mit der Liste der Schlüssel überschreiben, die Sie behalten möchten. Dies wird im folgenden Abschnitt erläutert.

Console

So entfernen Sie einen öffentlichen SSH-Schlüssel aus den Projektmetadaten über die Google Cloud Console:

  1. Rufen Sie in der Google Cloud Console die Seite Metadaten auf.

    Zur Seite "Metadaten"

  2. Klicken Sie unter SSH-Schlüssel auf Bearbeiten.

  3. Klicken Sie neben dem SSH-Schlüssel auf die Schaltfläche zum Entfernen.

    Öffentlicher PuTTYgen-Schlüssel

  4. Klicken Sie auf Speichern.

gcloud

So entfernen Sie einen öffentlichen SSH-Schlüssel aus den Projektmetadaten mit der gcloud CLI:

  1. Führen Sie den Befehl gcloud compute project-info describe aus, um die Metadaten für das Projekt abzurufen:

    gcloud compute project-info describe
    

    Die entsprechende Ausgabe sieht etwa so aus:

    ...
    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. Kopieren Sie den Metadatenwert ssh-keys.

  3. Erstellen und öffnen Sie eine neue Textdatei auf Ihrer Workstation.

  4. Fügen Sie in der Datei die Liste der gerade kopierten SSH-Schlüssel ein und löschen Sie dann alle Schlüssel, die Sie aus den Projektmetadaten entfernen möchten.

  5. Speichern und schließen Sie die Datei.

  6. Führen Sie den Befehl gcloud compute project-info add-metadata aus, um den projektweiten ssh-keys-Wert festzulegen:

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

    Ersetzen Sie KEY_FILE durch einen der folgenden Werte:

    • Den Pfad zur Datei, die Sie im vorherigen Schritt erstellt haben, wenn das Projekt vorhandene SSH-Schlüssel enthielt.
    • Den Pfad zur neuen öffentlichen SSH-Schlüsseldatei, wenn das Projekt keine vorhandenen SSH-Schlüssel enthielt

REST

So entfernen Sie einen öffentlichen SSH-Schlüssel aus den Projektmetadaten mithilfe der Compute Engine API:

  1. Verwenden Sie die Methode projects.get, um die Werte fingerprint und ssh-keys aus Metadaten zu erhalten.

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

    Ersetzen Sie PROJECT_ID durch Ihre Projekt-ID.

    Die Antwort ähnelt dem folgenden Beispiel.

    ...
    "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. Kopieren Sie die Liste der SSH-Schlüsselwerte und löschen Sie die Schlüssel, die Sie entfernen möchten.

  3. Verwenden Sie projects.setCommonInstanceMetadata, um die SSH-Schlüssel zu entfernen.

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

    Dabei gilt:

    • PROJECT_ID: Ihre Projekt-ID.
    • EXISTING_SSH_KEYS: Liste der SSH-Schlüssel, die Sie behalten möchten.
    • FINGERPRINT: Wert von fingerprint aus der Antwort der projects.get-Anfrage.

Öffentlichen SSH-Schlüssel aus Instanzmetadaten entfernen

Sie können einen öffentlichen SSH-Schlüssel aus den Instanzmetadaten entfernen, um den Zugriff auf eine einzelne VM zu entfernen.

Wenn Sie einen Schlüssel aus Metadaten mit der gcloud CLI und der Compute Engine API entfernen, müssen Sie die Liste der vorhandenen Schlüssel abrufen, die Liste der Schlüssel bearbeiten, um die unerwünschten Schlüssel zu entfernen, und die alten Schlüssel mit der Liste der Schlüssel überschreiben, die Sie behalten möchten. Dies wird im folgenden Abschnitt erläutert.

Console

So entfernen Sie einen öffentlichen SSH-Schlüssel aus den Instanzmetadaten mithilfe der Google Cloud Console:

  1. Rufen Sie in der Google Cloud Console die Seite Metadaten auf.

    Zur Seite "Metadaten"

  2. Klicken Sie auf den Namen der VM, für die Sie einen Schlüssel entfernen möchten.

  3. Klicken Sie auf Bearbeiten.

  4. Klicken Sie im mittleren Bereich unter SSH-Schlüssel auf Aufrufen und bearbeiten. Der Bereich wird erweitert, sodass alle öffentlichen SSH-Schlüssel auf Instanzebene angezeigt werden.

  5. Klicken Sie neben dem Schlüssel, den Sie entfernen möchten, auf die Schaltfläche zum Entfernen:

    Öffentlicher PuTTYgen-Schlüssel

  6. Klicken Sie auf Speichern.

gcloud

So entfernen Sie einen öffentlichen SSH-Schlüssel aus den Instanzmetadaten mit der gcloud CLI:

  1. Führen Sie den Befehl gcloud compute instances describe aus, um die Metadaten für die VM abzurufen:

    gcloud compute instances describe VM_NAME
    

    Ersetzen Sie VM_NAME durch den Namen der VM, für die Sie öffentliche SSH-Schlüssel hinzufügen oder entfernen möchten.

    Die entsprechende Ausgabe sieht etwa so aus:

    ...
    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. Kopieren Sie den Metadatenwert ssh-keys.

  3. Erstellen und öffnen Sie eine neue Textdatei auf Ihrer lokalen Workstation.

  4. Fügen Sie in der Datei die Liste der gerade kopierten SSH-Schlüssel ein und entfernen Sie dann alle Schlüssel, die Sie löschen möchten.

  5. Speichern und schließen Sie die Datei.

  6. Führen Sie den Befehl gcloud compute project-info add-metadata aus, um den projektweiten ssh-keys-Wert festzulegen:

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

    Dabei gilt:

    • VM_NAME: VM, für die Sie den SSH-Schlüssel entfernen möchten.
    • KEY_FILE: Pfad zur Datei, die die Liste aller SSH-Schlüssel des Projekts enthält.

REST

So entfernen Sie einen öffentlichen SSH-Schlüssel aus den Instanzmetadaten mithilfe der Compute Engine API:

  1. Verwenden Sie die Methode instances.get, um die Werte fingerprint und ssh-keys aus Metadaten zu erhalten.

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

    Dabei gilt:

    • PROJECT_ID: Ihre Projekt-ID.
    • ZONE: Zone der VM, der Sie einen SSH-Schlüssel hinzufügen.
    • VM_NAME: VM, für die Sie einen SSH-Schlüssel hinzufügen.

    Die Antwort ähnelt dem folgenden Beispiel.

    ...
    "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. Kopieren Sie die Liste der SSH-Schlüsselwerte und löschen Sie die Schlüssel, die Sie entfernen möchten.

  3. Verwenden Sie instances.setMetadata, um die SSH-Schlüssel zu entfernen.

    
    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"
    }
    

    Dabei gilt:

    • PROJECT_ID: Ihre Projekt-ID
    • EXISTING_SSH_KEYS: Wert des Schlüssels ssh-keys aus der Antwort der projects.get-Anfrage.
    • FINGERPRINT: Wert von fingerprint aus der Antwort der instances.get-Anfrage.

Projekt-SSH-Schlüssel für VMs mit metadatenbasierten SSH-Schlüsseln blockieren

Wenn Sie verhindern möchten, dass VMs SSH-Schlüssel akzeptieren, die in Projektmetadaten gespeichert sind, können Sie die Projekt-SSH-Schlüssel für VMs blockieren. Sie können Projekt-SSH-Schlüssel für VMs blockieren, wenn Sie eine VM erstellen oder nachdem Sie eine VM erstellt haben.

Projekt-SSH-Schlüssel für eine VM während der VM-Erstellung blockieren

Sie können Projekt-SSH-Schlüssel für VMs während der VM-Erstellung mithilfe der Google Cloud Console, der gcloud CLI oder der Compute Engine API blockieren.

Console

Wenn Sie eine VM erstellen und mit der Google Cloud Console verhindern möchten, dass sie in Projektmetadaten gespeicherte SSH-Schlüssel akzeptiert, gehen Sie so vor:

  1. Rufen Sie in der Google Cloud Console die Seite Instanz erstellen auf.

    Zur Seite „Instanz erstellen“

  2. Geben Sie die VM-Details an

  3. Maximieren Sie den Abschnitt Erweiterte Optionen und tun Sie Folgendes:

    1. Maximieren Sie den Abschnitt Sicherheit.

    2. Klicken Sie auf das Kästchen Projektweite SSH-Schlüssel blockieren.

  4. Klicken Sie zum Erstellen und Starten der VM auf Erstellen.

gcloud

Verwenden Sie den Befehl gcloud compute instances create, wenn Sie eine VM erstellen und mit der gcloud CLI verhindern möchten, dass sie in Projektmetadaten gespeicherte SSH-Schlüssel akzeptiert:

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

Ersetzen Sie VM_NAME durch den Namen der neuen VM.

REST

Wenn Sie eine VM erstellen und mit Compute Engine verhindern möchten, dass sie in Projektmetadaten gespeicherte SSH-Schlüssel akzeptiert, stellen Sie eine POST-Anfrage an die Methode instances.insert:

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

Dabei gilt:

  • PROJECT_ID: die Projekt-ID
  • ZONE: die Zone der VM

Geben Sie im Anfragetext die Nutzernamen und öffentlichen SSH-Schlüssel im Attribut items an:

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

Projekt-SSH-Schlüssel für eine VM nach der VM-Erstellung blockieren

Sie können Projekt-SSH-Schlüssel für VMs nach der VM-Erstellung mithilfe der Google Cloud Console, der gcloud CLI oder der Compute Engine API blockieren.

Console

So verhindern Sie, dass VMs Verbindungen von SSH-Schlüsseln akzeptieren, die in Projektmetadaten über die Google Cloud Console gespeichert sind:

  1. Rufen Sie in der Google Cloud Console die Seite Metadaten auf.

    Zur Seite "Metadaten"

  2. Klicken Sie auf den Namen der VM, für die Sie Projekt-SSH-Schlüssel blockieren möchten.

  3. Klicken Sie auf Bearbeiten.

  4. Klicken Sie unter SSH-Schlüssel das Kästchen Projektweite SSH-Schlüssel blockieren an.

  5. Wenn Sie mit dem Bearbeiten der Verbindungseinstellung für SSH-Schlüssel fertig sind, klicken Sie auf Speichern.

gcloud

So verhindern Sie, dass VMs Verbindungen von SSH-Schlüsseln akzeptieren, die in Projektmetadaten mit der gcloud CLI gespeichert sind:

Führen Sie den Befehl gcloud compute instances add-metadata aus:

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

Ersetzen Sie VM_NAME durch den Namen der VM, für die Sie projektweite öffentliche SSH-Schlüssel blockieren möchten.

REST

So verhindern Sie über die Compute Engine API, dass VMs Verbindungen von SSH-Schlüsseln akzeptieren, die in Projektmetadaten gespeichert sind:

  1. Mit der Methode instances.get können Sie fingerprint aus Metadaten abrufen.

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

    Dabei gilt:

    • PROJECT_ID: Ihre Projekt-ID.
    • ZONE: Zone der VM, der Sie einen SSH-Schlüssel hinzufügen.
    • VM_NAME: VM, für die Sie einen SSH-Schlüssel hinzufügen.

    Die Antwort ähnelt dem folgenden Beispiel.

    ...
    "fingerprint": "utgYE_XWtE8="
    ...
    
  2. Verwenden Sie die Methode instances.setMetadata, um block-project-ssh-keys auf TRUE festzulegen:

    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"
    }
    

    Dabei gilt:

    • PROJECT_ID: Ihre Projekt-ID.
    • ZONE: Zone, in der sich Ihre Instanz befindet.
    • INSTANCE_NAME: Instanz, in der projektweite Schlüssel blockiert werden sollen.
    • FINGERPRINT: Wert von fingerprint aus der Antwort der instances.get-Anfrage.

Nächste Schritte