Configurer des certificats SSL/TLS

Cette page explique comment appliquer le chiffrement SSL/TLS pour une instance afin de vous assurer que toutes les connexions sont chiffrées. Vous pouvez également en savoir plus sur la façon dont Cloud SQL utilise des certificats SSL/TLS autogérés pour se connecter en toute sécurité aux instances Cloud SQL.

Présentation

Cloud SQL crée automatiquement un certificat de serveur (server-ca.pem) lors de la création d'une instance. Nous vous recommandons d'appliquer toutes les connexions afin qu'elles utilisent le chiffrement SSL/TLS.

SQL Server effectue uniquement la vérification du certificat lorsque la requête du client spécifie explicitement qu'elle nécessite une connexion chiffrée. Dans ce cas, le certificat de serveur doit être installé sur la machine cliente. Sinon, les clients peuvent se connecter librement sans modification de leurs chaînes de connexion ou certificats, même si sslMode est défini sur ENCRYPTED_ONLY sur l'instance.

Pour en savoir plus, consultez la section Activer les connexions chiffrées à la base de données Database Engine dans la documentation SQL Server.

Si vous appliquez SSL à une instance, celle-ci nécessite un redémarrage. Un redémarrage peut également être nécessaire après la modification des certificats SSL/TLS. Lorsqu'un redémarrage est nécessaire, Cloud SQL redémarre automatiquement l'instance. Le redémarrage d'une instance peut entraîner des temps d'arrêt.

Appliquer le chiffrement SSL/TLS

Vous pouvez utiliser le paramètre Mode SSL pour appliquer le chiffrement SSL des manières suivantes :

  • Autoriser à la fois les connexions non-SSL/non-TLS et SSL/TLS. Il s'agit de l'option par défaut.

  • Autoriser uniquement les connexions chiffrées avec SSL/TLS.

Si vous sélectionnez Autoriser les connexions non-SSL/non-TLS et SSL/TLS pour votre instance Cloud SQL, les connexions SSL/TLS, ainsi que les connexions non chiffrées et non sécurisées, sont acceptées. Si vous n'exigez pas SSL/TLS pour toutes les connexions, les connexions non chiffrées sont toujours autorisées. Par conséquent, si vous accédez à votre instance à l'aide d'une adresse IP publique, nous vous recommandons vivement d'appliquer le protocole SSL à toutes les connexions.

Vous pouvez vous connecter directement aux instances à l'aide de certificats SSL/TLS, ou vous pouvez vous connecter à l'aide du proxy d'authentification Cloud SQL ou des connecteurs Cloud SQL. Si vous vous connectez à l'aide du proxy d'authentification Cloud SQL ou de connecteurs Cloud SQL, les connexions sont automatiquement chiffrées avec SSL/TLS. Avec le proxy d'authentification Cloud SQL et les connecteurs Cloud SQL, les identités client et serveur sont également validées automatiquement, quel que soit le paramètre de mode SSL.

L'application du protocole SSL garantit que toutes les connexions sont chiffrées.

Pour activer l'exigence SSL/TLS, procédez comme suit :

Console

  1. Dans Google Cloud Console, accédez à la page Instances Cloud SQL.

    Accéder à la page Instances Cloud SQL

  2. Pour ouvrir la page Présentation d'une instance, cliquez sur son nom.
  3. Dans le menu de navigation SQL, sélectionnez Connexions.
  4. Cliquez sur l'onglet Sécurité.
  5. Sélectionnez l'une des options suivantes :
    • Autoriser le trafic réseau non chiffré (non recommandé)
    • Autoriser uniquement les connexions SSL. Cette option n'autorise que les connexions utilisant le chiffrement SSL/TLS.

gcloud

   gcloud sql instances patch INSTANCE_NAME \
   --ssl-mode=SSL_ENFORCEMENT_MODE
  

Remplacez SSL_ENFORCEMENT_MODE par l'un des éléments suivants :

  • ALLOW_UNENCRYPTED_AND_ENCRYPTED autorise les connexions non-SSL/non-TLS et SSL/TLS. Il s'agit de la valeur par défaut.
  • ENCRYPTED_ONLY autorise uniquement les connexions chiffrées avec SSL/TLS.

