Utiliser le chiffrement transparent des données (TDE)

Cette page explique comment utiliser le chiffrement transparent des données (TDE, Transparent Data Encryption).

Les sections suivantes vous expliquent comment gérer les certificats TDE.

Avant de commencer

Pour importer ou exporter des certificats TDE, vous devez disposer de l'autorisation Identity and Access Management cloudsql.instances.manageEncryption, disponible dans le rôle cloudsql.admin. Pour en savoir plus, consultez la section Rôles Cloud SQL.

GRANT VIEW ANY DEFINITION TO other_login AS CustomerDbRootRole

Importer un certificat TDE externe

Console

Vous ne pouvez pas importer de certificat TDE à l'aide de la console Google Cloud.

gcloud

Utilisez la gcloud sql import suivante pour importer un certificat à partir d'un bucket Cloud Storage:

    gcloud sql import tde INSTANCE_NAME \
    --certificate CERTIFICATE_NAME \
    --cert-path=gs://BUCKET_NAME/CERTIFICATE_NAME \
    --pvk-path=gs://BUCKET_NAME/KEY_NAME \
    --prompt-for-pvk-password \
    --pvk-password CERTIFICATE_PASSWORD
    

Effectuez les remplacements suivants :

  • INSTANCE_NAME: nom de l'instance Cloud SQL dans laquelle vous souhaitez importer le certificat TDE.
  • CERTIFICATE_NAME: nom du certificat de chiffrement que vous souhaitez importer.
  • BUCKET_NAME: nom du bucket Cloud Storage dans lequel se trouve le certificat TDE que vous souhaitez importer.
  • KEY_NAME: nom de la clé de chiffrement associée au bucket Cloud Storage.
  • CERTIFICATE_PASSWORD: mot de passe du certificat.

REST v1

Pour importer un certificat TDE, utilisez la méthode instances.import et spécifiez les propriétés suivantes:

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

  • PROJECT_ID: nom du projet dans lequel le certificat de chiffrement doit être importé.
  • INSTANCE_NAME: nom de l'instance Cloud SQL à laquelle vous souhaitez importer le certificat de chiffrement.
  • TDE_CERTIFICATE_NAME: nom du certificat de chiffrement que vous souhaitez utiliser après son importation.
  • CERTIFICATE_NAME: nom du certificat de chiffrement que vous souhaitez importer.
  • BUCKET_NAME: nom du bucket Cloud Storage dans lequel se trouve le certificat de chiffrement que vous souhaitez importer.
  • KEY_NAME: nom de la clé de chiffrement associée au bucket Cloud Storage.
  • CERTIFICATE_PASSWORD: mot de passe du certificat.

Méthode HTTP et URL :

POST https://sqladmin.googleapis.com/v1/projects/PROJECT_NAME/instances/INSTANCE_NAME/import

Corps JSON de la requête :


{
  "importContext":
    {
        "fileType": "TDE",
        "tdeImportOptions":
          {
            "name": "TDE_CERTIFICATE_NAME",
            "certificatePath": "gs://BUCKET_NAME/CERTIFICATE_NAME",
            "privateKeyPath": "gs://BUCKET_NAME/KEY_NAME",
            "privateKeyPassword": "CERTIFICATE_PASSWORD"
          }
    }
}



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

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

REST v1beta4

Pour importer un certificat TDE, utilisez la méthode instances.import et spécifiez les propriétés suivantes:

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

  • PROJECT_ID: nom du projet dans lequel le certificat de chiffrement doit être importé.
  • INSTANCE_NAME: nom de l'instance Cloud SQL à laquelle vous souhaitez importer le certificat de chiffrement.
  • TDE_CERTIFICATE_NAME: nom du certificat de chiffrement que vous souhaitez utiliser après son importation.
  • CERTIFICATE_NAME: nom du certificat de chiffrement que vous souhaitez importer.
  • BUCKET_NAME: nom du bucket Cloud Storage dans lequel se trouve le certificat de chiffrement que vous souhaitez importer.
  • KEY_NAME: nom de la clé de chiffrement associée au bucket Cloud Storage.
  • CERTIFICATE_PASSWORD: mot de passe du certificat.

Méthode HTTP et URL :

POST https://sqladmin.googleapis.com/v1beta4/projects/PROJECT_NAME/instances/INSTANCE_NAME/import

Corps JSON de la requête :


