Activer le chiffrement transparent des données sur une SQL Managed Instance activée par Azure Arc (préversion)

Cet article explique comment activer et désactiver le chiffrement transparent des données (TDE) au repos sur une instance Azure SQL Managed Instance activée par Azure Arc. Dans cet article, le terme instance gérée fait référence à un déploiement de SQL Managed Instance activée par Azure Arc et l’activation/désactivation du TDE s’applique à toutes les bases de données exécutées sur une instance gérée.

Pour plus d’informations sur le TDE, consultez Chiffrement transparent des données.

L’activation de la fonctionnalité TDE effectue les opérations suivantes :

  • Toutes les bases de données existantes sont désormais chiffrées automatiquement.
  • Toutes les bases de données nouvellement créées sont automatiquement chiffrées.

Remarque

En tant que fonctionnalité en préversion, la technologie présentée dans cet article est soumise aux conditions d’utilisation supplémentaires des préversions de Microsoft Azure.

Les dernières mises à jour sont disponibles dans les notes de publication.

Prérequis

Avant de continuer dans cet article, vous devez disposer d’une instance SQL Managed Instance activée par une ressource Azure Arc et vous y connecter.

Limites

Les limitations suivantes s’appliquent lorsque vous activez le TDE automatique :

  • Seul le niveau usage général est pris en charge.
  • Les groupes de basculement ne sont pas pris en charge.

Créer une instance gérée avec le TDE activé (Azure CLI)

L’exemple suivant crée une SQL Managed Instance activée par Azure Arc avec un réplica, TDE activé :

az sql mi-arc create --name sqlmi-tde --k8s-namespace arc --tde-mode ServiceManaged --use-k8s

Activer le TDE sur l’instance gérée

Lorsque le TDE est activé sur la SQL Managed Instance avec Arc, le service de données effectue automatiquement les tâches suivantes :

  1. Ajouter la clé principale de base de données gérée par le service dans la base de données master.
  2. Ajouter le protecteur de certificat géré par le service.
  3. Ajouter les clés de chiffrement de base de données associées sur toutes les bases de données de l’instance gérée.
  4. Activer le chiffrement sur toutes les bases de données de l’instance gérée.

Vous pouvez définir SQL Managed Instance activée par le TDE Azure Arc dans l’un des deux modes suivants :

  • Géré par le service
  • Gérée par le client

En mode géré par le service, le TDE exige que l’instance gérée utilise une clé principale de base de données gérée par le service, ainsi que le certificat de serveur géré par le service. Ces informations d’identification sont créées automatiquement lorsque le TDE géré par le service est activé.

En mode géré par le client, le TDE utilise une clé principale de base de données gérée par le service et utilise des clés que vous fournissez pour le certificat de serveur. Pour configurer le mode géré par le client :

  1. Création d'un certificat
  2. Stockez le certificat en tant que secret dans le même espace de noms Kubernetes que l’instance.

Activer

La section suivante explique comment activer le TDE en mode géré par le service.

Pour activer le TDE en mode géré par le service, exécutez la commande suivante :

az sql mi-arc update --tde-mode ServiceManaged

Désactiver le TDE sur l’instance gérée

Lorsque le TDE est désactivé sur la SQL Managed Instance avec Arc, le service de données effectue automatiquement les tâches suivantes :

  1. Désactiver le chiffrement sur toutes les bases de données de l’instance gérée.
  2. Supprimer les clés de chiffrement associées sur toutes les bases de données de l’instance gérée.
  3. Supprimer le protecteur de certificat géré par le service.
  4. Supprimer la clé principale de base de données gérée par le service dans la base de données master.

Pour désactiver TDE :

az sql mi-arc update --tde-mode Disabled

Sauvegarder des informations d’identification de TDE

Quand vous sauvegardez des informations d’identification provenant de l’instance managée, ces informations d’identification sont stockées dans le conteneur. Pour stocker les informations d’identification sur un volume persistant, spécifiez le chemin de montage dans le conteneur. Par exemple : var/opt/mssql/data. L’exemple suivant sauvegarde un certificat provenant de l’instance managée :

Remarque