Terraform

Pour appliquer le chiffrement SSL/TLS, utilisez une ressource Terraform :

resource "google_sql_database_instance" "sqlserver_instance" {
  name             = "sqlserver-instance"
  region           = "asia-northeast1"
  database_version = "SQLSERVER_2019_STANDARD"
  root_password    = "INSERT-PASSWORD-HERE"
  settings {
    tier = "db-custom-2-7680"
    ip_configuration {
      ssl_mode = "ENCRYPTED_ONLY"
    }
  }
  # set `deletion_protection` to true, will ensure that one cannot accidentally delete this instance by
  # use of Terraform whereas `deletion_protection_enabled` flag protects this instance at the GCP level.
  deletion_protection = false
}

Appliquer les modifications

Pour appliquer votre configuration Terraform dans un projet Google Cloud, suivez les procédures des sections suivantes.

Préparer Cloud Shell

  1. Lancez Cloud Shell.
  2. Définissez le projet Google Cloud par défaut dans lequel vous souhaitez appliquer vos configurations Terraform.

    Vous n'avez besoin d'exécuter cette commande qu'une seule fois par projet et vous pouvez l'exécuter dans n'importe quel répertoire.

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    Les variables d'environnement sont remplacées si vous définissez des valeurs explicites dans le fichier de configuration Terraform.

Préparer le répertoire

Chaque fichier de configuration Terraform doit avoir son propre répertoire (également appelé module racine).

  1. Dans Cloud Shell, créez un répertoire et un nouveau fichier dans ce répertoire. Le nom du fichier doit comporter l'extension .tf, par exemple main.tf. Dans ce tutoriel, le fichier est appelé main.tf.
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. Si vous suivez un tutoriel, vous pouvez copier l'exemple de code dans chaque section ou étape.

    Copiez l'exemple de code dans le fichier main.tf que vous venez de créer.

    Vous pouvez également copier le code depuis GitHub. Cela est recommandé lorsque l'extrait Terraform fait partie d'une solution de bout en bout.

  3. Examinez et modifiez les exemples de paramètres à appliquer à votre environnement.
  4. Enregistrez les modifications.
  5. Initialisez Terraform. Cette opération n'est à effectuer qu'une seule fois par répertoire.
    terraform init

    Vous pouvez également utiliser la dernière version du fournisseur Google en incluant l'option -upgrade :

    terraform init -upgrade

Appliquer les modifications

  1. Examinez la configuration et vérifiez que les ressources que Terraform va créer ou mettre à jour correspondent à vos attentes :
    terraform plan

    Corrigez les modifications de la configuration si nécessaire.

  2. Appliquez la configuration Terraform en exécutant la commande suivante et en saisissant yes lorsque vous y êtes invité :
    terraform apply

    Attendez que Terraform affiche le message "Apply completed!" (Application terminée).

  3. Ouvrez votre projet Google Cloud pour afficher les résultats. Dans la console Google Cloud, accédez à vos ressources dans l'interface utilisateur pour vous assurer que Terraform les a créées ou mises à jour.

Supprimer les modifications

Pour supprimer vos modifications, procédez comme suit :

  1. Pour désactiver la protection contre la suppression, définissez l'argument deletion_protection sur false dans le fichier de configuration Terraform.
    deletion_protection =  "false"
  2. Appliquez la configuration Terraform mise à jour en exécutant la commande suivante et en saisissant yes lorsque vous y êtes invité :
    terraform apply
  1. Supprimez les ressources précédemment appliquées à votre configuration Terraform en exécutant la commande suivante et en saisissant yes à la requête :

    terraform destroy

REST v1

  1. Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :

    • PROJECT_ID : ID du projet.
    • SSL_ENFORCEMENT_MODE : utilisez l'une des options suivantes :
      • ALLOW_UNENCRYPTED_AND_ENCRYPTED : autorise les connexions non-SSL/non-TLS et SSL/TLS.
      • ENCRYPTED_ONLY : autorise uniquement les connexions chiffrées avec SSL/TLS.
    • INSTANCE_ID : ID de l'instance.

    Méthode HTTP et URL :

    PATCH https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID

    Corps JSON de la requête :

    
    {
      "settings": {
        "ipConfiguration": {"sslMode": "SSL_ENFORCEMENT_MODE"}
      }
    }
    

    Pour envoyer votre requête, développez l'une des options suivantes :

    Vous devriez recevoir une réponse JSON de ce type :

