Ce tutoriel vous explique comment exécuter une base de données MySQL sur un réseau privé dans Google Cloud pour permettre un accès à distance et sécurisé à la base de données à l'aide de Compute Engine.
Utilisez ce tutoriel si vous souhaitez installer votre propre base de données MySQL sur Compute Engine, tout en limitant l’accès aux seuls clients MySQL autorisés qui s'exécutent également sur Compute Engine. Vous voudrez peut-être gérer votre propre instance MySQL au lieu d'utiliser le service géré, par exemple 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 :

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
- 
          Name the instance
          my-client.
- 
          Définissez le flag --zonesur la zone dans laquelle vous souhaitez créer votre instance.
- Définissez le flag --image-projectsurubuntu-os-cloud.
- Définissez le flag --image-familysurubuntu-1804-lts.
- 
         
Définissez le flag --scopessurhttps://www.googleapis.com/auth/cloud-platform.
- 
  
    
      Create a Compute Engine instance. Configure the instance as follows:- 
          Name the instance
          my-server.
- 
          Définissez le flag --zonesur la zone dans laquelle vous souhaitez créer votre instance.
- Définissez le flag --image-projectsurubuntu-os-cloud.
- Définissez le flag --image-familysurubuntu-1804-lts.
- 
         
Définissez le flag --scopessurhttps://www.googleapis.com/auth/cloud-platform.
- Pour vous connecter à l'instance my-client, utilisez la commandessh.
- Mettez à jour le gestionnaire de packages apt-get.sudo apt-get update 
- Installez le package client MySQL.
  sudo apt-get -y install mysql-client-5.7 
- Pour vous connecter à l'instance my-server, utilisez la commandessh.
- Mettez à jour le gestionnaire de packages apt-get.sudo apt-get update 
- Installez le package serveur MySQL.
  sudo apt-get -y install mysql-server-5.7 
- Dans la session SSH de votre instance - my-server, exécutez la commande suivante pour améliorer la sécurité de votre installation MySQL.- sudo mysql_secure_installation
- Appuyez sur - enterpour ignorer la configuration du plug-in- VALIDATE PASSWORD.
- Saisissez un nouveau mot de passe racine deux fois. 
- Pour supprimer des utilisateurs anonymes, saisissez - Yet appuyez sur- enter.
- Pour empêcher la connexion racine à distance, saisissez - Yet appuyez sur- enter.
- Pour supprimer la base de données de test, saisissez - Yet appuyez sur- enter.
- Pour actualiser les tables de privilèges, saisissez - Yet appuyez sur- enter.
- Dans Cloud Shell, utilisez SSH pour vous connecter à l'instance - my-server.
- Mettez à jour le fichier de configuration - /etc/mysql/mysql.conf.d/mysqld.cnfavec les 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
- Redémarrez le service MySQL pour appliquer les modifications au serveur en cours d'exécution. - sudo service mysql restart
- 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 | +--------------------+ 
- Dans Cloud Shell, créez une variable d'environnement pour l'adresse IP interne - my-client.- CLIENT_IP=$(gcloud compute instances describe my-client \ --zone=ZONE \ --format='value(networkInterfaces[0].networkIP)')
- 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]';"
- 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]';"
- Pour supprimer l'adresse IP externe, mettez à jour les paramètres de configuration dans Cloud Shell. Remplacez - [ZONE]par votre Google Cloud zone.- gcloud compute instances delete-access-config my-server \ --access-config-name "external-nat" \ --zone="ZONE"
- Dans Cloud Shell, utilisez SSH pour vous connecter à l'instance my-client.
- 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 | +--------------------+ 
- Dans Cloud Shell, créez une règle de pare-feu pour autoriser les communications entre - mysql-clientet- mysql-server.- gcloud compute firewall-rules create "mysql-remote-access" \ --allow tcp:3306 --source-tags "mysql-client" \ --target-tags "mysql-server"
- Ajoutez une adresse IP externe à my-serverpour autoriser la connectivité externe.
- Ajoutez l'adresse IP source de votre client externe aux règles de pare-feu.
- Modifiez le compte TESTUSERou créez un compte d'utilisateur lié à l'adresse IP source de votre client externe.
 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 MySQLLa procédure décrite ci-dessous permet d'installer MySQL sur une instance Compute Engine. Installer un serveur MySQLLa procédure décrite ci-dessous permet d'installer MySQL sur une instance Compute Engine. Améliorer la sécurité de l'installation de MySQLVous 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 sur mysql_secure_installation.Configurer le serveur MySQLAvant 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 options suivantes : --userpour le nom d'utilisateur,-ppour le mot de passe et-epour exécuter l'instruction donnée et quitter immédiatement. Pour en savoir plus, consultez la documentation de référence sur les options de commande MySQL 5.7.Créer un utilisateur MySQLLa connexion à distance en tant qu'utilisateur racine a été désactivée à l'aide de la commande mysql_secure_installationprécédente. Vous devez créer un utilisateur avec les autorisations nécessaires pour autoriser les connexions à distance.Supprimer l'adresse IP externe demy-serverL'instance my-servern'a pas besoin d'une adresse IP externe, car le client peut accéder àmy-servervia une adresse IP interne.Vérifier l'accès à distance du client à l'instance de serveurLes étapes suivantes décrivent comment se connecter au serveur MySQL sur my-serverdepuis votre instancemy-client.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 productionLa configuration réseau par défaut dans Google Cloud 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 (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 instancemy-clientde communiquer avec votre instancemy-serversur le réseau. Sinon, les deux instances ne peuvent pas communiquer entre elles.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 utilisant des tags, vous pouvez attribuer les tags appropriés aux VM my-clientetmy-serverdans 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=ZONEAjouter une règle de pare-feuLes étapes ci-dessous expliquent comment créer une règle de pare-feu pour permettre aux instances portant le tag my-clientde communiquer avec les instances portant le tagmy-serverà l'aide du port3306.Vous pouvez maintenant vous connecter à MySQL à partir de my-client.Considérations relatives à l'accès des clients externesCe tutoriel traite de l’accès des clients MySQL aux serveurs MySQL fonctionnant tous deux sur Compute Engine. Il n'a pas pour objectif d'autoriser l'accès d'un client ne s'exécutant pas sur Compute Engine. Si vous devez autoriser un accès non-Compute Engine, modifiez les éléments suivants : 
- 
          Name the instance
          
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