Si la commande kubectl cp est exécutée à partir de Windows, elle peut échouer quand des chemins Windows absolus sont utilisés. Utilisez des chemins relatifs ou les commandes spécifiées ci-dessous.

  1. Sauvegardez le certificat du conteneur dans /var/opt/mssql/data.

    USE master;
    GO
    
    BACKUP CERTIFICATE <cert-name> TO FILE = '<cert-path>'
    WITH PRIVATE KEY ( FILE = '<private-key-path>',
    ENCRYPTION BY PASSWORD = '<UseStrongPasswordHere>');
    

    Exemple :

    USE master;
    GO
    
    BACKUP CERTIFICATE MyServerCert TO FILE = '/var/opt/mssql/data/servercert.crt'
    WITH PRIVATE KEY ( FILE = '/var/opt/mssql/data/servercert.key',
    ENCRYPTION BY PASSWORD = '<UseStrongPasswordHere>');
    
  2. Copiez le certificat du conteneur vers votre système de fichiers.

    kubectl exec -n <namespace> -c arc-sqlmi <pod-name> -- cat <pod-certificate-path> > <local-certificate-path>
    

    Exemple :

    kubectl exec -n arc-ns -c arc-sqlmi sql-0 -- cat /var/opt/mssql/data/servercert.crt > $HOME\sqlcerts\servercert.crt
    

  1. Copiez la clé privée du conteneur vers votre système de fichiers.

     kubectl exec -n <namespace> -c arc-sqlmi <pod-name> -- cat <pod-private-key-path> > <local-private-key-path>
    

    Exemple :

    kubectl exec -n arc-ns -c arc-sqlmi sql-0 -- cat /var/opt/mssql/data/servercert.key > $HOME\sqlcerts\servercert.key
    

  1. Supprimez le certificat et la clé privée du conteneur.

    kubectl exec -it --namespace <namespace> --container arc-sqlmi <pod-name> -- bash -c "rm <certificate-path> <private-key-path>
    

    Exemple :

    kubectl exec -it --namespace arc-ns --container arc-sqlmi sql-0 -- bash -c "rm /var/opt/mssql/data/servercert.crt /var/opt/mssql/data/servercert.key"
    

Restaurer des informations d’identification de TDE sur une instance gérée

De façon similaire à ce qui est décrit plus haut, pour restaurer des informations d’identification, copiez-les dans le conteneur et exécutez après cela le code T-SQL correspondant.

Remarque

Si la commande kubectl cp est exécutée à partir de Windows, elle peut échouer quand des chemins Windows absolus sont utilisés. Utilisez des chemins relatifs ou les commandes spécifiées ci-dessous. Pour restaurer les sauvegardes de base de données effectuées avant l’activation du TDE, vous devez désactiver le TDE sur la SQL Managed Instance, restaurer la sauvegarde de la base de données et réactiver le TDE.

  1. Copiez le certificat de votre système de fichiers vers le conteneur.

    type <local-certificate-path> | kubectl exec -i -n <namespace> -c arc-sqlmi <pod-name> -- tee <pod-certificate-path>
    

    Exemple :

    type $HOME\sqlcerts\servercert.crt | kubectl exec -i -n arc-ns -c arc-sqlmi sql-0 -- tee /var/opt/mssql/data/servercert.crt
    

  1. Copiez la clé privée de votre système de fichiers vers le conteneur.

    type <local-private-key-path> | kubectl exec -i -n <namespace> -c arc-sqlmi <pod-name> -- tee <pod-private-key-path>
    

    Exemple :

    type $HOME\sqlcerts\servercert.key | kubectl exec -i -n arc-ns -c arc-sqlmi sql-0 -- tee /var/opt/mssql/data/servercert.key
    
  2. Créez le certificat en utilisant les chemins de fichiers à partir de /var/opt/mssql/data.

    USE master;
    GO
    
    CREATE CERTIFICATE <certicate-name>
    FROM FILE = '<certificate-path>'
    WITH PRIVATE KEY ( FILE = '<private-key-path>',
        DECRYPTION BY PASSWORD = '<UseStrongPasswordHere>' );
    

    Exemple :

    USE master;
    GO
    
    CREATE CERTIFICATE MyServerCertRestored
    FROM FILE = '/var/opt/mssql/data/servercert.crt'
    WITH PRIVATE KEY ( FILE = '/var/opt/mssql/data/servercert.key',
        DECRYPTION BY PASSWORD = '<UseStrongPasswordHere>' );
    
  3. Supprimez le certificat et la clé privée du conteneur.

    kubectl exec -it --namespace <namespace> --container arc-sqlmi <pod-name> -- bash -c "rm <certificate-path> <private-key-path>
    

    Exemple :

    kubectl exec -it --namespace arc-ns --container arc-sqlmi sql-0 -- bash -c "rm /var/opt/mssql/data/servercert.crt /var/opt/mssql/data/servercert.key"
    

Chiffrement transparent des données