REST v1beta4

  1. Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :

    • PROJECT_ID : ID du projet.
    • SSL_ENFORCEMENT_MODE : utilisez l'une des options suivantes :
      • ALLOW_UNENCRYPTED_AND_ENCRYPTED : autorise les connexions non-SSL/non-TLS et SSL/TLS.
      • ENCRYPTED_ONLY : autorise uniquement les connexions chiffrées avec SSL/TLS.
    • INSTANCE_ID : ID de l'instance.

    Méthode HTTP et URL :

    PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID

    Corps JSON de la requête :

    {
      "settings": {
        "ipConfiguration": {"sslMode": "SSL_ENFORCEMENT_MODE"}
      }
    }
    

    Pour envoyer votre requête, développez l'une des options suivantes :

    Vous devriez recevoir une réponse JSON de ce type :

Certificats du serveur

Cloud SQL crée automatiquement un certificat de serveur lors de la création d'une instance. Tant que celui-ci est valide, vous n'avez pas besoin de gérer activement le certificat du serveur. Toutefois, le certificat possède une date d'expiration de 10 ans. Après ce délai, il n'est plus valide et les clients ne sont plus en mesure d'établir une connexion sécurisée à votre instance à l'aide de ce certificat. Vous êtes régulièrement informé que le certificat du serveur approche de la date d'expiration. Les notifications sont envoyées les nombres de jours suivants avant la date d'expiration : 90, 30, 10, 2 et 1.

Vous pouvez obtenir des informations sur votre certificat de serveur, telles que sa date de création et d'expiration, ou vous pouvez en créer un manuellement.

Console

  1. Dans Google Cloud Console, accédez à la page Instances Cloud SQL.

    Accéder à la page Instances Cloud SQL

  2. Pour ouvrir la page Présentation d'une instance, cliquez sur son nom.
  3. Dans le menu de navigation SQL, sélectionnez Connexions.
  4. Cliquez sur l'onglet Sécurité.
  5. Accédez à la section Gérer les certificats de serveur.

    Vous pouvez consulter la date d'expiration de votre certificat de serveur dans le tableau.

gcloud

  1. Obtenez des informations sur le certificat de service :
    gcloud beta sql ssl server-ca-certs list \
    --instance=INSTANCE_NAME
  2. Créez un certificat de serveur :
    gcloud beta sql ssl server-ca-certs create \
    --instance=INSTANCE_NAME
  3. Téléchargez les informations de certificat sous la forme d'un fichier PEM local :
    gcloud beta sql ssl server-ca-certs list \
    --format="value(cert)" \
    --instance=INSTANCE_NAME > \
    FILE_PATH/FILE_NAME.pem
  4. Mettez à jour l'ensemble de vos clients pour qu'ils utilisent les nouvelles informations. Pour cela, copiez le fichier téléchargé vers vos machines hôtes clientes afin de remplacer les fichiers server-ca.pem existants.

Terraform

Pour fournir des informations de certificat de serveur en tant que sortie, utilisez une source de données Terraform :

  1. Ajoutez le code suivant à votre fichier de configuration Terraform :
       data "google_sql_ca_certs" "ca_certs" {
         instance = google_sql_database_instance.default.name
       }
    
       locals {
         furthest_expiration_time = reverse(sort([for k, v in data.google_sql_ca_certs.ca_certs.certs : v.expiration_time]))[0]
         latest_ca_cert           = [for v in data.google_sql_ca_certs.ca_certs.certs : v.cert if v.expiration_time == local.furthest_expiration_time]
       }
    
       output "db_latest_ca_cert" {
         description = "Latest CA certificate used by the primary database server"
         value       = local.latest_ca_cert
         sensitive   = true
       }
       
  2. Pour créer le fichier server-ca.pem, exécutez la commande suivante :
       terraform output db_latest_ca_cert > server-ca.pem
       

Utiliser des connexions chiffrées

En savoir plus sur la façon dont SQL Server utilise des connexions chiffrées.

Étape suivante