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 :
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
Dans ce document, vous utilisez les composants facturables suivants de Google Cloud :
- Compute Engine
- Cloud Storage
Obtenez une estimation des coûts en fonction de votre utilisation prévue à l'aide du simulateur de coût.
Avant de commencer
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
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 Compute Engine API.
-
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 Compute Engine API.
Une fois que vous avez terminé ce tutoriel, évitez de continuer à payer des frais en supprimant les ressources que vous avez créées. Pour en savoir plus, consultez la section 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
-
Name the instance
my-client
. -
Définissez l'indicateur
--zone
sur la zone dans laquelle vous souhaitez créer votre instance. - Définissez l'option
--image-project
surubuntu-os-cloud
. - Définissez l'option
--image-family
surubuntu-1804-lts
. -
Définissez l'option
--scopes
surhttps://www.googleapis.com/auth/cloud-platform
. -
Create a Compute Engine instance. Configure the instance as follows:
-
Name the instance
my-server
. -
Définissez l'indicateur
--zone
sur la zone dans laquelle vous souhaitez créer votre instance. - Définissez l'option
--image-project
surubuntu-os-cloud
. - Définissez l'option
--image-family
surubuntu-1804-lts
. -
Définissez l'option
--scopes
surhttps://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
enter
pour ignorer la configuration du plug-inVALIDATE PASSWORD
.Saisissez un nouveau mot de passe racine deux fois.
Pour supprimer des utilisateurs anonymes, saisissez
Y
et appuyez surenter
.Pour empêcher la connexion racine à distance, saisissez
Y
et appuyez surenter
.Pour supprimer la base de données de test, saisissez
Y
et appuyez surenter
.Pour actualiser les tables de privilèges, saisissez
Y
et appuyez surenter
.Dans Cloud Shell, utilisez SSH pour vous connecter à l'instance
my-server
.Mettez à jour le fichier de configuration
/etc/mysql/mysql.conf.d/mysqld.cnf
avec 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 zone Google Cloud.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-client
etmysql-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-server
pour autoriser la connectivité externe. - Ajoutez l'adresse IP source de votre client externe aux règles de pare-feu.
- Modifiez le compte
TESTUSER
ou 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 MySQL
La procédure décrite ci-dessous permet d'installer MySQL sur une instance Compute Engine.
Installer un serveur MySQL
La procédure décrite ci-dessous permet d'installer MySQL sur une instance Compute Engine.
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 sur
mysql_secure_installation
.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 options suivantes :
--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, consultez la documentation de référence sur les options de commande MySQL 5.7.Créer un utilisateur MySQL
La connexion à distance en tant qu'utilisateur racine a été désactivée à l'aide de la commande
mysql_secure_installation
précédente. Vous devez créer un utilisateur avec les autorisations nécessaires pour autoriser les connexions à distance.Supprimer l'adresse IP externe de
my-server
L'instance
my-server
n'a pas besoin d'une adresse IP externe, car le client peut accéder àmy-server
via une adresse IP interne.Vérifier l'accès à distance du client à l'instance de serveur
Les étapes suivantes décrivent comment se connecter au serveur MySQL sur
my-server
depuis 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 production
La 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-client
de communiquer avec votre instancemy-server
sur 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-client
etmy-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 règle de pare-feu pour permettre aux instances portant le tag
my-client
de 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 externes
Ce 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
Créer une instance de serveur Compute Engine
Effectuer un nettoyage
Pour éviter que les ressources utilisées lors de ce tutoriel soient facturées sur votre compte Google Cloud, 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 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 des instances
Pour supprimer une instance Compute Engine, procédez comme suit :
- In the Google Cloud console, go to the VM instances page.
-
Select the checkbox for
your
my-server
instance. - To delete the instance, click More actions, click Delete, and then follow the instructions.
Étape suivante
- Documentez-vous sur les solutions de haute disponibilité pour MySQL.
- Documentez-vous sur la configuration de MySQL sur Compute Engine.
- Configurez Cloud Logging pour les journaux MySQL.
Explorez Cloud SQL.
Découvrez des architectures de référence, des schémas et des bonnes pratiques concernant Google Cloud. Consultez notre Cloud Architecture Center.