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.
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 :
Connectez-vous et générez le fichier kubeconfig pour le serveur d'API Management si vous n'en avez pas.
Utilisez le chemin d'accès au fichier kubeconfig du serveur de l'API Management pour remplacer
MANAGEMENT_API_SERVERdans 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
Dans le menu de navigation, cliquez sur Machines virtuelles > Instances.
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.
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 :
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-keygenpour 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 2048Remplacez les variables en utilisant les définitions suivantes.
Variable Définition KEY_FILENAMENom de votre fichier de clé SSH. Par exemple, le nom de fichier my-ssh-keygénère un fichier de clé privée nommémy-ssh-keyet un fichier de clé publique nommémy-ssh-key.pub.USERNAMEVotre nom d'utilisateur sur la VM, tel que testuseroutestuser_gmail_com.L'utilitaire
ssh-keygenenregistre votre fichier de clé privée dans le chemin d'accès~/.ssh/KEY_FILENAMEet 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... testuserImportez 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.yamlpour accorder l'accès à l'instance de VM avec la clé privéeKEY_FILENAMEet 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_NAMERemplacez les variables en utilisant les définitions suivantes :
Variable Définition VM_NAMESPACEEspace de noms de la VM. AR_NAMENom de la demande d'accès. USERNAMEVotre nom d'utilisateur sur la VM, tel que testuseroutestuser_gmail_com.VM_NAMENom de l'instance de VM. Créez la clé :
kubectl create -f access_request.yaml --kubeconfig MANAGEMENT_API_SERVERVérifiez l'état de votre demande d'accès :
kubectl get virtualmachineaccessrequests.virtualmachine.gdc.goog -n VM_NAMESPACE --kubeconfig MANAGEMENT_API_SERVERRemplacez
VM_NAMESPACEpar l'espace de noms de la VM.Un état
configuredindique que vous pouvez vous connecter à la VM.Connectez-vous à la VM :
ssh -i PATH_TO_PRIVATE_KEY USERNAME@EXTERNAL_IPRemplacez les valeurs suivantes :
PATH_TO_PRIVATE_KEYavec le chemin d'accès au fichier de clé SSH privée correspondant à la clé publique que vous avez ajoutée à la VM.USERNAMEavec le nom d'utilisateur que vous avez spécifié lors de la création de la clé SSH. Par exemple,cloudysanfrancisco_example_comoucloudysanfrancisco.EXTERNAL_IPpar 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 :
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_SERVERSi la VM n'est pas en cours d'exécution, vous ne pouvez pas vous connecter ni configurer de nouvelles requêtes.
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.
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.
Si votre
VirtualMachineAccessRequestaffiche l'étatconfigured, vérifiez les exigences suivantes :- Vous avez activé le transfert de données vers votre VM sur le port 22.
- Votre machine est acheminée vers la VM. Par exemple, vous pouvez utiliser la commande
curl -vso /dev/null --connect-timeout 5 EXTERNAL_IP:22pour vérifier le routage.
Si l'état
faileds'affiche pour votreVirtualMachineAccessRequest, 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_SERVERRemplacez les variables modifiables de la commande précédente par vos propres valeurs.
Si l'état de votre
VirtualMachineAccessRequestest 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
- Dans le menu de navigation, cliquez sur Machines virtuelles > Instances.
- Dans la liste des VM, recherchez la VM Windows en cours d'exécution à laquelle vous souhaitez vous connecter.
- 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.
- Dans le champ Nom d'utilisateur, saisissez votre nom d'utilisateur.
- 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.
- Cliquez sur Copier.
- Accédez à votre client de bureau à distance et sélectionnez votre nom d'utilisateur.
- Dans le champ de saisie Mot de passe, saisissez votre mot de passe.
- Appuyez sur ENTRÉE ou RETOUR.
API
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 -puboutCréez un fichier YAML.
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_KEYRemplacez 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-----Appliquez le contenu du fichier :
kubectl --kubeconfig=MANAGEMENT_API_SERVER apply -f FILENAMERemplacez FILENAME par le nom du fichier pour la demande de réinitialisation du mot de passe.
Affichez l'état de la ressource
VirtualMachinePasswordResetRequest. À condition que la VM soit à l'étatRunning, la ressource génère le mot de passe en une minute ou moins.kubectl --kubeconfig=MANAGEMENT_API_SERVER describe \ -n VM_NAMESPACE PRR_NAMELocalisez le champ
status.encryptedPasswordcontenant le mot de passe généré.Copiez la valeur dans
status.encryptedPasswordet 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:sha1Remplacez 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.
- ENCRYPTED_PASSWORD : mot de passe généré à partir du champ
Ouvrez le client de bureau à distance, puis cliquez sur Profil de connexion à distance. Une boîte de dialogue de connexion s'affiche.
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.
Cliquez sur Enregistrer et connecter.