Restreindre des clés SSH sur des VM


Ce document explique comment empêcher les utilisateurs d'accéder aux instances de machines virtuelles (VM) en supprimant et en bloquant les clés SSH des VM.

Avant de commencer

  • Si ce n'est pas déjà fait, configurez l'authentification. L'authentification est le processus permettant de valider votre identité pour accéder aux services et aux API Google Cloud. Pour exécuter du code ou des exemples depuis un environnement de développement local, vous pouvez vous authentifier auprès de Compute Engine comme suit :

    Sélectionnez l'onglet correspondant à la façon dont vous prévoyez d'utiliser les exemples de cette page :

    Console

    Lorsque vous utilisez la console Google Cloud pour accéder aux services et aux API Google Cloud, vous n'avez pas besoin de configurer l'authentification.

    gcloud

    1. Installez Google Cloud CLI, puis initialisez-la en exécutant la commande suivante :

      gcloud init
    2. Définissez une région et une zone par défaut.

    REST

    Pour utiliser les exemples d'API REST de cette page dans un environnement de développement local, vous devez utiliser les identifiants que vous fournissez à gcloud CLI.

      Installez Google Cloud CLI, puis initialisez-la en exécutant la commande suivante :

      gcloud init

Supprimer des clés SSH

Vous pouvez supprimer les clés SSH des VM qui utilisent OS Login et des VM qui utilisent des clés SSH basées sur des métadonnées.

Supprimer les clés SSH des VM qui utilisent OS Login

Les VM qui utilisent OS Login acceptent les clés SSH associées à votre compte Google. Vous pouvez supprimer une clé SSH publique de votre compte utilisateur à l'aide de Google Cloud CLI ou de l'API OS Login. Si vous êtes administrateur de votre organisation, vous pouvez supprimer des clés SSH des comptes utilisateur en utilisant l'API Directory. Compute Engine supprime automatiquement les clés expirées de votre compte Google.

gcloud

Pour supprimer une clé SSH publique de votre compte, procédez comme suit :

  1. Si vous ne savez pas quelle clé vous souhaitez supprimer, exécutez la commande gcloud compute os-login describe-profile pour afficher toutes les clés associées à votre compte :

    gcloud compute os-login describe-profile
    
  2. Copiez la valeur fingerprint de la clé que vous souhaitez supprimer.

  3. Supprimez la clé de votre compte à l'aide de la commande gcloud compute os-login ssh-keys remove :

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

    Remplacez KEY par la clé SSH publique à supprimer ou l'empreinte d'OS Login pour la clé que vous souhaitez supprimer.

REST

Pour supprimer une clé SSH publique de votre compte, procédez comme suit :

  1. Si vous ne savez pas quelle clé vous souhaitez supprimer, utilisez la méthode users.getLoginProfile pour afficher toutes les clés associées à votre compte :

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

    Remplacez ACCOUNT_EMAIL par l'adresse e-mail associée à votre compte.

  2. Copiez la valeur fingerprint de la clé que vous souhaitez supprimer.

  3. Supprimez la clé de votre compte à l'aide de la méthode users.sshPublicKeys.delete :

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

    Remplacez les éléments suivants :

    • ACCOUNT_EMAIL : adresse e-mail associée à votre compte.
    • FINGERPRINT : empreinte SHA-256 de la clé à supprimer.

Supprimer les clés SSH des VM qui utilisent des clés basées sur les métadonnées

Vous pouvez supprimer une clé SSH publique des métadonnées de projet ou d'instance à l'aide de la console Google Cloud, de gcloud CLI ou de l'API Compute Engine.

Une fois que vous avez supprimé la dernière clé des métadonnées pour un utilisateur particulier, ou que la dernière clé des métadonnées d'un utilisateur particulier expire, Compute Engine supprime le fichier ~/.ssh/authorized_keys de l'utilisateur sur la VM.

Attention : Si vous gérez les clés SSH dans les métadonnées, vous risquez de perturber la connexion aux VM pour les membres de votre projet. De plus, vous risquez d'accorder aux utilisateurs un accès non intentionnel aux VM, y compris aux utilisateurs extérieurs à votre projet. Pour en savoir plus, consultez la section Risques liés à la gestion manuelle des clés.

Supprimer une clé publique des métadonnées du projet

Supprimez une clé SSH publique des métadonnées du projet pour supprimer l'accès à toutes les VM d'un projet.

Lorsque vous supprimez une clé des métadonnées à l'aide de gcloud CLI et de l'API Compute Engine, vous devez récupérer la liste des clés existantes, modifier la liste des clés pour supprimer les clés indésirables et écraser l'ancienne clé avec la liste des clés à conserver, comme expliqué dans la section suivante.

Console

