Se connecter à Cloud SQL: Compute Engine, adresse IP privée et proxy Cloud SQL

1. Introduction

Dernière mise à jour:06/05/2021

Réfléchir à la connexion

Il existe de nombreux types d'applications et de frameworks. Dans cet atelier de programmation, nous aborderons la connexion à Cloud SQL à partir d'une application exécutée sur une machine virtuelle gérée dans Google Compute Engine via une adresse IP privée interne à l'aide du proxy Cloud SQL. C'est une manière incroyablement sécurisée d'exécuter une application avec état dans le cloud. Vous limitez votre exposition à Internet en vous limitant à une adresse IP privée et en utilisant le proxy SQL qui gère la connectivité SSL à votre place.

Un cas d'utilisation courant serait, par exemple, une application sur site qui a été migrée pour s'exécuter dans le cloud plutôt que localement.

Objectifs de l'atelier

Cet atelier de programmation est très minimaliste. L'idée est de vous présenter les rouages du composant de connexion, sans trop penser à l'application elle-même. Dans un monde parfait, la connexion à Cloud SQL est semblable à la connexion à n'importe quelle autre instance d'une base de données SQL. Vous devriez donc pouvoir utiliser ce que vous avez créé dans cet atelier de programmation et l'appliquer à n'importe quelle application de production.

Les instructions comprendront une présentation de ce que vous pouvez faire dans la console GCP, ainsi que les commandes gcloud équivalentes à utiliser dans la CLI ou l'automatisation.

Les étapes individuelles sont les suivantes:

  • Créer un compte de service minimal pour permettre la connexion à l'instance Cloud SQL
  • Créer une VM sur Google Compute Engine (GCE)
  • Créez une instance Cloud SQL (ce tutoriel utilise Postgres, mais fonctionne de la même manière pour MySQL et SQL Server).
  • Télécharger et exécuter le proxy Cloud SQL sur l'instance GCE

Prérequis

  • Un compte GCP pour lequel vous disposez des autorisations nécessaires pour activer des API et créer des services

2. Créer un compte de service

Les comptes de service permettent d'accorder des autorisations afin d'utiliser différents services dans votre projet GCP. Pour cet atelier de programmation, nous en avons besoin pour accorder au proxy Cloud SQL l'autorisation de se connecter à notre instance Cloud SQL.

Dans la console

Accédez à la page Comptes de service IAM puis cliquez sur le bouton f8393a08b37a422c.png en haut de la page.

Attribuez un nom et un ID uniques à votre compte de service, puis cliquez sur CRÉER.

Sur la page suivante, cliquez sur le menu déroulant "Sélectionner un rôle". Filtrez sur "Cloud SQL" et sélectionnez le rôle "Client Cloud SQL". Cliquez sur CONTINUER.

Cliquez sur "DONE" (Terminé).

Utiliser gcloud

Créez le compte de service :

gcloud iam service-accounts create <SERVICE_ACCOUNT_NAME> --display-name "<SERVICE_ACCOUNT_NAME> service account"

Le compte de service est alors créé, mais aucun rôle ni aucune autorisation ne lui est actuellement attribué. Pour attribuer le rôle approprié, exécutez la commande suivante:

gcloud projects add-iam-policy-binding <GCP PROJECT ID> --member serviceAccount:<SERVICE_ACCOUNT_NAME>@<GCP PROJECT ID>.iam.gserviceaccount.com --role roles/cloudsql.client

Exemple : Si votre compte de service est nommé sa-test lors de sa création et que votre projet est my-project-test, la commande est la suivante:

gcloud projects add-iam-policy-binding my-project-test --member serviceAccount:sa-test@my-project-test.iam.gserviceaccount.com --role roles/cloudsql.client
gcloud iam service-accounts keys create service-account.json --iam-account <SERVICE_ACCOUNT_NAME>@<GCP PROJECT ID>.iam.gserviceaccount.com

3. Créer la VM Compute Engine

Google Compute Engine est le service géré sur lequel s'exécutera la machine virtuelle. Il contiendra l'application à partir de laquelle nous voulons nous connecter. Dans cet atelier de programmation, nous ne créons pas d'application, mais nous allons vérifier la connectivité en exécutant psql.

Dans la console

Accédez à la page Google Compute Engine, puis cliquez sur le bouton 77c46cd1f51bed5c.png.

Il y a de nombreuses options ici, les seules choses que vous devez faire sont:

  1. Attribuez un nom à votre instance
  2. Remplacez Machine type par f1-micro
  3. Sous "Identité et accès à l'API", remplacez Default compute service account dans le menu déroulant Service account par celui que vous avez créé à l'étape précédente.
  4. Cliquez sur "Créer" en bas de la page.

Utiliser gcloud

Le compte de service correspond au nom complet du compte de service que vous avez créé précédemment. Il est donc au format suivant: <NAME>@<PROJECT>.iam.gserviceaccount.com.

gcloud compute instances create <INSTANCE NAME> --machine-type=f1-micro --zone=us-central1-b --service-account=<SERVICE ACCOUNT FULL NAME>
gcloud compute zones list

4. Créer l'instance Cloud SQL

Cloud SQL est notre offre de bases de données relationnelles gérées. Il est compatible avec MySQL, PostgreSQL et SQL Server. Pour cet atelier de programmation, nous allons créer une base de données Postgres, mais les instructions sont similaires pour les trois.

Dans la console

Accédez à la page Cloud SQL, puis cliquez sur le bouton 241836b315e11bf5.png.

