Prise en charge de Transparent Data Encryption dans SQL Server - Amazon Relational Database Service

Prise en charge de Transparent Data Encryption dans SQL Server

Amazon RDS prend en charge Transparent Data Encryption (TDE) pour le chiffrement des données stockées sur vos instances de base de données exécutant Microsoft SQL Server. La fonction TDE chiffre automatiquement les données avant qu'elles ne soient écrites sur le stockage et déchiffre automatiquement les données lorsqu'elles sont lues depuis le stockage.

Amazon RDS prend en charge TDE pour les versions et éditions suivantes de SQL Server :

  • SQL Server 2019 Standard Edition et Enterprise Edition

  • SQL Server 2017 Enterprise Edition

  • SQL Server 2016 Enterprise Edition

  • SQL Server 2014 Enterprise Edition

La fonction TDE pour SQL Server assure la gestion des clés de chiffrement à l'aide d'une architecture de clés à deux niveaux. Un certificat, qui est généré à partir de la clé principale de la base de données, permet de protéger les clés de chiffrement des données. La clé de chiffrement de la base de données exécute le chiffrement et le déchiffrement des données sur la base de données utilisateur. Amazon RDS sauvegarde et gère la clé principale de la base de données ainsi que le certificat TDE..

La fonction TDE (Transparent Data Encryption) est utilisée dans les scénarios où vous devez chiffrer des données sensibles. Par exemple, vous pouvez souhaiter fournir des fichiers de données et des sauvegardes à un tiers, ou résoudre des problèmes de conformité réglementaire liés à la sécurité. Vous ne pouvez pas chiffrer les bases de données système pour SQL Server, telles que les bases de données model ou master.

Ce guide n'a pas vocation à offrir une présentation détaillée du chiffrement TDE, mais assurez-vous de bien comprendre les points forts et les points faibles de chaque algorithme et de chaque clé. Pour plus d'informations sur la technologie Transparent Data Encryption pour SQL Server, consultez Transparent Data Encryption (TDE) dans la documentation Microsoft.

Activation de TDE pour RDS for SQL Server

Pour activer la fonction Transparent Data Encryption pour une instance de base de données RDS for SQL Server, spécifiez l'option TDE dans un groupe d'options RDS associé à cette instance de base de données :

  1. Déterminez si votre instance de base de données est déjà associée à un groupe d'options disposant de l'option TDE. Pour afficher le groupe d'options auquel une instance de base de données est associée, utilisez la console RDS, la commande AWS CLI describe-db-instance ou l'opération d'API DescribeDBInstances.

  2. Si l'instance de base de données n'est pas associée à un groupe d'options pour lequel TDE est activé, vous avez deux possibilités. Vous pouvez créer un groupe d'options et ajouter l'option TDE, ou vous pouvez modifier le groupe d'options associé pour l'ajouter.

    Note

    Dans la console RDS, l'option est nommée TRANSPARENT_DATA_ENCRYPTION. Dans l'AWS CLI et l'API RDS, elle est nommée TDE.

    Pour plus d'informations sur la création ou la modification d'un groupe d'options, consultez Utilisation de groupes d'options. Pour de plus amples informations sur l'ajout d'une option à un groupe d'options, veuillez consulter Ajout d'une option à un groupe d'options.

  3. Associez l'instance de base de données au groupe d'options qui dispose de l'option TDE. Pour plus d'informations sur l'association d'une instance de base de données à un groupe d'options, consultez Modification d'une instance de base de données Amazon RDS.

Considérations relatives au groupe d'options

L'option TDE est persistante. Vous ne pouvez pas la supprimer d'un groupe d'options tant que toutes les instances de base de données et les sauvegardes sont associées au groupe d'options. Une fois que vous avez ajouté l'option TDE à un groupe d'options, le groupe d'options ne peut être associé qu'aux instances de base de données qui utilisent TDE. Pour plus d'informations sur les options persistantes dans un groupe d'options, consultez Présentation des groupes d'options.

