Utiliser des clés de chiffrement gérées par le client (CMEK)

Cette page explique comment configurer un compte de service et des clés pour les clés de chiffrement gérées par le client (CMEK, Customer-Managed Encryption Key), et comment créer une instance utilisant ce type de clés. Pour en savoir plus sur l'utilisation de clés de chiffrement gérées par le client avec Cloud SQL, consultez la page Présentation des clés de chiffrement gérées par le client.

Avant de commencer

  1. 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.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Install the Google Cloud CLI.
  5. To initialize the gcloud CLI, run the following command:

    gcloud init
  6. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  7. Make sure that billing is enabled for your Google Cloud project.

  8. Install the Google Cloud CLI.
  9. To initialize the gcloud CLI, run the following command:

    gcloud init
  10. Assurez-vous que vous disposez du rôle d'administrateur Cloud SQL sur votre compte utilisateur.

    Accéder à la page IAM

  11. Enable the Cloud Key Management Service API.

    Enable the API

  12. Enable the Cloud SQL Admin API.

    Enable the API

Procédure permettant de créer une instance Cloud SQL avec CMEK

  1. Seulement pour les utilisateurs de gcloud et de l'API : créez un compte de service pour chaque projet nécessitant des clés de chiffrement gérées par le client.
  2. Créez un trousseau et une clé, puis définissez l'emplacement de chaque clé. L'emplacement correspond à la région Google Cloud.
  3. Seulement pour les utilisateurs de gcloud et de l'API : accordez à la clé l'accès au compte de service.
  4. Notez l'ID de la clé (KMS_KEY_ID), l'emplacement de la clé (GCP_REGION) et l'ID du trousseau (KMS_KEYRING_ID).
  5. Accédez à un projet, puis créez une instance Cloud SQL avec les options suivantes :
    1. Le même emplacement que la clé de chiffrement gérée par le client
    2. La configuration de la clé gérée par le client
    3. L'ID de la clé de chiffrement gérée par le client

Votre instance Cloud SQL est désormais activée avec CMEK.

Créer un compte de service

Vous devez créer un compte de service pour chaque projet nécessitant des clés de chiffrement gérées par le client.

Pour autoriser un utilisateur à gérer des comptes de service, attribuez-lui l'un des rôles suivants :

  • Utilisateur de compte de service (roles/iam.serviceAccountUser) : accorde les autorisations nécessaires pour obtenir ou répertorier un compte de service et emprunter son identité.
  • Administrateur de compte de service (roles/iam.serviceAccountAdmin) : comprend les autorisations permettant de répertorier les comptes de service et d'obtenir des informations sur un compte de service. Ce rôle inclut également les autorisations nécessaires pour créer, mettre à jour et supprimer des comptes de service, ainsi que pour afficher ou modifier les règles Cloud SQL pour MySQL sur un compte de service.

Actuellement, vous ne pouvez utiliser que les commandes gcloud CLI pour créer le type de compte de service dont vous avez besoin pour les clés de chiffrement gérées par le client. Si vous utilisez la console, Cloud SQL crée ce compte de service automatiquement.

gcloud

gcloud beta services identity create \
--service=sqladmin.googleapis.com \
--project=PROJECT_ID

Terraform

Pour créer un compte de service, utilisez une ressource Terraform.

resource "google_project_service_identity" "gcp_sa_cloud_sql" {
  provider = google-beta
  service  = "sqladmin.googleapis.com"
}

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.

La commande précédente renvoie un nom de compte de service. Ce nom de compte de service vous sera utile lors de la procédure décrite dans la section Accorder à la clé l'accès au compte de service.

Créer une clé

Vous pouvez créer la clé dans le même projet Google Cloud que l'instance Cloud SQL ou dans un projet utilisateur distinct. L'emplacement du trousseau de clés Cloud KMS doit correspondre à la région dans laquelle vous souhaitez créer une instance Cloud SQL. Une clé d'une région mondiale ou d'un emplacement multirégional ne fonctionnera pas. La requête de création d'instance Cloud SQL échoue si les régions ne correspondent pas.

