Se connecter à une VM

Google Distributed Cloud (GDC) air-gapped utilise l'authentification SSH basée sur des clés pour établir des connexions vers des instances de machines virtuelles (VM) Linux. Par défaut, les mots de passe ne sont pas configurés pour les utilisateurs locaux sur les VM Linux.

Avant de commencer

Avant de vous connecter à une VM, vous devez remplir les conditions préalables suivantes :

  • Activez la gestion des accès. Vous ne pouvez pas continuer sans que la gestion des accès soit activée dans l'environnement invité. Par défaut, la gestion des accès est activée sur les nouvelles VM.
  • Activez l'accès externe aux VM pour tous les pairs sur le port 22 du protocole TCP (Transmission Control Protocol).
    • Pour les VM Windows, activez l'accès externe aux VM sur le port 3389.
  • Configurez une ressource personnalisée ProjectNetworkPolicy (PNP) dans le projet où réside la VM.
    • En configurant un PNP dans le projet, vous pouvez accéder à la VM en dehors du projet ou de l'organisation.
    • Pour savoir si vous n'avez pas de PNP, demandez à votre opérateur d'infrastructure (IO).
  • Accès à la connexion au cluster. Suivez les étapes de la CLI dans Se connecter pour vous connecter au cluster.
Pour utiliser les commandes de l'interface de ligne de commande (CLI) gdcloud, assurez-vous d'avoir téléchargé, installé et configuré la CLI gdcloud. Toutes les commandes pour Distributed Cloud utilisent la CLI gdcloud ou kubectl et nécessitent un environnement Linux.

Obtenir le chemin d'accès au fichier kubeconfig

Pour exécuter des commandes sur le serveur de l'API Management, assurez-vous de disposer des ressources suivantes :

  1. Connectez-vous et générez le fichier kubeconfig pour le serveur d'API Management si vous n'en avez pas.

  2. Utilisez le chemin d'accès au fichier kubeconfig du serveur de l'API Management pour remplacer MANAGEMENT_API_SERVER dans ces instructions.

Demander des autorisations et un accès

Pour effectuer les tâches listées sur cette page, vous devez disposer du rôle Administrateur VirtualMachine du projet. Suivez les étapes pour vérifier que vous disposez du rôle Administrateur VirtualMachine du projet (project-vm-admin) dans l'espace de noms du projet dans lequel réside la VM.

Pour les opérations sur les VM à l'aide de la console GDC ou de la CLI gdcloud, demandez à votre administrateur IAM de projet de vous attribuer le rôle Administrateur de machines virtuelles du projet et le rôle Lecteur du projet (project-viewer).

Établir une connexion à une VM

Cette section explique comment établir une connexion aux VM Linux et Windows.

Se connecter à une VM Linux

Pour établir une connexion à une VM Linux, utilisez la console GDC, gdcloud CLI ou l'API Virtual Machine Manager.

Console

  1. Dans le menu de navigation, cliquez sur Machines virtuelles > Instances.

  2. Dans la liste des VM, recherchez la ligne de la VM en cours d'exécution à laquelle vous souhaitez vous connecter. Dans la colonne Connecter, cliquez sur SSH.

  3. Un terminal de navigateur SSH s'ouvre. Saisissez une commande dans le shell ou cliquez sur FTP pour parcourir la structure des fichiers et importer des fichiers.

gdcloud

Connectez-vous à une VM à l'aide de SSH en exécutant la commande gdcloud compute ssh.

gdcloud compute ssh VM_NAME --project=PROJECT_ID

Remplacez les variables suivantes :

  • VM_NAME : Nom de la VM.
  • PROJECT_ID : ID du projet contenant la VM.

Si vous avez défini les propriétés par défaut de la CLI, vous pouvez omettre l'indicateur --project de cette commande. Exemple :

gdcloud compute ssh VM_NAME

API

Connectez-vous à une VM :

  • Ouvrez un terminal.
  • Créez une paire de clés SSH.
  • Importez la clé publique et le nom d'utilisateur avec une valeur TTL (Time-To-Live).

GDC récupère la clé SSH et le nom d'utilisateur, puis crée un compte utilisateur avec le nom d'utilisateur. Sur les VM Linux, GDC stocke la clé publique dans le fichier ~/.ssh/authorized_keys associé à votre utilisateur sur la VM.