Comme l'option TDE est une option persistante, un conflit peut se produire entre le groupe d'options et une instance de base de données associée. Un conflit peut se produire dans les cas suivants :

  • Le groupe d'options actuel a l'option TDE et vous le remplacez par un groupe d'options qui n'a pas l'option TDE.

  • Vous restaurez à partir d'un instantané de base de données vers une nouvelle instance de base de données qui n'a pas de groupe d'options contenant l'option TDE. Pour plus d'informations sur ce scénario, consultez Considérations relatives au groupe d'options.

Considérations relatives aux performances de SQL Server

L'utilisation de Transparent Data Encryption peut impacter les performances d'une instance de base de données SQL Server.

Les performances des bases de données non chiffrées peuvent aussi être dégradées si les bases de données se trouvent sur une instance de base de données qui possède au moins une base de données chiffrée. En conséquence, il est recommandé de garder les bases de données chiffrées et les bases de données non chiffrées sur des instances de base de données distinctes.

Chiffrement de données sur RDS for SQL Server

Lorsque l'option TDE est ajoutée à un groupe d'options, Amazon RDS génère un certificat qui est utilisé dans le processus de chiffrement. Vous pouvez alors utiliser le certificat pour exécuter les instructions SQL qui chiffrent les données d'une base de données sur l'instance de base de données.

L'exemple suivant utilise le certificat créé par RDS et appelé RDSTDECertificateName pour chiffrer la base de données myDatabase.

---------- Turning on TDE ------------- -- Find an RDS TDE certificate to use USE [master] GO SELECT name FROM sys.certificates WHERE name LIKE 'RDSTDECertificate%' GO USE [myDatabase] GO -- Create a database encryption key (DEK) using one of the certificates from the previous step CREATE DATABASE ENCRYPTION KEY WITH ALGORITHM = AES_256 ENCRYPTION BY SERVER CERTIFICATE [RDSTDECertificateName] GO -- Turn on encryption for the database ALTER DATABASE [myDatabase] SET ENCRYPTION ON GO -- Verify that the database is encrypted USE [master] GO SELECT name FROM sys.databases WHERE is_encrypted = 1 GO SELECT db_name(database_id) as DatabaseName, * FROM sys.dm_database_encryption_keys GO

La durée du chiffrement d'une base de données SQL Server à l'aide de TDE dépend de plusieurs facteurs. Elle dépend notamment de la taille de l'instance de base de données, du fait que l'instance utilise ou non le stockage d'IOPS provisionnés, de la quantité de données, et d'autres facteurs.

Sauvegarde et restauration de certificats TDE sur RDS for SQL Server

RDS for SQL Server fournit des procédures stockées pour la sauvegarde, la restauration et la suppression de certificats TDE. RDS for SQL Server fournit également une fonction permettant d'afficher les certificats TDE utilisateur restaurés.

Les certificats TDE utilisateur sont utilisés pour restaurer des bases de données sur site et pour lesquelles TDE est activé sur RDS for SQL Server. Ces certificats ont le préfixe UserTDECertificate_. Après avoir restauré les bases de données et avant de les mettre à disposition, RDS modifie les bases de données sur lesquelles TDE est activé pour utiliser les certificats TDE générés par RDS. Ces certificats ont le préfixe RDSTDECertificate.

Les certificats TDE utilisateur restent sur l'instance de base de données RDS for SQL Server, sauf si vous les supprimez en utilisant la procédure stockée rds_drop_tde_certificate. Pour plus d'informations, consultez Suppression de certificats TDE restaurés.

Vous pouvez utiliser un certificat TDE utilisateur pour restaurer d'autres bases de données à partir de l'instance de base de données source. Les bases de données à restaurer doivent utiliser le même certificat TDE et TDE doit être activé sur celles-ci. Il n'est pas nécessaire d'importer (restaurer) à nouveau le même certificat.

Prérequis