Pour supprimer une clé SSH publique des métadonnées du projet à l'aide de la console Google Cloud, procédez comme suit :

  1. Dans la console Google Cloud, accédez à la page Métadonnées.

    Accéder à la page "Métadonnées"

  2. Cliquez sur l'onglet Clés SSH.

  3. Cliquez sur Modifier en haut de la page.

  4. Accédez à la clé SSH que vous souhaitez supprimer, puis cliquez sur le bouton de suppression situé à côté de la clé SSH.

    Clé publique PuTTYgen.

    Répétez cette étape pour chaque clé SSH que vous souhaitez supprimer.

  5. Cliquez sur Enregistrer.

gcloud

Pour supprimer une clé SSH publique des métadonnées de projet à l'aide de gcloud CLI, procédez comme suit :

  1. Exécutez la commande gcloud compute project-info describe pour obtenir les métadonnées du projet :

    gcloud compute project-info describe
    

    Le résultat ressemble à ce qui suit :

    ...
    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. Copiez la valeur de métadonnées ssh-keys.

  3. Créez et ouvrez un fichier texte sur votre poste de travail.

  4. Dans le fichier, collez la liste des clés SSH que vous venez de copier, puis effacez celles que vous souhaitez supprimer des métadonnées du projet.

  5. Enregistrez et fermez le fichier.

  6. Exécutez la commande gcloud compute project-info add-metadata pour définir la valeur ssh-keys à l'échelle du projet :

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

    Remplacez KEY_FILE par l'un des éléments suivants :

    • Chemin d'accès au fichier que vous avez créé à l'étape précédente, si le projet comportait des clés SSH existantes.
    • Chemin d'accès à votre nouveau fichier de clé SSH publique, si le projet ne disposait pas de clés SSH existantes.

REST

Pour supprimer une clé SSH publique des métadonnées de projet à l'aide de l'API Compute Engine, procédez comme suit :

  1. Utilisez la méthode projects.get pour obtenir les valeurs fingerprint et ssh-keys à partir des métadonnées.

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

    Remplacez PROJECT_ID par l'ID du projet.

    La réponse est semblable à ce qui suit :

    ...
    "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. Copiez la liste des valeurs de clés SSH et effacez les clés que vous souhaitez supprimer.

  3. Utilisez la commande projects.setCommonInstanceMetadata pour supprimer les clés SSH.

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

    Remplacez les éléments suivants :

    • PROJECT_ID : ID de votre projet.
    • EXISTING_SSH_KEYS : liste des clés SSH que vous souhaitez conserver.
    • FINGERPRINT : valeur de fingerprint à partir de la réponse de la requête projects.get.

Supprimer une clé SSH publique des métadonnées d'instance

Supprimez une clé SSH publique des métadonnées d'instance pour supprimer l'accès à une seule VM.

Lorsque vous supprimez une clé des métadonnées à l'aide de gcloud CLI et de l'API Compute Engine, vous devez récupérer la liste des clés existantes, modifier la liste des clés pour supprimer les clés indésirables et écraser l'ancienne clé avec la liste des clés à conserver, comme expliqué dans la section suivante.

Console

Pour supprimer une clé SSH publique des métadonnées d'instance à l'aide de la console Google Cloud, procédez comme suit :

  1. Dans la console Google Cloud, accédez à la page Métadonnées.

    Accéder à la page "Métadonnées"

  2. Cliquez sur le nom de la VM pour laquelle vous souhaitez supprimer une clé.

  3. Cliquez sur Modifier.

  4. Dans le volet central, sous Clés SSH, cliquez sur Afficher et modifier. La section s'étend pour afficher toutes les clés SSH publiques au niveau de l'instance.

  5. Cliquez sur le bouton de suppression situé à côté de la clé que vous souhaitez supprimer :

    Clé publique PuTTYgen.

  6. Cliquez sur Enregistrer.

gcloud

Pour supprimer une clé SSH publique des métadonnées d'instance à l'aide de gcloud CLI, procédez comme suit :

  1. Exécutez la commande gcloud compute instances describe pour obtenir les métadonnées de la VM :

    gcloud compute instances describe VM_NAME
    

    Remplacez VM_NAME par le nom de la VM pour laquelle vous devez ajouter ou supprimer des clés SSH publiques.

    Le résultat ressemble à ce qui suit :

    ...
    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. Copiez la valeur de métadonnées ssh-keys.

  3. Créez et ouvrez un fichier texte sur votre poste de travail local.

  4. Dans le fichier, collez la liste des clés SSH que vous venez de copier, puis effacez celles que vous souhaitez supprimer.

  5. Enregistrez et fermez le fichier.

  6. Exécutez la commande gcloud compute project-info add-metadata pour définir la valeur ssh-keys à l'échelle du projet :

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

    Remplacez les éléments suivants :

    • VM_NAME : VM pour laquelle vous souhaitez supprimer la clé SSH.
    • KEY_FILE : chemin d'accès au fichier contenant la liste de toutes les clés SSH du projet.

REST