Pour créer une clé Cloud KMS, procédez comme suit :

Console

  1. Dans la console Google Cloud, accédez à la page Gestion des clés.

    Accéder à la page "Gestion des clés"

  2. Cliquez sur Créer un trousseau de clés.
  3. Ajoutez un nom de trousseau de clés. Notez ce nom, car vous en aurez besoin lorsque vous accorderez à la clé l'accès au compte de service.
  4. Ajoutez un emplacement de trousseau de clés.
  5. Cliquez sur Create (Créer). La page Créer une clé s'ouvre.
  6. Ajoutez un nom de clé.
  7. Sélectionnez un objectif (symétrique ou asymétrique).
  8. Sélectionnez une période de rotation et une date de début.
  9. Cliquez sur Create (Créer).
  10. Dans la table Clés, cliquez sur les trois points situés dans la dernière colonne, puis sélectionnez Copier l'ID de ressource ou notez-le. Il s'agit de KMS_KEY_ID. Vous aurez besoin de l'identifiant KMS_KEY_ID pour accorder à la clé l'accès au compte de service.

gcloud

  1. Créez un trousseau de clés.
    gcloud kms keyrings create KMS_KEYRING_ID \
    --location=GCP_REGION
      
    Notez ce nom, car vous en aurez besoin pour accorder à la clé l'accès au compte de service.
  2. Créez une clé sur le trousseau.
    gcloud kms keys create KMS_KEY_ID \
    --location=GCP_REGION \
    --keyring=KMS_KEYRING_ID \
    --purpose=encryption
      
    Notez ce nom, car vous en aurez besoin pour accorder à la clé l'accès au compte de service.

Terraform

Pour créer un trousseau, utilisez une ressource Terraform.

resource "google_kms_key_ring" "keyring" {
  provider = google-beta
  name     = "keyring-name"
  location = "us-central1"
}

Pour créer une clé, utilisez une ressource Terraform.

resource "google_kms_crypto_key" "key" {
  provider = google-beta
  name     = "crypto-key-name"
  key_ring = google_kms_key_ring.keyring.id
  purpose  = "ENCRYPT_DECRYPT"
}

Appliquez la configuration Terraform :

terraform apply

Accorder au compte de service l'accès à la clé

Lorsque vous créez l'instance Cloud SQL à l'aide d'une CMEK, vous ne devez effectuer cette procédure que si vous utilisez gcloud ou l'API. Vous pouvez effectuer cette procédure si vous rencontrez des problèmes d'autorisation après la création de l'instance.

Pour accorder l'accès au compte de service, procédez comme suit :

Console

  1. Dans la console Google Cloud, accédez à la page Gestion des clés.

    Accéder à la page "Gestion des clés"

  2. Pour sélectionner le projet hébergeant la clé, utilisez le sélecteur de projet.
  3. Cliquez sur le nom du trousseau de clés.
  4. Cliquez sur le nom de la clé.
  5. Cliquez sur l'onglet Autorisations.
  6. Pour ouvrir le panneau, cliquez sur Accorder l'accès.
  7. Définissez le compte de service comme compte principal, puis sélectionnez le rôle "Chiffreur/Déchiffreur de CryptoKeys Cloud KMS".
  8. Cliquez sur Enregistrer.

Vous pouvez également l'accorder sur la page IAM du projet.

ACCÉDER À LA PAGE IAM DU PROJET

gcloud

gcloud kms keys add-iam-policy-binding KMS_KEY_ID \
--location=GCP_REGION \
--keyring=KMS_KEYRING_ID \
--member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-cloud-sql.iam.gserviceaccount.com \
--role=roles/cloudkms.cryptoKeyEncrypterDecrypter

Terraform

Pour accorder l'accès à la clé, utilisez une ressource Terraform.