Avant de pouvoir sauvegarder ou restaurer des certificats TDE sur RDS for SQL Server, veillez à effectuer les tâches suivantes. Les trois premières tâches sont décrites dans Configuration pour les sauvegarde et restauration natives.

  1. Créez des compartiments Amazon S3 pour y stocker les fichiers à sauvegarder et à restaurer.

    Nous vous recommandons d'utiliser des compartiments distincts pour les sauvegardes de bases de données et pour les sauvegardes de certificats TDE.

  2. Créez un rôle IAM pour la sauvegarde et la restauration de fichiers.

    Le rôle IAM doit être à la fois un utilisateur et un administrateur de la AWS KMS key.

    Outre les autorisations requises pour la sauvegarde et la restauration natives SQL Server, le rôle IAM exige également les autorisations suivantes :

    • s3:GetBucketACL, s3:GetBucketLocation et s3:ListBucket sur la ressource du compartiment S3

    • s3:ListAllMyBuckets sur la ressource *

  3. Ajoutez l'option SQLSERVER_BACKUP_RESTORE à un groupe d'options sur votre instance de base de données.

    Elle vient s'ajouter à l'option TRANSPARENT_DATA_ENCRYPTION (TDE).

  4. Vérifiez que vous disposez d'une clé KMS de chiffrement symétrique. Vous avez les options suivantes :

    • Si vous disposez déjà d'une clé KMS dans votre compte, vous pouvez l'utiliser. Aucune action supplémentaire n'est nécessaire.

    • Si votre compte ne contient pas encore de clés de chiffrement KMS symétriques, créez-en une en suivant les instructions de la section Creating keys (Création de clés) du Guide du développeur AWS Key Management Service.

Limites

L'utilisation de procédures stockées pour sauvegarder et restaurer des certificats TDE présente les limites suivantes :

  • Les options SQLSERVER_BACKUP_RESTORE et TRANSPARENT_DATA_ENCRYPTION (TDE) doivent être ajoutées au groupe d'options que vous avez associé à votre instance de base de données.

  • La sauvegarde et la restauration de certificats TDE ne sont pas prises en charge sur les instances de base de données multi-AZ.

  • L'annulation des tâches de sauvegarde et de restauration de certificats TDE n'est pas prise en charge.

  • Vous ne pouvez pas utiliser de certificat TDE utilisateur pour le chiffrement TDE d'une autre base de données sur votre instance de base de données RDS for SQL Server. Vous pouvez l'utiliser pour restaurer uniquement d'autres bases de données à partir de l'instance de base de données source sur laquelle TDE est activé et qui utilisent le même certificat TDE.

  • Vous ne pouvez supprimer que des certificats TDE utilisateur.

  • Le nombre maximal de certificats TDE utilisateur pris en charge sur RDS est de 10. Si le nombre dépasse 10, supprimez les certificats TDE inutilisés et réessayez.

  • Le nom de certificat ne peut pas être vide ou null.

  • Lors de la restauration d'un certificat, le nom du certificat ne peut pas inclure le mot-clé RDSTDECERTIFICATE et doit commencer par le préfixe UserTDECertificate_.

  • Le paramètre @certificate_name peut inclure uniquement les caractères suivants : a-z, 0-9, @, $, # et trait de soulignement (_).

  • L'extension de fichier de @certificate_file_s3_arn doit être .cer (insensible à la casse).

  • L'extension de fichier de @private_key_file_s3_arn doit être .pvk (insensible à la casse).

  • Les métadonnées S3 du fichier de clé privée doivent inclure la balise x-amz-meta-rds-tde-pwd. Pour plus d'informations, consultez Sauvegarde et restauration de certificats TDE pour les bases de données sur site.

Sauvegarde d'un certificat TDE

Pour sauvegarder les certificats TDE, utilisez la procédure stockée rds_backup_tde_certificate. Elle possède la syntaxe suivante.

EXECUTE msdb.dbo.rds_backup_tde_certificate @certificate_name='UserTDECertificate_certificate_name | RDSTDECertificatetimestamp', @certificate_file_s3_arn='arn:aws:s3:::bucket_name/certificate_file_name.cer', @private_key_file_s3_arn='arn:aws:s3:::bucket_name/key_file_name.pvk', @kms_password_key_arn='arn:aws:kms:region:account-id:key/key-id', [@overwrite_s3_files=0|1];

