Comment configurer l'accès à distance à MySQL sur Google Compute Engine

Ce tutoriel vous explique comment exécuter une base de données MySQL sur un réseau privé dans Google Cloud Platform (GCP) pour permettre un accès à distance et sécurisé à la base de données à l'aide de Compute Engine.

Suivez ce tutoriel si vous souhaitez installer votre propre base de données MySQL sur Compute Engine, mais en limitant l'accès aux clients MySQL autorisés. Vous voudrez peut-être gérer votre propre instance MySQL au lieu d'utiliser le service géré, notamment si vous déployez des instances interrégionales, si vous souhaitez utiliser des paramètres avancés ou si vous avez des besoins spécifiques en termes de performances.

Ce tutoriel explique comment configurer votre application de serveur MySQL pour accepter le trafic distant provenant d'un client MySQL installé sur une instance Compute Engine exécutée sur le même réseau privé.

Pour savoir comment choisir la bonne option de déploiement MySQL, reportez-vous à la page Comment installer MySQL sur Compute Engine.

Pour ce tutoriel, nous partons du principe que vous connaissez bien les éléments suivants :

  • Commandes Linux de base
  • Ubuntu-server 18.04
  • MySQL 5.7
  • Compute Engine

Architecture

Dans ce tutoriel, vous allez déployer deux instances Compute Engine. Une instance correspond au serveur et l'autre instance correspond au client, comme illustré dans le diagramme suivant :

Architecture de deux instances déployées

Objectifs

  • Créer une instance Compute Engine et installer le serveur MySQL
  • Créer une instance Compute Engine et installer le client MySQL
  • Configurer le serveur MySQL pour l'accès à distance
  • Supprimer l'accès public au serveur MySQL
  • Se connecter à distance à MySQL
  • Créer une règle de pare-feu VPC Service Controls

Coûts

Ce tutoriel utilise les composants facturables de Google Cloud Platform répertoriés ici :

  • Compute Engine
  • Cloud Storage

Vous pouvez vous servir du simulateur de coût pour générer une estimation des coûts en fonction de votre utilisation prévue. Les nouveaux utilisateurs de GCP peuvent bénéficier d'un essai gratuit.

Avant de commencer

  1. Connectez-vous à votre compte Google.

    Si vous n'en possédez pas déjà un, vous devez en créer un.

  2. Sélectionnez ou créez un projet Google Cloud Platform.

    Accéder à la page "Gérer les ressources"

  3. Assurez-vous que la facturation est activée pour votre projet Google Cloud Platform.

    Découvrir comment activer la facturation

  4. Activez Compute Enginel'API requise.

    Activer l'API.

Une fois que vous avez terminé ce tutoriel, vous pouvez éviter de continuer à payer des frais en supprimant les ressources que vous avez créées. Pour en savoir plus, consultez Effectuer un nettoyage.

Créer des instances Compute Engine

Créez deux instances pour MySQL : une instance de serveur et une instance de client.