{
  "importContext":
    {
        "fileType": "TDE",
        "tdeImportOptions":
          {
            "name": "TDE_CERTIFICATE_NAME",
            "certificatePath": "gs://BUCKET_NAME/CERTIFICATE_NAME",
            "privateKeyPath": "gs://BUCKET_NAME/KEY_NAME",
            "privateKeyPassword": "CERTIFICATE_PASSWORD"
          }
    }
}



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

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

Chaque certificat TDE importé se voit attribuer un nom unique au format suivant:

  gcloud_tde_user_CERTIFICATE_NAME_GENERATED_GUID

Si la récupération à un moment précis (PITR, point-in-time recovery) est activée sur l'instance, plusieurs minutes peuvent être nécessaires avant que le certificat TDE importé soit disponible.

Effectuer une rotation des certificats TDE

  • Vous pouvez faire pivoter un certificat TDE importé à l'aide de la procédure stockée msdb.dbo.gcloudsql_rotate_tde_certificate. La procédure doit être appelée par l'utilisateur sqlserver ou par les utilisateurs auxquels l'utilisateur sqlserver a accordé l'autorisation, à l'aide d'un appel semblable à celui-ci:

        EXEC msdb.dbo.gcloudsql_rotate_tde_certificate TDE_CERTIFICATE_NAME
        

Supprimer des certificats TDE

  • Vous pouvez importer jusqu'à 10 certificats TDE utilisateur. Si vous devez en importer d'autres, supprimez les certificats TDE inutiles à l'aide de la procédure stockée msdb.dbo.gcloudsql_drop_tde_user_certificate. La procédure doit être appelée par l'utilisateur sqlserver ou par les utilisateurs auxquels l'utilisateur sqlserver a accordé l'autorisation, à l'aide d'un appel semblable à celui-ci:

        EXEC gcloudsql_drop_tde_user_certificate TDE_CERTIFICATE_NAME
        
  • Vous ne pouvez pas supprimer un certificat géré par Cloud SQL.

  • Vous ne pouvez pas supprimer un certificat lorsqu'il est utilisé.

Exporter un certificat TDE

Vous devez spécifier le nom complet du certificat TDE, y compris le préfixe et le suffixe, pour l'exporter. Vous pouvez rechercher le nom complet du certificat de chiffrement TDE en interrogeant la colonne de nom de la vue sys.certificates:

    SELECT name FROM sys.certificates
  

Console

Vous ne pouvez pas exporter un certificat TDE à l'aide de la console Google Cloud.

gcloud

Utilisez la commande gcloud sql export suivante pour exporter un certificat TDE vers un bucket Cloud Storage:

          gcloud sql export tde INSTANCE_NAME \
          --certificate CERTIFICATE_NAME \
          --cert-path=gs://BUCKET_NAME/CERTIFICATE_NAME \
          --pvk-path=gs://BUCKET_NAME/KEY_NAME \
          --prompt-for-pvk-password \
          --pvk-password CERTIFICATE_PASSWORD
        

Effectuez les remplacements suivants :

  • INSTANCE_NAME: nom de l'instance Cloud SQL à partir de laquelle vous souhaitez exporter le certificat TDE.
  • CERTIFICATE_NAME: nom du certificat de chiffrement que vous souhaitez exporter.
  • BUCKET_NAME: nom du bucket Cloud Storage où se trouve le certificat TDE que vous souhaitez exporter.
  • KEY_NAME: nom de la clé de chiffrement associée au bucket Cloud Storage.
  • CERTIFICATE_PASSWORD: mot de passe du certificat.

REST v1

Pour exporter un certificat TDE, utilisez la méthode instances.export et spécifiez les propriétés suivantes:

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

  • PROJECT_ID: nom du projet à partir duquel le certificat de chiffrement doit être exporté.
  • INSTANCE_NAME: nom de l'instance Cloud SQL à partir de laquelle vous souhaitez exporter le certificat de chiffrement.
  • TDE_CERTIFICATE_NAME: nom du certificat de chiffrement que vous souhaitez utiliser après son exportation.
  • CERTIFICATE_NAME: nom du certificat de chiffrement que vous souhaitez exporter.
  • BUCKET_NAME: nom du bucket Cloud Storage où se trouve le certificat de chiffrement que vous souhaitez exporter.
  • KEY_NAME: nom de la clé de chiffrement associée au bucket Cloud Storage.
  • CERTIFICATE_PASSWORD: mot de passe du certificat.

Méthode HTTP et URL :

POST https://sqladmin.googleapis.com/v1/projects/PROJECT_NAME/instances/INSTANCE_NAME/export