Les paramètres suivants sont obligatoires :

  • @certificate_name : nom du certificat TDE à sauvegarder.

  • @certificate_file_s3_arn : Amazon Resource Name (ARN) de destination pour le fichier de sauvegarde de certificat dans Amazon S3.

  • @private_key_file_s3_arn : ARN S3 de destination du fichier de clé privée qui sécurise le certificat TDE.

  • @kms_password_key_arn : ARN de la clé KMS symétrique utilisée pour chiffrer le mot de passe de la clé privée.

Le paramètre suivant est facultatif :

  • @overwrite_s3_files : indique s'il convient de remplacer le certificat existant et les fichiers de clé privée dans S3 :

    • 0 : n'écrase pas les fichiers existants. Cette valeur est celle par défaut.

      Si @overwrite_s3_files est défini sur 0, une erreur est renvoyée si un fichier existe déjà.

    • 1 – Écrase le fichier existant qui possède déjà le nom spécifié, même s'il ne s'agit pas d'un fichier de sauvegarde.

Exemple de sauvegarde d'un certificat TDE

EXECUTE msdb.dbo.rds_backup_tde_certificate @certificate_name='RDSTDECertificate20211115T185333', @certificate_file_s3_arn='arn:aws:s3:::TDE_certs/mycertfile.cer', @private_key_file_s3_arn='arn:aws:s3:::TDE_certs/mykeyfile.pvk', @kms_password_key_arn='arn:aws:kms:us-west-2:123456789012:key/AKIAIOSFODNN7EXAMPLE', @overwrite_s3_files=1;

Restauration d'un certificat TDE

Vous utilisez la procédure stockée rds_restore_tde_certificate pour restaurer (importer) des certificats TDE utilisateur. Elle possède la syntaxe suivante.

EXECUTE msdb.dbo.rds_restore_tde_certificate @certificate_name='UserTDECertificate_certificate_name', @certificate_file_s3_arn='arn:aws:s3:::bucket_name/certificate_file_name.cer', @private_key_file_s3_arn='arn:aws:s3:::bucket_name/key_file_name.pvk', @kms_password_key_arn='arn:aws:kms:region:account-id:key/key-id';

Les paramètres suivants sont obligatoires :

  • @certificate_name : nom du certificat TDE à restaurer. Le nom doit commencer par le préfixe UserTDECertificate_.

  • @certificate_file_s3_arn : ARN S3 du fichier de sauvegarde utilisé pour restaurer le certificat TDE.

  • @private_key_file_s3_arn : ARN S3 du fichier de sauvegarde de la clé privée du certificat TDE à restaurer.

  • @kms_password_key_arn : ARN de la clé KMS symétrique utilisée pour chiffrer le mot de passe de la clé privée.

Exemple de restauration d'un certificat TDE

EXECUTE msdb.dbo.rds_restore_tde_certificate @certificate_name='UserTDECertificate_myTDEcertificate', @certificate_file_s3_arn='arn:aws:s3:::TDE_certs/mycertfile.cer', @private_key_file_s3_arn='arn:aws:s3:::TDE_certs/mykeyfile.pvk', @kms_password_key_arn='arn:aws:kms:us-west-2:123456789012:key/AKIAIOSFODNN7EXAMPLE';

Affichage des certificats TDE restaurés

Vous utilisez la fonction rds_fn_list_user_tde_certificates pour afficher les certificats TDE utilisateur restaurés (importés). Elle possède la syntaxe suivante.

SELECT * FROM msdb.dbo.rds_fn_list_user_tde_certificates();

La sortie se présente comme suit : Les colonnes ne sont pas toutes affichées ici.

