Ce document explique comment déployer Apache Guacamole sur GKE et Cloud SQL.
Ces instructions sont destinées aux administrateurs et aux ingénieurs de serveur qui souhaitent héberger Guacamole sur GKE et Cloud SQL. Dans ce document, nous partons du principe que vous maîtrisez le déploiement de charges de travail sur Kubernetes et Cloud SQL pour MySQL. Vous devez également connaître Identity and Access Management et Google Compute Engine.
Architecture
Le schéma suivant montre comment un équilibreur de charge Google Cloud est configuré avec IAP pour protéger une instance du client Guacamole s'exécutant dans GKE :
Le client Guacamole se connecte au service de backend guacd, qui distribue les connexions de bureau à distance à une ou plusieurs VM Compute Engine. Les scripts déploient également une instance Cloud SQL afin de gérer les données de configuration pour Guacamole.
Pour en savoir plus, consultez la page Apache Guacamole sur GKE et Cloud SQL.
Objectifs
- Déployer l'infrastructure à l'aide de Terraform
- Créer une base de données Guacamole dans Cloud SQL
- Déployer Guacamole sur un cluster GKE à l'aide de Skaffold
- Tester une connexion à une VM via Guacamole
Coûts
Dans ce document, vous utilisez les composants facturables suivants de Google Cloud :
Obtenez une estimation des coûts en fonction de votre utilisation prévue à l'aide du simulateur de coût.
Une fois que vous avez terminé les tâches décrites dans ce document, vous pouvez éviter de continuer à payer des frais en supprimant les ressources que vous avez créées. Pour en savoir plus, consultez la section Effectuer un nettoyage.
Avant de commencer
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Resource Manager, Service Usage, Artifact Registry, and Compute Engine APIs.
-
In the Google Cloud console, activate Cloud Shell.
Déployer l'infrastructure
Dans cette section, vous utilisez Terraform pour déployer les ressources suivantes :
- Cloud privé virtuel
- Une règle de pare-feu
- Un cluster GKE
- Un dépôt Artifact Registry
- Cloud SQL pour MySQL
- Une VM pour la gestion de la base de données MySQL
- Comptes de service
La configuration Terraform permet également d'utiliser IAP dans votre projet.
Dans Cloud Shell, clonez le dépôt GitHub.
git clone https://github.com/GoogleCloudPlatform/guacamole-on-gcp.git
Déployez l'infrastructure requise à l'aide de Terraform :
cd guacamole-on-gcp/tf-infra unset GOOGLE_CLOUD_QUOTA_PROJECT terraform init -upgrade terraform apply
Suivez les instructions pour saisir l'ID de votre projet Google Cloud.
Pour approuver la requête de déploiement des ressources de Terraform dans votre projet, saisissez
yes
.Le déploiement de toutes les ressources prend plusieurs minutes.
Déployer la base de données Guacamole
Dans cette section, vous allez créer la base de données et les tables Guacamole dans Cloud SQL pour MySQL et remplir la base de données avec les informations utilisateur de l'administrateur.
Dans Cloud Shell, définissez des variables d'environnement et recherchez le mot de passe racine de la base de données :
cd .. source bin/read-tf-output.sh
Notez le mot de passe racine de la base de données, car vous en aurez besoin dans les étapes suivantes.
Le script lit les variables de sortie de l'exécution Terraform et définit les variables d'environnement suivantes, qui sont utilisées tout au long de cette procédure :
CLOUD_SQL_INSTANCE ZONE REGION DB_MGMT_VM PROJECT_ID GKE_CLUSTER GUACAMOLE_URL SUBNET
Copiez les fichiers de script
create-schema.sql
etinsert-admin-user.sql
sur la VM de gestion de base de données, puis connectez-vous à la VM :gcloud compute scp \ --tunnel-through-iap \ --zone=$ZONE \ create-schema.sql \ insert-admin-user.sql \ $DB_MGMT_VM: gcloud compute ssh $DB_MGMT_VM \ --zone=$ZONE \ --tunnel-through-iap
Une session de console sur la VM de gestion de base de données via Cloud Shell est maintenant établie.
Installez les outils clients MySQ L:
sudo apt-get update sudo apt-get install -y mariadb-client
Connectez-vous à Cloud SQL et créez la base de données. Lorsque vous êtes invité à entrer un mot de passe, utilisez le mot de passe racine que vous avez noté précédemment dans cette section.
export CLOUD_SQL_PRIVATE_IP=$(curl http://metadata.google.internal/computeMetadata/v1/instance/attributes/cloud_sql_ip -H "Metadata-Flavor: Google") mysql -h $CLOUD_SQL_PRIVATE_IP -u root -p
Accordez aux utilisateurs de la base de données les autorisations nécessaires sur celle-ci :
CREATE DATABASE guacamole; USE guacamole; GRANT SELECT,INSERT,UPDATE,DELETE ON guacamole.* TO 'guac-db-user'; FLUSH PRIVILEGES; SOURCE create-schema.sql; SOURCE insert-admin-user.sql; quit
Une fois l'exécution des commandes MySQL terminée, quittez la session SSH de la VM :
exit
Déployer Guacamole sur GKE à l'aide de Skaffold
Dans cette section, vous déployez l'application Guacamole sur le cluster GKE à l'aide de Skaffold. Skaffold gère le workflow de création, de transfert et de déploiement d'images Guacamole sur les clusters GKE.
Dans Cloud Shell, déployez la configuration GKE à l'aide de Terraform :
cd tf-k8s terraform init -upgrade terraform apply -parallelism=1
Obtenez les identifiants du cluster GKE :
gcloud container clusters get-credentials \ --region $REGION $GKE_CLUSTER
Exécutez Skaffold à partir de la racine du dépôt Git cloné :
cd .. skaffold --default-repo $REGION-docker.pkg.dev/$PROJECT_ID/guac-repo run
L'outil Skaffold crée des images de conteneur pour Guacamole via Google Cloud Build (la ligne de commande inclut une option spécifiant le dépôt vers lequel transférer les images). L'outil exécute également une étape kustomize pour générer des ConfigMaps et des Secrets Kubernetes en fonction du résultat de l'exécution de Terraform.
Vérifiez que le certificat a été provisionné :
kubectl get -w managedcertificates/guacamole-client-cert \ -n guacamole \ -o jsonpath="{.spec.domains[0]} is {.status.domainStatus[0].status}"
Le provisionnement du certificat peut prendre jusqu'à 60 minutes.
Une fois le certificat provisionné, vous pouvez accéder à votre URL dans un navigateur.
Affichez l'URL de la sortie Terraform :
echo $GUACAMOLE_URL
Dans une fenêtre de navigateur, saisissez l'URL obtenue à l'étape précédente.
Lorsque IAP vous y invite, connectez-vous à l'aide de vos identifiants Google.
Une fois connecté, vous êtes connecté à Guacamole avec des droits d'administrateur, en fonction du script
insert-admin-user.sql
que vous avez exécuté précédemment dans cette procédure.
Vous pouvez maintenant ajouter des utilisateurs en fonction de leur adresse e-mail via l'interface utilisateur de Guacamole. Pour en savoir plus, consultez la section Administration dans la documentation Guacamole.
Ces utilisateurs supplémentaires nécessitent également des autorisations via Google IAM, avec le rôle IAP-secured Web App User
.
Tester une connexion à une VM
Une fois connecté à Guacamole après l'avoir déployé et configuré, vous pouvez créer une VM Windows et vous connecter à celle-ci via Guacamole.
Créer une VM
Dans Cloud Shell, créez une VM Windows pour tester les connexions à :
export TEST_VM=windows-vm gcloud compute instances create $TEST_VM \ --project=$PROJECT_ID \ --zone=$ZONE \ --machine-type=n1-standard-1 \ --subnet=$SUBNET \ --no-address \ --image-family=windows-2019 \ --image-project=windows-cloud \ --boot-disk-size=50GB \ --boot-disk-type=pd-standard \ —-shielded-secure-boot
Après avoir exécuté la commande, vous devrez peut-être attendre quelques minutes pour que Windows termine l'initialisation avant de passer à l'étape suivante.
Réinitialisez le mot de passe Windows de la VM que vous venez de créer:
gcloud compute reset-windows-password $TEST_VM \ --user=admin \ --zone=$ZONE
Ajouter une connexion à la VM
- Dans une fenêtre de navigateur, saisissez l'URL de l'instance Guacamole depuis la page Déployer Guacamole sur GKE à l'aide de Skaffold, puis connectez-vous via IAP.
- Dans l'interface utilisateur de Guacamole, cliquez sur votre nom d'utilisateur, puis sur Paramètres.
- Sous l'onglet Connexions, cliquez sur Nouvelle connexion.
- Dans le champ Nom, saisissez un nom pour la connexion.
- Dans le champ Emplacement, saisissez l'emplacement de la connexion.
- Dans la liste déroulante Protocole, sélectionnez RDP.
Sous Réseau, dans le champ Nom d'hôte, saisissez le nom de la VM que vous avez créée,
windows-vm
.Le DNS de votre projet résout ce nom d'hôte sur l'adresse IP interne de l'instance.
Dans la section Authentification, définissez les champs suivants :
- Nom d'utilisateur :
admin
- Mot de passe : le mot de passe que vous avez obtenu lorsque vous avez réinitialisé le mot de passe de la VM
- Mode de sécurité :
NLA
(Authentification au niveau du réseau) Ignorer le certificat du serveur : cochez la case
Les VM Windows Compute Engine sont provisionnées avec un certificat autosigné pour les services de bureau à distance. Vous devez donc indiquer à Guacamole d'ignorer les problèmes de validation du certificat.
- Nom d'utilisateur :
Cliquez sur Enregistrer.
Cliquez sur votre nom d'utilisateur, puis sélectionnez Accueil.
Cliquez sur la connexion que vous venez de créer pour tester la connectivité. Après quelques secondes, le bureau de l'instance de VM doit s'afficher.
Pour en savoir plus sur la configuration de Guacamole, consultez le manuel Apache Guacamole.
Effectuer un nettoyage
Pour éviter que les ressources utilisées dans cette procédure soient facturées sur votre compte Google Cloud, supprimez le projet contenant les ressources, ou conservez le projet et supprimez chaque ressource individuellement.
Supprimer le projet
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Supprimer les nouvelles ressources
Au lieu de supprimer le projet complet, vous pouvez supprimer les ressources individuelles créées au cours de cette procédure. Notez que la configuration de l'écran d'autorisation OAuth ne peut pas être supprimée d'un projet, mais seulement modifiée.
Dans Cloud Shell, utilisez Terraform pour supprimer les ressources :
cd ~/guacamole-on-gcp/tf-k8s terraform destroy cd ~/guacamole-on-gcp/tf-infra terraform destroy gcloud compute instances delete $TEST_VM –-zone=$ZONE
Étapes suivantes
- Consultez les conseils de GKE sur la page Renforcer la sécurité d'un cluster.
- Consultez la page Chiffrer les secrets au niveau de la couche d'application pour savoir comment renforcer la sécurité des secrets, tels que les identifiants de base de données et les identifiants OAuth.
- Passez en revue les Conditions IAM pour découvrir comment fournir un contrôle plus précis sur l'accès des utilisateurs à Guacamole.
- Apprenez-en plus sur le fonctionnement de l'intégration IAP en examinant le fournisseur d'authentification personnalisé dans le dépôt GitHub.
- Pour découvrir d'autres architectures de référence, schémas et bonnes pratiques, consultez le Centre d'architecture cloud.