Pour vous connecter à une VM depuis la ligne de commande, procédez comme suit :

  1. Créez une paire de clés SSH et un nom d'utilisateur.

    Sur les postes de travail Linux et macOS, utilisez l'utilitaire ssh-keygen pour créer une paire de clés SSH. L'exemple de code suivant crée une paire de clés RSA (Rivest–Shamir-Adleman) :

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

    Remplacez les variables en utilisant les définitions suivantes.

    VariableDéfinition
    KEY_FILENAME Nom de votre fichier de clé SSH. Par exemple, le nom de fichier my-ssh-key génère un fichier de clé privée nommé my-ssh-key et un fichier de clé publique nommé my-ssh-key.pub.
    USERNAME Votre nom d'utilisateur sur la VM, tel que testuser ou testuser_gmail_com.

    L'utilitaire ssh-keygen enregistre votre fichier de clé privée dans le chemin d'accès ~/.ssh/KEY_FILENAME et votre fichier de clé publique dans le chemin d'accès ~/.ssh/KEY_FILENAME.pub.

    Une clé publique pour l'utilisateur, testuser, ressemble à l'exemple suivant :

    ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAu5kKQCPF... testuser
    
  2. Importez votre clé dans la VM et créez une ressource Kubernetes avec votre clé publique, votre nom d'utilisateur et la valeur TTL (Time To Live) de la clé.

    L'exemple suivant utilise un fichier access_request.yaml pour accorder l'accès à l'instance de VM avec la clé privée KEY_FILENAME et une valeur TTL de dix minutes :

    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
    

    Remplacez les variables en utilisant les définitions suivantes :

    VariableDéfinition
    VM_NAMESPACE Espace de noms de la VM.
    AR_NAME Nom de la demande d'accès.
    USERNAME Votre nom d'utilisateur sur la VM, tel que testuser ou testuser_gmail_com.
    VM_NAME Nom de l'instance de VM.
  3. Créez la clé :

    kubectl create -f access_request.yaml --kubeconfig MANAGEMENT_API_SERVER
    
  4. Vérifiez l'état de votre demande d'accès :

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

    Remplacez VM_NAMESPACE par l'espace de noms de la VM.

    Un état configured indique que vous pouvez vous connecter à la VM.

  5. Connectez-vous à la VM :

    ssh -i PATH_TO_PRIVATE_KEY USERNAME@EXTERNAL_IP
    

    Remplacez les valeurs suivantes :

    • PATH_TO_PRIVATE_KEY avec le chemin d'accès au fichier de clé SSH privée correspondant à la clé publique que vous avez ajoutée à la VM.
    • USERNAME avec le nom d'utilisateur que vous avez spécifié lors de la création de la clé SSH. Par exemple, cloudysanfrancisco_example_com ou cloudysanfrancisco.
    • EXTERNAL_IP par l'adresse IP Ingress externe de la VM.

Dépannage

Cette section décrit comment résoudre les problèmes qui peuvent survenir lors de la connexion à une instance de VM après la création de la demande d'accès.

Suivez les étapes ci-dessous pour identifier les problèmes potentiels :

  1. Vérifiez que la VM est en cours d'exécution. Remplacez les variables modifiables par vos valeurs dans la commande suivante :

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

    Si la VM n'est pas en cours d'exécution, vous ne pouvez pas vous connecter ni configurer de nouvelles requêtes.

  2. Vérifiez que la VM est en cours d'exécution depuis quelques minutes. Si la VM vient de démarrer, il est possible que les services requis pour l'accès SSH ne soient pas encore en cours d'exécution. En général, ils s'exécutent dans les cinq minutes suivant le démarrage.

  3. Vérifiez que vous n'avez pas dépassé la valeur TTL dans la demande d'accès. La clé est supprimée une fois que le temps atteint la valeur TTL.

  4. Si votre VirtualMachineAccessRequest affiche l'état configured, vérifiez les exigences suivantes :

    1. Vous avez activé le transfert de données vers votre VM sur le port 22.
    2. Votre machine est acheminée vers la VM. Par exemple, vous pouvez utiliser la commande
      curl -vso /dev/null --connect-timeout 5 EXTERNAL_IP:22 pour vérifier le routage.
  5. Si l'état failed s'affiche pour votre VirtualMachineAccessRequest, consultez l'état complet et le message d'erreur indiquant la raison de l'échec de la demande :

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

    Remplacez les variables modifiables de la commande précédente par vos propres valeurs.

  6. Si l'état de votre VirtualMachineAccessRequest est vide, il est possible que l'environnement invité ne soit pas en cours d'exécution.

Se connecter à une VM Windows