name certificate_id principal_id pvt_key_encryption_type_desc issuer_name cert_serial_number thumbprint subject start_date expiry_date pvt_key_last_backup_date
UserTDECertificate_tde_cert 343 1 ENCRYPTED_BY_MASTER_KEY AnyCompany Shipping 79 3e 57 a3 69 fd 1d 9e 47 2c 32 67 1d 9c ca af 0x6BB218B34110388680B FE1BA2D86C695096485B5 AnyCompany Shipping 2022-04-05 19:49:45.0000000 2023-04-05 19:49:45.0000000 NULL

Suppression de certificats TDE restaurés

Pour supprimer les certificats TDE utilisateur restaurés (importés) que vous n'utilisez pas, utilisez la procédure stockée rds_drop_tde_certificate. Elle possède la syntaxe suivante.

EXECUTE msdb.dbo.rds_drop_tde_certificate @certificate_name='UserTDECertificate_certificate_name';

Les paramètres suivants sont obligatoires :

  • @certificate_name : nom du certificat TDE à supprimer.

Vous ne pouvez supprimer que les certificats TDE restaurés (importés). Vous ne pouvez pas supprimer les certificats créés par RDS.

Exemple de suppression d'un certificat TDE

EXECUTE msdb.dbo.rds_drop_tde_certificate @certificate_name='UserTDECertificate_myTDEcertificate';

Sauvegarde et restauration de certificats TDE pour les bases de données sur site

Vous pouvez sauvegarder des certificats TDE pour les bases de données sur site, puis les restaurer ultérieurement sur RDS for SQL Server. Vous pouvez également restaurer un certificat TDE RDS for SQL Server sur une instance de base de données sur site.

La procédure suivante sauvegarde un certificat TDE et une clé privée. La clé privée est chiffrée à l'aide d'une clé de données générée à partir de votre clé KMS de chiffrement symétrique.

Pour sauvegarder un certificat TDE sur site

  1. Générez la clé de données à l'aide de la commande AWS CLI generate-data-key.

    aws kms generate-data-key \ --key-id my_KMS_key_ID \ --key-spec AES_256

    La sortie se présente comme suit :

    { "CiphertextBlob": "AQIDAHimL2NEoAlOY6Bn7LJfnxi/OZe9kTQo/XQXduug1rmerwGiL7g5ux4av9GfZLxYTDATAAAAfjB8BgkqhkiG9w0B BwagbzBtAgEAMGgGCSqGSIb3DQEHATAeBglghkgBZQMEAS4wEQQMyCxLMi7GRZgKqD65AgEQgDtjvZLJo2cQ31Vetngzm2ybHDc3d2vI74SRUzZ 2RezQy3sAS6ZHrCjfnfn0c65bFdhsXxjSMnudIY7AKw==", "Plaintext": "U/fpGtmzGCYBi8A2+0/9qcRQRK2zmG/aOn939ZnKi/0=", "KeyId": "arn:aws:kms:us-west-2:123456789012:key/1234abcd-00ee-99ff-88dd-aa11bb22cc33" }

    Vous utilisez la sortie en texte brut à l'étape suivante comme mot de passe de clé privée.

  2. Sauvegardez votre certificat TDE comme illustré dans l'exemple suivant.

    BACKUP CERTIFICATE myOnPremTDEcertificate TO FILE = 'D:\tde-cert-backup.cer' WITH PRIVATE KEY ( FILE = 'C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\MSSQL\DATA\cert-backup-key.pvk', ENCRYPTION BY PASSWORD = 'U/fpGtmzGCYBi8A2+0/9qcRQRK2zmG/aOn939ZnKi/0=');
  3. Enregistrez le fichier de sauvegarde de certificat dans votre compartiment de certificat Amazon S3.

  4. Enregistrez le fichier de sauvegarde de clé privée dans votre compartiment de certificat S3, avec la balise suivante dans les métadonnées du fichier :

    • Clé : x-amz-meta-rds-tde-pwd

    • Valeur : valeur CiphertextBlob issue de la génération de la clé de données, comme dans l'exemple suivant.

      AQIDAHimL2NEoAlOY6Bn7LJfnxi/OZe9kTQo/XQXduug1rmerwGiL7g5ux4av9GfZLxYTDATAAAAfjB8BgkqhkiG9w0B BwagbzBtAgEAMGgGCSqGSIb3DQEHATAeBglghkgBZQMEAS4wEQQMyCxLMi7GRZgKqD65AgEQgDtjvZLJo2cQ31Vetngzm2ybHDc3d2vI74SRUzZ 2RezQy3sAS6ZHrCjfnfn0c65bFdhsXxjSMnudIY7AKw==