resource "google_kms_crypto_key_iam_binding" "crypto_key" {
  provider      = google-beta
  crypto_key_id = google_kms_crypto_key.key.id
  role          = "roles/cloudkms.cryptoKeyEncrypterDecrypter"

  members = [
    "serviceAccount:${google_project_service_identity.gcp_sa_cloud_sql.email}",
  ]
}

Appliquez la configuration Terraform :

terraform apply

Créer une instance Cloud SQL avec CMEK

Pour créer une instance avec des clés de chiffrement gérées par le client, 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. Cliquez sur Create instance (Créer une instance).
  3. Choisissez le moteur de base de données.
  4. Entrez un nom pour l'instance. N'incluez pas d'informations sensibles ou personnelles dans le nom de l'instance, car les utilisateurs externes peuvent le voir. Vous n'avez pas besoin d'indiquer l'ID du projet, qui est créé automatiquement le cas échéant (dans les fichiers journaux, par exemple).
  5. Saisissez le mot de passe de l'utilisateur 'root'@'%'.
  6. Définissez la région de l'instance. Placez l'instance dans la même région que les ressources qui y accèdent. Dans la plupart des cas, il n'est pas nécessaire de spécifier une zone.
  7. Dans la section Options de configuration, sélectionnez toutes vos options de configuration jusqu'à atteindre Type de machine et stockage.
  8. Développez Type de machine et stockage.
  9. Dans la section Encryption (Chiffrement), sélectionnez Customer-managed key (Clé gérée par le client).
  10. Sélectionnez la clé KMS depuis le menu déroulant ou saisissez manuellement l'identifiant KMS_KEY_ID. Seules les clés KMS du même projet et de la même région que l'instance sont affichées. Pour choisir une clé KMS appartenant à un autre projet, mais dans la même région, sélectionnez Vous ne trouvez pas votre clé ? Saisissez son ID de ressource, puis saisissez l'identifiant KMS_KEY_ID copié précédemment.
  11. Si le compte de service n'est pas autorisé à chiffrer/déchiffrer avec la clé sélectionnée, un message s'affiche. Dans ce cas, cliquez sur Accorder pour attribuer au compte de service le rôle IAM roles/cloudkms.cryptoKeyEncrypterDecrypter> sur la clé KMS sélectionnée.
  12. Une fois que les options de configuration sont sélectionnées, cliquez sur Créer.
  13. Un message expliquant les conséquences de l'utilisation d'une clé de chiffrement gérée par le client s'affiche. Lisez-le et acceptez-le pour poursuivre la création de l'instance.

gcloud

gcloud sql instances create INSTANCE_NAME \
--project=PROJECT_ID \
--disk-encryption-key=KMS_KEY_ID \
--database-version=VERSION \
--tier=MACHINE_TYPE \
--region=REGION \
--root-password=INSERT-PASSWORD-HERE

Terraform

Pour créer une instance avec CMEK, utilisez une ressource Terraform.

resource "google_sql_database_instance" "mysql_instance_with_cmek" {
  name                = "mysql-instance-cmek"
  provider            = google-beta
  region              = "us-central1"
  database_version    = "MYSQL_8_0"
  encryption_key_name = google_kms_crypto_key.key.id
  settings {
    tier = "db-n1-standard-2"
  }
  # 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
}

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

Pour créer une instance avec des clés de chiffrement gérées par le client, transmettez diskEncryptionConfiguration à la commande.

Avant d'utiliser les données de requête, effectuez les remplacements suivants :

  • project-id : ID du projet
  • instance-id : ID de l'instance
  • region : région
  • database-version : chaîne de version Emum (par exemple, MYSQL_8_0)
  • kms-resource-id : ID reçu après avoir créé une clé

Méthode HTTP et URL :

POST https://sqladmin.googleapis.com/v1/projects/project-id/instances

Corps JSON de la requête :