Corps JSON de la requête :


{
  "exportContext":
    {
      "fileType": "TDE",
      "tdeExportOptions":
        {
          "name": "TDE_CERTIFICATE_NAME",
          "certificatePath": "gs://BUCKET_NAME/CERTIFICATE_NAME",
          "privateKeyPath": "gs://BUCKET_NAME/KEY_NAME",
          "privateKeyPassword": "CERTIFICATE_PASSWORD"
        }
    }
}


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

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

REST v1beta4

Pour exporter un certificat TDE, utilisez la méthode instances.export et spécifiez les propriétés suivantes:

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

  • PROJECT_ID: nom du projet à partir duquel le certificat de chiffrement doit être exporté.
  • INSTANCE_NAME: nom de l'instance Cloud SQL à partir de laquelle vous souhaitez exporter le certificat de chiffrement.
  • TDE_CERTIFICATE_NAME: nom du certificat de chiffrement que vous souhaitez utiliser après son exportation.
  • CERTIFICATE_NAME: nom du certificat de chiffrement que vous souhaitez exporter.
  • BUCKET_NAME: nom du bucket Cloud Storage où se trouve le certificat de chiffrement que vous souhaitez exporter.
  • KEY_NAME: nom de la clé de chiffrement associée au bucket Cloud Storage.
  • CERTIFICATE_PASSWORD: mot de passe du certificat.

Méthode HTTP et URL :

POST https://sqladmin.googleapis.com/v1beta4/projects/PROJECT_NAME/instances/INSTANCE_NAME/export

Corps JSON de la requête :


{
  "exportContext":
    {
      "fileType": "TDE",
      "tdeExportOptions":
        {
          "name": "TDE_CERTIFICATE_NAME",
          "certificatePath": "gs://BUCKET_NAME/CERTIFICATE_NAME",
          "privateKeyPath": "gs://BUCKET_NAME/KEY_NAME",
          "privateKeyPassword": "CERTIFICATE_PASSWORD"
        }
    }
}


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

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

Importer une sauvegarde chiffrée par TDE

Lorsque vous importez une sauvegarde chiffrée par TDE, si le certificat TDE correspondant se trouve déjà sur l'instance source, vous pouvez importer directement la sauvegarde chiffrée, et elle ne sera pas déchiffrée. Vous n'avez pas besoin de fournir à nouveau le certificat.

Si le certificat ne se trouve pas sur l'instance, utilisez l'option --keep-encrypted lors de l'importation. L'indicateur présente les avantages suivants:

  • Conserve le certificat TDE associé à l'instance.
  • Empêche le déchiffrement de la sauvegarde lors de l'importation.

Si vous n'utilisez pas l'indicateur --keep-encrypted, la sauvegarde importée sera déchiffrée et le certificat TDE ne sera pas enregistré sur le serveur.

Pour en savoir plus, consultez les ressources suivantes :

Exporter une sauvegarde chiffrée par TDE

Vous pouvez exporter une sauvegarde chiffrée TDE de la même manière que vous exportez une sauvegarde non chiffrée. Le certificat utilisé pour chiffrer la sauvegarde n'est pas inclus dans l'exportation. Vous devez l'exporter séparément.

Pour en savoir plus, consultez les ressources suivantes :

Chiffrer et déchiffrer une base de données

Vous pouvez chiffrer et déchiffrer votre instance de la même manière que vous le feriez avec SQL Server.

Au départ, seuls les identifiants root de l'utilisateur, tels que sqlserver, peuvent accéder aux certificats TDE. Pour accorder l'accès à d'autres utilisateurs, utilisez la commande suivante ou une commande similaire:

    GRANT VIEW ANY DEFINITION TO CERTIFICATE_NAME AS CustomerDbRootRole
  

Vous pouvez également accorder l'accès à un certificat et à un utilisateur de base de données spécifiques.

Vous pouvez chiffrer une base de données à l'aide de la commande suivante ou d'une commande similaire:

    CREATE DATABASE ENCRYPTION KEY WITH ALGORITHM = AES_256 ENCRYPTION BY SERVER CERTIFICATE CERTIFICATE_NAME
    ALTER DATABASE DATABASE_NAME SET ENCRYPTION ON
  

Vous pouvez déchiffrer une base de données à l'aide de la commande suivante ou d'une commande similaire:

    ALTER DATABASE DATABASE_NAME SET ENCRYPTION OFF
  

Étape suivante