Pour vous connecter à une VM Windows, vous devez utiliser le protocole RDP (Remote Desktop Protocol) via une application de bureau à distance. Pour accéder à la VM via RDP, vous avez besoin d'un mot de passe que vous pouvez récupérer depuis la console GDC ou la ressource personnalisée VirtualMachinePasswordResetRequest de l'API Virtual Machine Manager.

Avant de continuer, vous devez d'abord installer le client Bureau à distance. Utilisez le lien suivant pour suivre les étapes en fonction de votre système d'exploitation. Pour accéder au lien, vous devez être connecté à Internet.

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

Pour établir une connexion à une VM Windows, procédez comme suit :

Console

  1. Dans le menu de navigation, cliquez sur Machines virtuelles > Instances.
  2. Dans la liste des VM, recherchez la VM Windows en cours d'exécution à laquelle vous souhaitez vous connecter.
  3. Dans la colonne Actions, cliquez sur Réinitialiser le mot de passe. La boîte de dialogue Définir un nouveau mot de passe Windows s'affiche.
  4. Dans le champ Nom d'utilisateur, saisissez votre nom d'utilisateur.
  5. Cliquez sur Définir. La boîte de dialogue Nouveau mot de passe Windows s'affiche avec un mot de passe généré de manière aléatoire. Ce mot de passe contient des caractères alphanumériques et non alphanumériques.
  6. Cliquez sur  Copier.
  7. Accédez à votre client de bureau à distance et sélectionnez votre nom d'utilisateur.
  8. Dans le champ de saisie Mot de passe, saisissez votre mot de passe.
  9. Appuyez sur ENTRÉE ou RETOUR.

API

  1. Générez une clé RSA. Vous avez besoin de cette clé pour récupérer le mot de passe à partir de la ressource VirtualMachinePasswordResetRequest.

    openssl genrsa -out private-key.pem 2048
    # Get the RSA public key
    openssl rsa -in private-key.pem -outform PEM -pubout
    
  2. Créez un fichier YAML.

  3. Importez la clé RSA que vous avez générée, le nom de la VM et un nom d'utilisateur que vous fournissez pour accéder au client Bureau à distance :

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

    Remplacez les variables en utilisant les définitions suivantes :

    Variable Définition
    VM_NAMESPACE Nom de l'espace de noms dans lequel réside la VM.
    PRR_NAME Nom que vous donnez à la demande de réinitialisation du mot de passe. Par exemple, vmprr2.
    VM_NAME Nom de la VM. Par exemple, vm-test.
    USERNAME Nom d'utilisateur que vous fournissez pour vous connecter à la VM avec le client Bureau à distance. Par exemple, test-user.
    PUBLIC_KEY Clé RSA générée à l'étape 2. Vous devez mettre en forme PUBLIC_KEY sur plusieurs lignes.

    L'exemple suivant montre un fichier YAML avec les valeurs et la mise en forme nécessaires pour effectuer une demande de réinitialisation du mot de passe :

    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. Appliquez le contenu du fichier :

    kubectl --kubeconfig=MANAGEMENT_API_SERVER apply -f FILENAME
    

    Remplacez FILENAME par le nom du fichier pour la demande de réinitialisation du mot de passe.

  5. Affichez l'état de la ressource VirtualMachinePasswordResetRequest. À condition que la VM soit à l'état Running, la ressource génère le mot de passe en une minute ou moins.

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

    Localisez le champ status.encryptedPassword contenant le mot de passe généré.

  6. Copiez la valeur dans status.encryptedPassword et déchiffrez le mot de passe généré :

    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
    

    Remplacez les éléments suivants :

    • ENCRYPTED_PASSWORD : mot de passe généré à partir du champ status.encryptedPassword.
    • PASSWORD_FILENAME : fichier temporaire permettant de stocker le mot de passe décodé en base64.

    Vous verrez ensuite le mot de passe décrypté s'afficher pour vous connecter à la VM via RDP.

  7. Ouvrez le client de bureau à distance, puis cliquez sur Profil de connexion à distance. Une boîte de dialogue de connexion s'affiche.

  8. Dans l'onglet Basique, saisissez vos valeurs dans les champs suivants :

    • Serveur : adresse IP d'entrée de l'état d'accès externe de la VM, avec le numéro de port d'accès externe de la VM ajouté. Pour récupérer l'adresse IP de l'entrée, consultez Entrée.
    • Nom d'utilisateur : nom d'utilisateur que vous avez spécifié dans la demande de réinitialisation du mot de passe. Exemple :test-user
    • Mot de passe : mot de passe généré que vous avez déchiffré à partir de l'état de la demande de réinitialisation du mot de passe.
  9. Cliquez sur Enregistrer et connecter.