{
  "name":"instance-id",
  "region":"region",
  "databaseVersion": "database-version",
  "diskEncryptionConfiguration" :
  {
      "kmsKeyName" : "kms-resource-id"
  },
  "settings":
  {
     "backupConfiguration":
      {
         "binaryLogEnabled": true,
         "enabled":true
      }
   }
}

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

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

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/v1/projects/project-id/instances",
  "status": "PENDING",
  "user": "user@example.com",
  "insertTime": "2020-01-16T02:32:12.281Z",
  "operationType": "UPDATE",
  "name": "operation-id",
  "targetId": "instance-id",
  "selfLink": "https://sqladmin.googleapis.com/v1/projects/project-id/operations/operation-id",
  "targetProject": "project-id"
}
Cet exemple utilise la méthode instances:insert.

REST v1beta4

Pour créer une instance avec des clés de chiffrement gérées par le client, transmettez diskEncryptionConfiguration à la commande.

Avant d'utiliser les données de requête, effectuez les remplacements suivants :

  • project-id : ID du projet
  • instance-id : ID de l'instance
  • region : région
  • database-version : chaîne de version Emum (par exemple, MYSQL_8_0)
  • kms-resource-id : ID reçu après avoir créé une clé

Méthode HTTP et URL :

POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances

Corps JSON de la requête :

{
  "name":"instance-id",
  "region":"region",
  "databaseVersion": "database-version",
  "diskEncryptionConfiguration" :
  {
      "kmsKeyName" : "kms-resource-id"
  },
  "settings":
  {
     "backupConfiguration":
      {
         "binaryLogEnabled": true,
         "enabled":true
      }
   }
}

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

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

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances",
  "status": "PENDING",
  "user": "user@example.com",
  "insertTime": "2020-01-16T02:32:12.281Z",
  "operationType": "UPDATE",
  "name": "operation-id",
  "targetId": "instance-id",
  "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/operations/operation-id",
  "targetProject": "project-id"
}
Cet exemple utilise la méthode instances:insert.

Créer une sauvegarde pour une instance configurée pour utiliser les CMEK

Lorsque vous créez une sauvegarde d'une instance Cloud SQL, celle-ci est chiffrée avec la même version de clé primaire que la clé gérée par le client de l'instance principale.

Consultez la page Créer et gérer des sauvegardes à la demande et automatiques.

Sur le formulaire Créer une sauvegarde, le message suivant s'affiche : "Votre sauvegarde sera chiffrée avec la version principale de la clé de chiffrement gérée par le client de cette instance. Si quelqu'un détruit ou désactive cette version de clé, toutes les données de sauvegarde chiffrées à l'aide de cette version seront définitivement perdues. Vous pouvez vérifier la version principale de la clé dans Cloud KMS."

Sur la page des sauvegardes, la liste des sauvegardes activées à l'aide de clés de chiffrement gérées par le client comporte deux colonnes supplémentaires. Une colonne indique que la sauvegarde concerne une instance pour laquelle CMEK est activée, et l'autre affiche la version de clé utilisée pour chiffrer la sauvegarde.

Créer une instance dupliquée pour une instance configurée pour utiliser les CMEK

Lorsque vous créez une instance dupliquée avec accès en lecture d'une instance Cloud SQL dans la même région, elle hérite de la même clé de chiffrement gérée par le client que l'instance parente. Si vous créez une instance dupliquée avec accès en lecture dans une région différente, une nouvelle liste de clés de chiffrement gérées par le client vous est proposée. Chaque région utilise son propre ensemble de clés.

Consultez la page Créer des instances dupliquées avec accès en lecture.

Sur la page Créer une instance dupliquée avec accès en lecture, les informations suivantes s'affichent :

  1. La section Chiffrement indique Géré par le client.
  2. La clé de chiffrement de l'instance dupliquée s'affiche.
  3. Le message suivant s'affiche : "Votre instance dupliquée sera chiffrée avec la clé gérée par le client de l'instance principale. Si quelqu'un détruit cette clé, toutes les données chiffrées qui lui sont associées seront définitivement perdues."

Pour une instance dupliquée interrégionale, le message suivant s'affiche :

"Votre instance dupliquée interrégionale sera chiffrée avec la clé gérée par le client sélectionnée. Si quelqu'un détruit cette clé, toutes les données chiffrées qui y sont associées seront définitivement perdues.

