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 Trusted Cloud by S3NS services et aux API. Pour exécuter du code ou des exemples depuis un environnement de développement local, vous pouvez vous authentifier auprès de Compute Engine en sélectionnant l'une des options suivantes:

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Trusted Cloud console to access Trusted Cloud by S3NS services and APIs, you don't need to set up authentication.

    gcloud

    1. After installing the Google Cloud CLI, sign in to the gcloud CLI with your federated identity and then initialize it by running the following command:

      gcloud init
    2. Set a default region and zone.
    3. 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.

        After installing the Google Cloud CLI, sign in to the gcloud CLI with your federated identity and then initialize it by running the following command:

        gcloud init

      Pour en savoir plus, consultez la section S'authentifier pour utiliser REST dans la documentation sur l' Trusted Cloud authentification.

Supprimer des clés SSH

Vous pouvez supprimer une clé SSH publique des métadonnées de projet ou d'instance à l'aide de la consoleTrusted 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.

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 de projet à l'aide de la consoleTrusted Cloud , procédez comme suit:

  1. Dans la console Trusted 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.

    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 consoleTrusted Cloud , procédez comme suit:

  1. Dans la console Trusted Cloud , accédez à la page Instances de VM.

    Accéder à la page Instances de VM

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

  3. Cliquez sur Modifier.

  4. Dans la section 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é SSH que vous souhaitez supprimer.

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

  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 consoleTrusted Cloud , de gcloud CLI ou de l'API Compute Engine.

Console

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

  1. Dans la console Trusted Cloud , accédez à la page Créer une instance.

    Accéder à la page Créer une instance

  2. Pour bloquer les clés SSH du projet, procédez comme suit:

    1. Dans le menu de navigation, cliquez sur Sécurité.

    2. Développez la section Gérer l'accès.

    3. Pour désactiver OS Login, décochez la case Contrôler l'accès aux VM à l'aide des autorisations IAM.

    4. Cochez la case Bloquer les clés SSH à l'échelle du projet.

  3. Facultatif: spécifiez d'autres options de configuration. Pour en savoir plus, consultez la section Options de configuration lors de la création d'une instance.

  4. Pour créer et démarrer l'instance, 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 consoleTrusted 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 Trusted Cloud , procédez comme suit:

  1. Dans la console Trusted Cloud , accédez à la page Instances de VM.

    Accéder à la page Instances de VM

  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