Pour supprimer une clé SSH publique des métadonnées d'instance à l'aide de l'API Compute Engine, procédez comme suit :

  1. Utilisez la méthode instances.get pour obtenir les valeurs fingerprint et ssh-keys à partir des métadonnées.

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

    Remplacez les éléments suivants :

    • PROJECT_ID : ID de votre projet.
    • ZONE : zone de la VM pour laquelle vous ajoutez une clé SSH.
    • VM_NAME : VM pour laquelle vous ajoutez une clé SSH.

    La réponse est semblable à ce qui suit :

    ...
    "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. Copiez la liste des valeurs de clés SSH et effacez les clés que vous souhaitez supprimer.

  3. Utilisez la commande instances.setMetadata pour supprimer les clés 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"
    }
    

    Remplacez les éléments suivants :

    • PROJECT_ID : ID de votre projet.
    • EXISTING_SSH_KEYS : valeur de la clé ssh-keys de la réponse de la requête projects.get
    • FINGERPRINT : valeur de fingerprint à partir de la réponse de la requête instances.get

Bloquer les clés SSH de projet à partir de VM qui utilisent des clés SSH basées sur les métadonnées

Vous pouvez empêcher les VM d'accepter les clés SSH stockées dans les métadonnées du projet en bloquant les clés SSH du projet provenant des VM. Vous pouvez bloquer les clés SSH de projet à partir de VM lors de la création d'une VM ou après la création d'une VM.

Bloquer les clés SSH de projet lors de la création d'une VM

Vous pouvez bloquer les clés SSH de projet à partir des VM lors de la création de la VM à l'aide de la console Google Cloud, de gcloud CLI ou de l'API Compute Engine.

Console

Pour créer une VM et l'empêcher d'accepter les clés SSH stockées dans les métadonnées du projet à l'aide de la console Google Cloud, procédez comme suit :

  1. Accédez à la page Créer une instance dans Google Cloud Console.

    Accéder à la page Créer une instance

  2. Spécifiez les détails de la VM.

  3. Développez la section Options avancées et procédez comme suit :

    1. Développez la section Sécurité.

    2. Cochez l'option Bloquer les clés SSH à l'échelle du projet.

  4. Pour créer et démarrer la VM, cliquez sur Créer.

gcloud

Pour créer une VM et l'empêcher d'accepter les clés SSH stockées dans les métadonnées du projet à l'aide de gcloud CLI, utilisez la commande gcloud compute instances create :

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

Remplacez VM_NAME par le nom de la nouvelle VM.

REST

Pour créer une VM et l'empêcher d'accepter les clés SSH stockées dans les métadonnées du projet à l'aide de Compute Engine, envoyez une requête POST à la méthode instances.insert :

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

Remplacez les éléments suivants :

  • PROJECT_ID : ID du projet
  • ZONE : zone de la VM

Dans le corps de la requête, indiquez les noms d'utilisateur et les clés SSH publiques dans la propriété items :

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

Bloquer les clés SSH de projet après de la création d'une VM

Vous pouvez bloquer les clés SSH de projet à partir des VM après la création de la VM à l'aide de la console Google Cloud, de gcloud CLI ou de l'API Compute Engine.

Console

Pour empêcher les VM d'accepter les connexions à partir de clés SSH stockées dans les métadonnées du projet à l'aide de la console Google Cloud, procédez comme suit :

  1. Dans la console Google Cloud, accédez à la page Métadonnées.

    Accéder à la page "Métadonnées"

  2. Cliquez sur le nom de la VM pour laquelle vous souhaitez bloquer les clés SSH de projet.

  3. Cliquez sur Modifier.

  4. Sous Clés SSH, cochez la case Bloquer les clés SSH à l'échelle du projet.

  5. Lorsque vous avez terminé de modifier le paramètre de connexion pour les clés SSH, cliquez sur Enregistrer.

gcloud

Pour empêcher les VM d'accepter les connexions à partir de clés SSH stockées dans les métadonnées du projet à l'aide de gcloud CLI, procédez comme suit :

Exécutez la commande gcloud compute instances add-metadata suivante :

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

Remplacez VM_NAME par le nom de la VM pour laquelle vous souhaitez bloquer les clés SSH publiques au niveau du projet.

REST

Pour empêcher les VM d'accepter les connexions à partir de clés SSH stockées dans les métadonnées du projet à l'aide de l'API Compute Engine, procédez comme suit :

  1. Utilisez la méthode instances.get pour obtenir la valeur fingerprint à partir des métadonnées.

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

    Remplacez les éléments suivants :

    • PROJECT_ID : ID de votre projet.
    • ZONE : zone de la VM pour laquelle vous ajoutez une clé SSH.
    • VM_NAME : VM pour laquelle vous ajoutez une clé SSH.

    La réponse est semblable à ce qui suit :

    ...
    "fingerprint": "utgYE_XWtE8="
    ...
    
  2. Utilisez la méthode instances.setMetadata pour définir block-project-ssh-keys sur 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"
    }
    

    Remplacez les éléments suivants :

    • PROJECT_ID est l'ID de votre projet.
    • ZONE est la zone où se situe votre instance.
    • INSTANCE_NAME est l'instance sur laquelle vous souhaitez bloquer les clés à l'échelle du projet.
    • FINGERPRINT : valeur de fingerprint à partir de la réponse de la requête instances.get.

Étape suivante