Créer un clone d'une instance configurée pour utiliser les CMEK

Lorsque vous créez un clone d'instance Cloud SQL, il hérite de la même clé de chiffrement gérée par le client que celle utilisée pour chiffrer l'instance source.

Consultez la page Cloner des instances.

La page Créer un clone contient les informations suivantes :

  1. La section Chiffrement indique Géré par le client.
  2. La clé de chiffrement du clone s'affiche.
  3. Le message suivant s'affiche : "Votre clone sera chiffré avec la clé gérée par le client de l'instance source. Si quelqu'un détruit cette clé, toutes les données chiffrées qui y sont associées seront définitivement perdues."

Afficher les informations sur les clés d'une instance configurée pour utiliser les CMEK

Une fois l'instance Cloud SQL créée, vous pouvez consulter la liste des instances ou la page de présentation de l'instance pour vérifier si elle a été créée à l'aide d'une clé de chiffrement gérée par le client. Les détails montrent également la clé utilisée pour créer l'instance.

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

    Accéder à la page Instances Cloud SQL

  2. Dans la liste des instances, faites défiler l'écran vers la droite jusqu'à la colonne Chiffrement. Cette colonne affiche les mentions Géré par Google et Géré par le client.
  3. Cliquez sur le nom d'une instance pour ouvrir la page Présentation associée. La clé de chiffrement gérée par le client est répertoriée dans le volet Configuration.

Rechiffrer une instance ou une instance répliquée existante sur laquelle l'option CMEK est activée

Vous pouvez rechiffrer vos instances et instances répliquées Cloud SQL existantes avec la dernière version de clé primaire. Pour en savoir plus sur le rechiffrement de vos instances ou instances répliquées existantes sur lesquelles l'option CMEK est activée, consultez À propos des clés.

Obtenir la nouvelle version de clé primaire

  • Pour rechiffrer votre instance ou instance répliquée avec une nouvelle version, vous avez besoin de la nouvelle version de clé primaire. Si vous avez besoin d'une nouvelle version de clé pour vos instances, vous devez effectuer la rotation de votre clé à l'aide de Cloud Key Management Service. Pour effectuer une rotation de votre clé primaire, consultez Effectuer la rotation d'une clé.

  • Une fois la rotation des clés terminée, attendez que la modification de la clé primaire soit propagée avant de rechiffrer vos instances. Si la modification de la version de clé n'est pas cohérente, votre instance continuera à utiliser l'ancienne version de clé après le rechiffrement. Pour en savoir plus, consultez Cohérence des versions de clé.

Rechiffrer une instance sur laquelle l'option CMEK est activée

Une fois la rotation des clés terminée, rechiffrez l'instance ou l'instance répliquée existante sur laquelle l'option CMEK est activée.

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 la section Configuration, cliquez sur Rechiffrer l'instance.
  4. Dans la boîte de dialogue qui s'affiche, confirmez votre sélection en cliquant sur Rechiffrer.

gcloud

Pour rechiffrer l'instance ou l'instance répliquée, exécutez la commande suivante :

gcloud sql instances reencrypt INSTANCE_NAME
Remplacez INSTANCE_NAME par le nom de l'instance ou de l'instance répliquée que vous rechiffrez.

REST v1

Pour rechiffrer votre instance ou instance répliquée avec la nouvelle clé, exécutez la commande suivante :

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

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

  • PROJECT_ID : ID du projet
  • INSTANCE_ID : ID de l'instance.

Méthode HTTP et URL :

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

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

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

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id",
  "status": "PENDING",
  "user": "user@example.com",
  "insertTime": "2023-06-28T21:19:09.503Z",
  "operationType": "REENCRYPT",
  "name": "operation-id",
  "targetId": "instance-id",
  "selfLink": "https://sqladmin.googleapis.com/v1/projects/project-id/operations/operation-id",
  "targetProject": "project-id"
}

REST v1beta4