La procédure suivante restaure un certificat TDE RDS for SQL Server sur une instance de base de données sur site. Vous copiez et restaurez le certificat TDE sur votre instance de base de données de destination à l'aide de la sauvegarde du certificat, du fichier de clé privée correspondant et de la clé de données. Le certificat restauré est chiffré par la clé principale de base de données du nouveau serveur.

Pour restaurer un certificat TDE

  1. Copiez le fichier de sauvegarde du certificat TDE et le fichier de clé privée à partir d’Amazon S3 vers l'instance de destination.

  2. Utilisez votre clé KMS pour déchiffrer le texte chiffré en sortie afin de récupérer le texte brut de la clé de données. Le texte chiffré se trouve dans les métadonnées S3 du fichier de sauvegarde de la clé privée.

    aws kms decrypt \ --key-id my_KMS_key_ID \ --ciphertext-blob fileb://exampleCiphertextFile | base64 -d \ --output text \ --query Plaintext

    Vous utilisez la sortie en texte brut à l'étape suivante comme mot de passe de clé privée.

  3. Utilisez la commande SQL suivante pour restaurer votre certificat TDE.

    CREATE CERTIFICATE myOnPremTDEcertificate FROM FILE='D:\tde-cert-backup.cer' WITH PRIVATE KEY (FILE = N'D:\tde-cert-key.pvk', DECRYPTION BY PASSWORD = 'plain_text_output');

Pour plus d'informations sur le déchiffrement KMS, consultez decrypt dans la section KMS du manuel AWS CLI Command Reference.

Une fois le certificat TDE restauré sur l'instance de base de données de destination, vous pouvez restaurer des bases de données chiffrées avec ce certificat.

Note

Vous pouvez utiliser le même certificat TDE pour chiffrer plusieurs bases de données SQL Server sur l'instance de base de données source. Pour migrer plusieurs bases de données vers une instance de destination, copiez une seule fois le certificat TDE qui leur est associé sur l'instance de destination.

Désactivation de TDE pour RDS for SQL Server

Pour désactiver TDE pour une instance de base de données RDS for SQL Server, commencez par vérifier qu'il ne reste pas d'objets chiffrés sur l'instance de base de données. Pour ce faire, déchiffrez les objets ou supprimez-les. Si un objet chiffré existe sur l'instance de base de données, vous ne pouvez pas désactiver TDE pour celle-ci. Quand vous utilisez la console pour supprimer l'option TDE d'un groupe d'options, la console indique qu'elle est en cours de traitement. En outre, un événement d'erreur est créé si le groupe d'options est associé à une instance de base de données ou un instantané de bases de données chiffré.

L'exemple suivant supprime le chiffrement TDE d'une base de données appelée customerDatabase.

------------- Removing TDE ---------------- USE [customerDatabase] GO -- Turn off encryption of the database ALTER DATABASE [customerDatabase] SET ENCRYPTION OFF GO -- Wait until the encryption state of the database becomes 1. The state is 5 (Decryption in progress) for a while SELECT db_name(database_id) as DatabaseName, * FROM sys.dm_database_encryption_keys GO -- Drop the DEK used for encryption DROP DATABASE ENCRYPTION KEY GO -- Alter to SIMPLE Recovery mode so that your encrypted log gets truncated USE [master] GO ALTER DATABASE [customerDatabase] SET RECOVERY SIMPLE GO

Lorsque tous les objets sont déchiffrés, vous disposez de deux options :

  1. Vous pouvez modifier l'instance de base de données pour l'associer à un groupe d'options sans l'option TDE.

  2. Vous pouvez supprimer l'option TDE du groupe d'options.