Créer une instance de client Compute Engine

  • Créez une instance Compute Engine. Pour la configurer, procédez comme suit :
    • Nommez l'instance my-client.
    • Définissez l'indicateur --zone sur la zone dans laquelle vous souhaitez créer votre instance.
    • Définissez l'indicateur --image-project sur ubuntu-os-cloud.
    • Définissez l'indicateur --image-family sur ubuntu-1804-lts.
    • Définissez l'indicateur --scopes sur https://www.googleapis.com/auth/cloud-platform.
    gcloud compute instances create my-client --zone [ZONE] --image-project ubuntu-os-cloud --image-family ubuntu-1804-lts --scopes https://www.googleapis.com/auth/cloud-platform
  • Créer une instance de serveur Compute Engine

  • Créez une instance Compute Engine. Pour la configurer, procédez comme suit :
    • Nommez l'instance my-server.
    • Définissez l'indicateur --zone sur la zone dans laquelle vous souhaitez créer votre instance.
    • Définissez l'indicateur --image-project sur ubuntu-os-cloud.
    • Définissez l'indicateur --image-family sur ubuntu-1804-lts.
    • Définissez l'indicateur --scopes sur https://www.googleapis.com/auth/cloud-platform.
    gcloud compute instances create my-server --zone [ZONE] --image-project ubuntu-os-cloud --image-family ubuntu-1804-lts --scopes https://www.googleapis.com/auth/cloud-platform
  • Installer un client MySQL

    La procédure décrite ci-dessous permet d'installer MySQL sur une instance Compute Engine.

    1. Dans la console GCP, accédez à la page "Instances de VM".

      Accéder à la page Instances de VM

    2. Dans la liste des instances de machine virtuelle, cliquez sur SSH sur la ligne de l'instance à laquelle vous souhaitez vous connecter.

    3. Mettez à jour le gestionnaire de packages apt-get.
      sudo apt-get update
      
    4. Installez le package client MySQL.
      sudo apt-get -y install mysql-client-5.7

    Installer un serveur MySQL

    La procédure décrite ci-dessous permet d'installer MySQL sur une instance Compute Engine.

    1. Dans la console GCP, accédez à la page "Instances de VM".

      Accéder à la page Instances de VM

    2. Dans la liste des instances de machine virtuelle, cliquez sur SSH sur la ligne de l'instance à laquelle vous souhaitez vous connecter.

    3. Mettez à jour le gestionnaire de packages apt-get.
      sudo apt-get update
      
    4. Installez le package serveur MySQL.
      sudo apt-get -y install mysql-server-5.7

    Améliorer la sécurité de l'installation de MySQL

    Vous devez définir un mot de passe racine pour MySQL et effectuer une maintenance de sécurité de base sur la configuration de votre serveur MySQL. Pour en savoir plus, consultez la documentation MySQL relative à mysql_secure_installation.

    1. Dans Cloud Shell, améliorez la sécurité de l'installation de MySQL.

      sudo mysql_secure_installation
      
    2. Appuyez sur enter pour ignorer la configuration du plug-in VALIDATE PASSWORD.

    3. Saisissez un nouveau mot de passe racine deux fois.

    4. Pour supprimer les utilisateurs anonymes, saisissez Y et appuyez sur enter.

    5. Pour empêcher la connexion racine à distance, saisissez Y et appuyez sur enter .

    6. Pour supprimer la base de données de test, saisissez Y et appuyez sur enter.

    7. Pour actualiser les tables de privilèges, saisissez Y et appuyez sur enter.

    Configurer le serveur MySQL

    Avant de pouvoir vous connecter à distance au serveur MySQL, vous devez le configurer pour écouter sur son adresse IP interne. Ensuite, vous devez créer un compte utilisateur non racine pour que le client MySQL se connecte au serveur.

    Toutes les commandes client MySQL doivent inclure certains indicateurs de ligne de commande (par exemple, pour s'authentifier). Les commandes MySQL de cette section incluent les indicateurs suivants : --user pour le nom d'utilisateur, -p pour le mot de passe et -e pour exécuter l'instruction donnée et quitter immédiatement. Pour en savoir plus, reportez-vous à la référence des options de commande MySQL 5.7.

    1. Dans Cloud Shell, utilisez SSH pour vous connecter à l'instance my-server.

    2. Mettez à jour le fichier de configuration /etc/mysql/mysql.conf.d/mysqld.cnf à l'aide des informations suivantes :

      LOCAL_IP=$(curl  http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/0/ip \
          -H "Metadata-Flavor: Google")
      sudo sed -i "s|bind-address.*|bind-address = $LOCAL_IP|" /etc/mysql/mysql.conf.d/mysqld.cnf
      
    3. Redémarrez le service MySQL pour appliquer les modifications au serveur en cours d'exécution.

      sudo service mysql restart
      
    4. Vérifiez que le serveur s'exécute localement. Remplacez [ROOT_PASSWORD] par le mot de passe racine du serveur MySQL défini précédemment.

      sudo mysql --user=root -p[ROOT_PASSWORD] -e "show databases"
      

      La sortie se présente comme suit :

      +--------------------+
      | Database           |
      +--------------------+
      | information_schema |
      | mysql              |
      | performance_schema |
      | sys                |
      +--------------------+
      

    Créer un utilisateur MySQL

    La connexion à distance en tant qu'utilisateur racine a été désactivée avec la commande mysql_secure_installation précédente. Vous devez créer un utilisateur avec les autorisations nécessaires pour autoriser les connexions à distance.

    1. Dans Cloud Shell, créez une variable d'environnement pour l'adresse IP interne de my-client.

      CLIENT_IP=$(gcloud compute instances describe my-client \
          --zone=[ZONE] \
          --format='value(networkInterfaces[0].networkIP)')
      
    2. Créez un utilisateur MySQL avec un mot de passe. Remplacez [MY_PASSWORD] par votre mot de passe et [ROOT_PASSWORD] par votre mot de passe utilisateur racine MySQL.

      sudo mysql -uroot -p[ROOT_PASSWORD] \
          -e "CREATE USER 'TESTUSER'@'${CLIENT_IP}' IDENTIFIED BY '[MY_PASSWORD]';"
      
    3. Accordez au nouvel utilisateur MySQL l'autorisation de se connecter au serveur à partir de l'adresse IP interne de my-client.

      sudo mysql -uroot -p[ROOT_PASSWORD] -e \
          "GRANT ALL PRIVILEGES ON *.* TO 'TESTUSER'@'${CLIENT_IP}' \
          IDENTIFIED BY '[MY_PASSWORD]';"
      

    Supprimer l'adresse IP externe de my-server

    L'instance my-server n'a pas besoin d'adresse IP externe car le client peut accéder à my-server par le biais d'une adresse IP interne.

    • Pour supprimer l'adresse IP externe, mettez à jour les paramètres de configuration dans Cloud Shell. Remplacez [ZONE] par votre zone GCP.

      gcloud compute instances delete-access-config my-server \
          --access-config-name "external-nat" \
          --zone="[ZONE]"
      

    Vérifier l'accès à distance du client à l'instance de serveur

    Les étapes ci-dessous concernent l'accès au serveur MySQL exécuté sur my-server depuis votre instance my-client et l'exécution des commandes MySQL.

    1. Dans Cloud Shell, utilisez SSH pour vous connecter à l'instance my-client.
    2. Testez votre connexion en répertoriant les bases de données.

      sudo mysql --host=my-server --user=TESTUSER \
          --password=[MY_PASSWORD] -e "SHOW DATABASES;"
      

      La sortie se présente comme suit :

      +--------------------+
      | Database           |
      +--------------------+
      | information_schema |
      | mysql              |
      | performance_schema |
      | sys                |
      +--------------------+
      

    Ces étapes permettent de vérifier que votre client MySQL peut se connecter au serveur MySQL via l'adresse IP interne.

    Considérations relatives au pare-feu dans les environnements de production

    La configuration réseau par défaut dans GCP inclut une règle de pare-feu, default-allow-internal, qui autorise le trafic interne entre les instances Compute Engine sur de nombreux ports, y compris le port MySQL et le port 3306. Dans les environnements autres que ceux par défaut dotés d'une empreinte numérique établie, vous devrez peut-être créer une règle de pare-feu pour permettre à votre instance my-client de communiquer avec votre instance my-server sur le réseau.

    Vous pouvez baser les règles de pare-feu sur des plages d'adresses IP ou des tags. Les plages d'adresses IP sont utiles si vous souhaitez accorder l'accès à un groupe d'adresses IP internes spécifique. Notez que si vous souhaitez autoriser l'accès à certaines instances spécifiques de votre réseau, les tags constituent une solution plus flexible. Les tags vous permettent d'ajouter facilement de nouveaux clients, car vous n'avez pas besoin d'octroyer l'accès à chaque adresse IP individuellement. Il vous suffit d'attribuer le tag approprié à la nouvelle instance de client MySQL. Par exemple, vous pouvez créer une règle de pare-feu qui autorise le trafic depuis toutes les instances de client portant le tag mysql-client.

    Afin de prendre en charge les règles de pare-feu à l'aide de tags, vous pouvez attribuer les tags appropriés aux VM my-client et my-server dans Cloud Shell.

    gcloud compute instances add-tags my-client --tags mysql-client --zone=[ZONE]
    
    gcloud compute instances add-tags my-server --tags mysql-server --zone=[ZONE]
    

    Ajouter une règle de pare-feu

    Les étapes ci-dessous expliquent comment créer une nouvelle règle de pare-feu pour permettre aux instances portant le tag my-client de communiquer avec les instances portant le tag my-server à l'aide du port 3306.

    • Dans Cloud Shell, créez une règle de pare-feu autorisant les communications de mysql-client vers mysql-server.

      gcloud compute firewall-rules create "mysql-remote-access" \
          --allow tcp:3306 --source-tags "mysql-client" \
          --target-tags "mysql-server"
      

    Vous pouvez maintenant vous connecter à MySQL depuis my-client.

    Effectuer un nettoyage

    Pour éviter que les ressources utilisées lors de ce tutoriel soient facturées sur votre compte GCPl, vous pouvez supprimer le projet ou supprimer les instances.

    Supprimer le projet

    Le moyen le plus simple d'empêcher la facturation est de supprimer le projet que vous avez créé pour ce tutoriel.

    Pour ce faire, procédez comme suit :

    1. Dans la console GCP, accédez à la page "Projets".

      Accéder à la page Projets

    2. Dans la liste des projets, sélectionnez celui que vous souhaitez supprimer, puis cliquez sur Supprimer.
    3. Dans la boîte de dialogue, saisissez l'ID du projet, puis cliquez sur Arrêter pour supprimer le projet.

    Supprimer des instances

    Pour supprimer une instance Compute Engine, procédez comme suit :

    1. Dans la console GCP, accédez à la page "Instances de VM".

      Accéder à la page Instances de VM

    2. Cochez la case à côté de l'instancemy-server.
    3. Cliquez sur le bouton Supprimer en haut de la page pour supprimer l'instance.

    Étapes suivantes

    Cette page vous a-t-elle été utile ? Évaluez-la :

    Envoyer des commentaires concernant…