Pour rechiffrer votre instance ou instance répliquée avec la nouvelle clé, exécutez la commande suivante :
    POST https://sqladmin.googleapis.com/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID/reencrypt

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

  • PROJECT_ID : ID du projet
  • INSTANCE_ID : ID de l'instance.

Méthode HTTP et URL :

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

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

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

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id",
  "status": "PENDING",
  "user": "user@example.com",
  "insertTime": "2023-06-28T21:22:13.663Z",
  "operationType": "REENCRYPT",
  "name": "operation-id",
  "targetId": "instance-id",
  "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/operations/operation-id",
  "targetProject": "project-id"
}

Sauvegardes de rechiffrement automatiques

Lorsque vous rechiffrez une instance principale avec une nouvelle version de clé primaire, Cloud SQL crée automatiquement une sauvegarde à la demande appelée "sauvegarde de rechiffrement".

Dans la liste de sauvegardes de votre instance Cloud SQL, la sauvegarde de rechiffrement est répertoriée en tant que type on-demand et porte l'étiquette backup created automatically for data before CMEK re-encryption.

Comme pour les autres sauvegardes à la demande, les sauvegardes de rechiffrement sont conservées jusqu'à ce que vous les supprimiez ou que vous supprimiez l'instance.

Limites du rechiffrement

Lorsque vous rechiffrez une instance, tenez compte des limites suivantes :

  • Vous ne pouvez pas effectuer d'autres opérations d'administration sur l'instance pendant le rechiffrement.
  • L'opération de rechiffrement déclenche un temps d'arrêt qui dépend de la taille de l'instance ou de l'instance répliquée.
  • Les instances répliquées d'une instance ne sont pas rechiffrées lorsqu'une instance est rechiffrée. Vous devez rechiffrer chaque instance répliquée séparément.
  • Les sauvegardes ne sont pas automatiquement rechiffrées avec la nouvelle version de clé lorsque vous rechiffrez l'instance. Pour restaurer la sauvegarde ou la récupération à un moment précis après la sauvegarde, vous devez conserver la version de clé Cloud KMS avec laquelle la sauvegarde est chiffrée.

Pour en savoir plus, consultez le tableau de dépannage du rechiffrement.

Utiliser Cloud External Key Manager (Cloud EKM)

Pour protéger les données des instances Cloud SQL, vous pouvez utiliser des clés que vous gérez dans un système partenaire de gestion de clés externes compatible. Pour en savoir plus, consultez la page Cloud External Key Manager, y compris la section Éléments à prendre en compte.

Lorsque vous êtes prêt à créer une clé Cloud EKM, consultez la page Gérer les clés Cloud EKM. Une fois la clé créée, indiquez son nom lorsque vous créez une instance Cloud SQL.

Vous pouvez utiliser Key Access Justifications (KAJ) dans Cloud EKM. KAJ vous permet d'afficher la raison de chaque requête Cloud EKM. De plus, selon la justification fournie, vous pouvez approuver ou refuser automatiquement une requête. Pour en savoir plus, consultez la présentation.

Ainsi, KAJ offre un contrôle supplémentaire sur vos données en justifiant chaque tentative de déchiffrement des données.

Google ne contrôle pas la disponibilité des clés dans un système partenaire de gestion de clés externes.

Désactiver et réactiver des versions de clé

Consultez les articles suivants :

Résoudre les problèmes

Cette section décrit des mesures que vous pouvez appliquer lorsque vous recevez un message d'erreur lors de la configuration ou de l'utilisation d'instances utilisant les CMEK.

Les opérations d'administrateur Cloud SQL, telles que la création, le clonage ou la mise à jour peuvent échouer en raison d'erreurs Cloud KMS et de l'absence de rôles ou d'autorisations. Les causes habituelles d'échec sont les suivantes : la version de clé Cloud KMS est manquante, la version de clé Cloud KMS est désactivée ou détruite, les autorisations IAM sont insuffisantes pour accéder à la version de clé Cloud KMS ou la version de clé Cloud KMS se trouve dans une région différente de celle de l'instance Cloud SQL. Utilisez le tableau de dépannage ci-dessous pour diagnostiquer et résoudre les problèmes courants.