Comme je l'ai indiqué, la majeure partie de cet atelier de programmation est générique pour tous les types de code SQL, mais pour cet atelier, choisissez PostgreSQL.

  1. Attribuer un ID à votre instance
  2. Saisissez un mot de passe pour l'utilisateur par défaut (le nom d'utilisateur sera défini par défaut pour la base de données sélectionnée, par exemple root pour MySQL ou postgres pour PostgreSQL)
  3. Si vous avez modifié la région de votre instance de calcul, vous devez également modifier la région ici en conséquence.
  4. Faites défiler la page vers le bas, puis cliquez sur show configuration options.
  5. Développer la section Connectivity
  6. Décochez l'option Public IP et cochez la case Private IP
  7. Assurez-vous que default est sélectionné dans le menu déroulant qui s'affiche lorsque l'option "Adresse IP privée" a été cochée
  8. Faites défiler vers le bas et cliquez sur Créer

Le démarrage de l'instance prend généralement quelques minutes.

Utiliser gcloud

Comme nous n'avons pas d'invites utiles pour activer les API à partir de cette page, nous devons le faire manuellement

gcloud services enable servicenetworking.googleapis.com

Nous devons maintenant activer la connectivité des services privés sur notre réseau VPC par défaut. Pour cela, la première étape consiste à allouer une plage nommée d'adresses IP à utiliser pour notre instance.

gcloud compute addresses create sql-codelab-allocation --global --purpose=VPC_PEERING --prefix-length=24 --network=default

L'étape suivante consiste à attribuer cette plage d'adresses IP à nos services internes (cela prend environ une minute).

gcloud services vpc-peerings update --service=servicenetworking.googleapis.com  --network=default     --project=<PROJECT ID> --ranges=sql-codelab-allocation --force

Enfin, la création de l'instance proprement dite n'est actuellement possible qu'avec la version bêta. La combinaison de --no-assign-ip et --network=default permet d'activer la connectivité IP privée. Pour le moment, il n'existe aucun moyen d'activer simultanément une adresse IP privée et une adresse IP publique. Par conséquent, si vous avez besoin d'un accès public, vous devez modifier l'instance après sa création. Cette opération prend quelques minutes.

gcloud beta sql instances create test-sql-codelab-00 --no-assign-ip --database-version=POSTGRES_11 --tier=db-f1-micro --region=us-central1 --network=default --root-password=<PASSWORD>

5. Configurer et exécuter le proxy Cloud SQL

Une fois connectés à la VM, nous avons besoin d'une chaîne de connexion à l'instance. Nous allons commencer par la récupérer, puis nous nous connecterons à la VM via SSH. Vous trouverez les instructions relatives à ces éléments dans leurs sections respectives pour la console et pour gcloud. Les autres commandes seront exécutées depuis le shell de la VM dans sa propre section.

Dans la console

Cliquez ici et cliquez sur le nom de votre instance Cloud SQL.

Faites un peu défiler la page vers le bas et copiez le Connection name quelque part pour l'utiliser plus tard.

Accédez à la page de la liste des instances de Google Compute Engine, puis recherchez la ligne contenant votre VM.

Dans la colonne Connect, cliquez sur le bouton SSH pour ouvrir une fenêtre distincte qui se connecte de façon sécurisée à la machine virtuelle.

Ignorez la section Using gcloud pour accéder aux autres instructions, car elle est identique dans les deux cas.

Utiliser gcloud

Remplacez <INSTANCE NAME> par le nom de votre instance Cloud SQL:

gcloud sql instances describe <INSTANCE NAME> | grep connectionName

Enregistrez le nom de connexion de l'instance pour pouvoir l'utiliser ultérieurement.

Vous devez remplacer <ZONE> par la zone qui a été utilisée lors de la création de l'instance. Si vous ne l'avez pas modifié, il a été défini sur us-central1-b. Remplacez aussi <INSTANCE_NAME> avec ce que vous avez spécifié précédemment.

gcloud compute ssh --zone <ZONE> <INSTANCE_NAME>

Une fois connecté à la VM

Tout d'abord, nous devons télécharger le proxy. Cela dépend de votre système d'exploitation. Si vous n'avez pas modifié l'OS lors de la création de la VM, il s'agira de Linux et vous pourrez utiliser:

wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 -O cloud_sql_proxy && chmod +x cloud_sql_proxy

Si vous avez changé de système d'exploitation, cliquez ici pour obtenir la commande appropriée afin d'obtenir le proxy pour votre système d'exploitation.

Pour exécuter le proxy, remplacez <INSTANCE_CONNECTION_NAME> par le nom de connexion de l'instance que vous avez copié à partir des détails de l'instance Cloud SQL. Notez également que le numéro de port tcp peut changer si vous n'utilisez pas une base de données Postgres ou si vous avez modifié le port par défaut sur lequel la base de données écoute.

./cloud_sql_proxy -instances=<INSTANCE_CONNECTION_NAME>=tcp:5432 &

6. Tester la connexion et conclure

Comme indiqué précédemment, si vous souhaitez tester une application dans l'instance GCE, ce n'est pas un problème. Pour cet atelier de programmation, nous allons installer psql et utiliser ce client pour vérifier que nous pouvons nous connecter à notre base de données.

Depuis la session SSH sur la VM:

sudo apt-get install postgresql-client
psql "host=127.0.0.1 port=5432 sslmode=disable user=postgres"

Indiquez ensuite le mot de passe utilisateur par défaut que vous avez défini lors de la création de l'instance Cloud SQL.

Félicitations ! Si tout s'est déroulé comme prévu, l'invite Postgres doit être affichée et vous pouvez exécuter des commandes sur votre base de données.

Et ensuite ?

Découvrez quelques-uns des ateliers de programmation...

Documents de référence