Tableau de dépannage des clés de chiffrement gérées par le client

Pour cette erreur... Le problème peut être... Essayez ce qui suit...
Le compte de service par produit et par projet est introuvable Le nom du compte de service est incorrect. Assurez-vous d'avoir créé un compte de service pour le bon projet utilisateur.

ACCÉDER A LA PAGE "COMPTES DE SERVICE"

Impossible d'accorder l'accès au compte de service Le compte utilisateur n'a pas l'autorisation d'accorder l'accès à cette version de clé. Ajoutez le rôle Administrateur de l'organisation à votre compte utilisateur ou de service.

ACCÉDER À LA PAGE COMPTES IAM

La version de clé Cloud KMS est détruite La version de clé est détruite. Si la version de clé est détruite, vous ne pouvez pas l'utiliser pour chiffrer ou déchiffrer des données.
La version de clé Cloud KMS est désactivée La version de clé est désactivée. Réactivez la version de clé Cloud KMS.

ACCÉDER À LA PAGE "CLÉS DE CHIFFREMENT"

Autorisation insuffisante pour utiliser la clé Cloud KMS Le rôle cloudkms.cryptoKeyEncrypterDecrypter est manquant sur le compte utilisateur ou de service que vous utilisez pour exécuter des opérations sur des instances Cloud SQL, ou la version de clé Cloud KMS n'existe pas. Dans le projet Google Cloud qui héberge la clé, ajoutez le rôle cloudkms.cryptoKeyEncrypterDecrypter à votre compte utilisateur ou de service.

ACCÉDER À LA PAGE COMPTES IAM


Si le rôle est déjà attribué à votre compte, consultez Créer une clé pour savoir comment créer une version de clé. Voir la remarque ci-dessous.
La clé Cloud KMS est introuvable La version de clé n'existe pas. Créez une nouvelle version de la clé. Consultez la section Créer une clé. Voir la remarque ci-dessous.
L'instance Cloud SQL et la version de clé Cloud KMS se trouvent dans des régions différentes La version de clé Cloud KMS et l'instance Cloud SQL doivent se trouver dans la même région. Cela ne fonctionnera pas si la version de clé Cloud KMS se trouve dans une région mondiale ou dans un emplacement multirégional. Créez une version de clé dans la même région que celle où vous souhaitez créer des instances. Consultez la section Créer une clé. Voir la remarque ci-dessous.
La version de clé Cloud KMS est restaurée, mais l'instance est toujours suspendue La version de clé est désactivée ou n'accorde pas les autorisations appropriées. Réactivez la version de clé et attribuez le rôle cloudkms.cryptoKeyEncrypterDecrypter à votre compte utilisateur ou de service dans le projet Google Cloud qui héberge la clé.

Tableau de dépannage du rechiffrement

Pour cette erreur... Le problème peut être... Essayez ce qui suit...
Le rechiffrement des ressources CMEK a échoué, car la clé Cloud KMS est inaccessible. Veuillez vous assurer que la version de clé primaire est activée et que l'autorisation est accordée correctement. La version de clé est désactivée ou n'accorde pas les autorisations appropriées.

Réactivez la version de clé Cloud KMS :

ACCÉDER À LA PAGE "CLÉS DE CHIFFREMENT"

Dans le projet Google Cloud qui héberge la clé, confirmez que le rôle cloudkms.cryptoKeyEncrypterDecrypter a été attribué à votre compte utilisateur ou de service :

ACCÉDER À LA PAGE COMPTES IAM

Échec du rechiffrement des ressources CMEK en raison d'une erreur interne du serveur. Veuillez réessayer plus tard. Une erreur interne du serveur s'est produite. Relancez le rechiffrement. Pour en savoir plus, consultez Rechiffrer une instance ou une instance répliquée existante sur laquelle l'option CMEK est activée.

Étapes suivantes