Partager via


Tutoriel : Bien démarrer dans l’utilisation d’Always Encrypted avec enclaves sécurisées dans SQL Server et attestation avec SGH

S’applique à : SQL Server 2019 (15.x) et versions ultérieures - Windows uniquement

Ce tutoriel explique comment commencer à utiliser Always Encrypted avec des enclaves sécurisées dans SQL Server à l’aide du service HGS (Host Guardian Service) pour l’attestation d’enclave. Il vous montre comment :

  • Comment créer un environnement de base pour tester et évaluer Always Encrypted avec enclaves sécurisées avec HGS configuré pour l’attestation d’enclave.
  • Chiffrer des données sur place et émettre des requêtes confidentielles complexes sur des colonnes chiffrées en utilisant SQL Server Management Studio (SSMS).

Si vous souhaitez apprendre à configurer Always Encrypted avec enclaves sécurisées sans attestation, consultez tutoriel : Prise en main d’Always Encrypted avec enclaves sécurisées dans SQL Server.

Prerequisites

Pour bien démarrer avec Always Encrypted avec enclaves sécurisées, vous avez besoin d’au moins deux ordinateurs (qui peuvent être des machines virtuelles) :

  • L’ordinateur SQL Server pour héberger SQL Server et SSMS.
  • L’ordinateur SGH pour exécuter le Service Guardian hôte, qui est nécessaire pour l’attestation d’enclave.

Configuration requise de l’ordinateur SQL Server

  • SQL Server 2019 (15.x) ou version ultérieure.
  • Windows 10 1809 (ou version ultérieure) – Édition Entreprise, Windows 11 (ou version ultérieure) – Édition Entreprise, Windows Server 2019 (ou version ultérieure) – Édition Datacenter Les autres éditions de Windows 10/11 et de Windows Server ne prennent pas en charge l’attestation SGH.
  • Prise en charge du processeur pour les technologies de virtualisation :
    • Intel VT-x avec Extended Page Tables.
    • AMD-V avec Rapid Virtualization Indexing.
    • Si vous exécutez SQL Server dans une machine virtuelle :
  • La dernière version de SQL Server Management Studio (SSMS). Vous pouvez aussi installer SSMS sur un autre ordinateur.

Avertissement

Dans les environnements de production, l’exécution de SSMS et d’autres outils de gestion de clés sur l’ordinateur SQL Server peut empêcher de profiter des avantages d’Always Encrypted en matière de sécurité. Il est en général recommandé d’exécuter ces outils sur un autre ordinateur. Pour plus d’informations, consultez Considérations en matière de sécurité pour la gestion des clés.

Configuration requise de l’ordinateur SGH

  • Windows Server 2019 Édition Standard ou Datacenter
  • 2 UC
  • 8 Go de RAM
  • Stockage de 100 Go

Note

L’ordinateur SGH ne doit pas être joint à un domaine avant de commencer.

Étape 1 : Configurer l’ordinateur SGH

Dans cette étape, vous allez configurer l’ordinateur SGH pour exécuter le Service Guardian hôte qui prend en charge l’attestation de clé d’hôte.

  1. Connectez-vous à l’ordinateur SGH en tant qu’administrateur (administrateur local), ouvrez une console Windows PowerShell avec élévation de privilèges et ajoutez le rôle de Service Guardian hôte en exécutant la commande suivante :

    Install-WindowsFeature -Name HostGuardianServiceRole -IncludeManagementTools -Restart
    
  2. Une fois l’ordinateur SGH redémarré, connectez-vous à nouveau avec votre compte d’administrateur, ouvrez une console Windows PowerShell avec élévation de privilèges et exécutez les commandes suivantes pour installer le service Guardian hôte et configurer son domaine. Le mot de passe que vous spécifiez ici s’applique uniquement au mode de réparation des services d’annuaire pour Active Directory ; il ne modifie pas le mot de passe de connexion de votre compte d’administrateur. Vous pouvez spécifier le nom de domaine de votre choix pour - HgsDomainName.

    $adminPassword = ConvertTo-SecureString -AsPlainText '<password>' -Force
    Install-HgsServer -HgsDomainName 'bastion.local' -SafeModeAdministratorPassword $adminPassword -Restart
    
  3. Une fois l’ordinateur redémarré, connectez-vous avec votre compte d’administrateur (qui est désormais également administrateur de domaine). Ouvrez une console Windows PowerShell avec élévation de privilèges et configurez l’attestation de clé hôte pour votre instance HGS.

    Initialize-HgsAttestation -HgsServiceName 'hgs' -TrustHostKey  
    
  4. Recherchez l’adresse IP de l’ordinateur SGH en exécutant la commande suivante. Enregistrez cette adresse IP pour les étapes suivantes.

    Get-NetIPAddress  
    

Note

Sinon, si vous préférez référencer votre ordinateur SGH avec un nom DNS, vous pouvez configurer un redirecteur sur les serveurs DNS de votre entreprise vers le nouveau contrôleur de domaine SGH.

Étape 2 : Configurer l’ordinateur SQL Server comme hôte Service Guardian

Dans cette étape, vous allez configurer l’ordinateur SQL Server comme hôte Service Guardian inscrit auprès de SGH à l’aide de l’attestation de clé d’hôte.

Avertissement

L’attestation de clé d’hôte est considérée comme un mode d’attestation plus faible. Utilisez si possible l’attestation TPM pour les environnements de production. Pour plus d’informations, consultez Modes d’attestation.

  1. Connectez-vous à votre ordinateur SQL Server en tant qu’administrateur, ouvrez une console Windows PowerShell avec élévation de privilèges et récupérez le nom de votre ordinateur en accédant à la variable computername.

    $env:computername 
    
  2. Installez la fonctionnalité de l’hôte Service Guardian, qui va également installer Hyper-V (si ce n’est pas déjà fait).

    Enable-WindowsOptionalFeature -Online -FeatureName HostGuardian -All
    
  3. Quand vous y êtes invité, redémarrez votre ordinateur SQL Server pour terminer l’installation d’Hyper-V.

  4. Si votre ordinateur SQL Server est une machine virtuelle, une machine physique qui ne prend pas en charge le démarrage sécurisé UEFI ou une machine physique non équipée d’IOMMU, vous devez supprimer la condition VBS pour les fonctionnalités de sécurité de la plateforme.

    1. Supprimez l’exigence de démarrage sécurisé et d’IOMMU en exécutant la commande suivante sur votre ordinateur SQL Server dans une console PowerShell avec élévation de privilèges :

      Set-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Control\DeviceGuard -Name RequirePlatformSecurityFeatures -Value 0
      
    2. Redémarrez l’ordinateur SQL Server pour que VBS présente les conditions réduites en ligne.

      Restart-Computer
      
  5. Reconnectez-vous à l’ordinateur SQL Server en tant qu’administrateur, ouvrez une console Windows PowerShell avec élévation de privilèges, générez une clé d’hôte unique, puis exportez la clé publique qui en résulte dans un fichier.

    Set-HgsClientHostKey 
    Get-HgsClientHostKey -Path $HOME\Desktop\hostkey.cer
    
  6. Copiez manuellement le fichier de clé d’hôte généré à l’étape précédente sur l’ordinateur SGH. Les instructions ci-dessous considèrent que votre nom de fichier est hostkey.cer et que vous l’avez copié sur le Bureau de l’ordinateur SGH.

  7. Sur l’ordinateur SGH, ouvrez une console Windows PowerShell avec élévation de privilèges et inscrivez la clé d’hôte de votre ordinateur SQL Server auprès de SGH :

    Add-HgsAttestationHostKey -Name <your SQL Server computer name> -Path $HOME\Desktop\hostkey.cer
    
  8. Sur l’ordinateur SQL Server, exécutez la commande suivante dans une console Windows PowerShell avec élévation de privilèges pour indiquer à l’ordinateur SQL Server où attester. Veillez à spécifier l’adresse IP ou le nom DNS de votre ordinateur SGH aux deux emplacements d’adresse.

    # use http, and not https
    Set-HgsClientConfiguration -AttestationServerUrl http://<IP address or DNS name>/Attestation -KeyProtectionServerUrl http://<IP address or DNS name>/KeyProtection/  
    

Le résultat de la commande ci-dessus doit indiquer AttestationStatus = Passed.

Si vous recevez une HostUnreachable erreur, cela signifie que votre ordinateur SQL Server ne peut pas communiquer avec HGS. Vérifiez que vous pouvez effectuer un test ping sur l’ordinateur SGH.

Une UnauthorizedHost erreur indique que la clé publique n’a pas été inscrite auprès du serveur SGH. Répétez les étapes 5 et 6 pour résoudre l’erreur.

En cas d’échec, exécutez et répétez Remove-HgsClientHostKey les étapes 4-7.

Étape 3 : Activer Always Encrypted avec enclaves sécurisées dans SQL Server

Dans cette étape, vous allez activer la fonctionnalité Always Encrypted avec enclaves dans votre instance de SQL Server.

  1. À l’aide de SSMS, connectez-vous à votre instance de SQL Server en tant que sysadmin sans Always Encrypted activé pour la connexion de base de données.

    1. Démarrer SSMS.

    2. Dans la boîte de dialogue Se connecter au serveur, spécifiez le nom de votre serveur, sélectionnez une méthode d’authentification et spécifiez vos informations d’identification.

    3. Sélectionnez Options >>, puis l’onglet Always Encrypted.

    4. Assurez-vous que la case Activer Always Encrypted (chiffrement de colonne) n’est pas cochée.

      Screenshot of the SSMS connection option for Always Encrypted disabled.

    5. Sélectionnez Se connecter.

  2. Ouvrez une nouvelle fenêtre de requête et exécutez l’instruction ci-dessous pour définir le type d’enclave sécurisé sur la sécurité basée sur la virtualisation (VBS).

    EXEC sys.sp_configure 'column encryption enclave type', 1;
    RECONFIGURE;
    
  3. Redémarrez votre instance SQL Server pour que la modification précédente prenne effet. Vous pouvez redémarrer l’instance dans SSMS en cliquant dessus avec le bouton droit dans l’Explorateur d’objets et en sélectionnant Redémarrer. Une fois que l’instance a redémarré, connectez-vous à nouveau.

  4. Vérifiez que l’enclave sécurisée est maintenant chargée en exécutant la requête suivante :

    SELECT [name], [value], [value_in_use] FROM sys.configurations
    WHERE [name] = 'column encryption enclave type';
    

    La requête doit retourner le résultat suivant :

    nom value value_in_use
    column encryption enclave type 1 1

Étape 4 : Créer un exemple de base de données

Dans cette étape, vous allez créer une base de données avec des exemples de données, qui vous allez par la suite chiffrer.

  1. À l’aide de l’instance SSMS dans l’étape précédente, exécutez l’instruction ci-dessous dans une fenêtre de requête pour créer une nouvelle base de données, nommée ContosoHR.

    CREATE DATABASE [ContosoHR];
    
  2. Créez une nouvelle table nommée Employés.

    USE [ContosoHR];
    GO
    
    CREATE SCHEMA [HR];
    GO
    
    CREATE TABLE [HR].[Employees]
    (
        [EmployeeID] [int] IDENTITY(1,1) NOT NULL,
        [SSN] [char](11) NOT NULL,
        [FirstName] [nvarchar](50) NOT NULL,
        [LastName] [nvarchar](50) NOT NULL,
        [Salary] [money] NOT NULL
    ) ON [PRIMARY];
    
  3. Ajoutez quelques enregistrements d’employés à la table Employés.

    USE [ContosoHR];
    GO
    
    INSERT INTO [HR].[Employees]
            ([SSN]
            ,[FirstName]
            ,[LastName]
            ,[Salary])
        VALUES
            ('795-73-9838'
            , N'Catherine'
            , N'Abel'
            , $31692);
    
    INSERT INTO [HR].[Employees]
            ([SSN]
            ,[FirstName]
            ,[LastName]
            ,[Salary])
        VALUES
            ('990-00-6818'
            , N'Kim'
            , N'Abercrombie'
            , $55415);
    

Étape 5 Provisionner des clés prenant en charge les enclaves

Dans cette étape, vous allez créer une clé principale de colonne et une clé de chiffrement de colonne qui permettent les calculs d’enclave.

  1. À l’aide de l’instance SSMS dans l’étape précédente, dans Explorateur d’objets, développez votre base de données et accédez à Sécurité>Clés Always Encrypted.

  2. Provisionnez une nouvelle clé principale de colonne prenant en charge les enclaves :

    1. Cliquez avec le bouton droit sur Clés Always Encrypted et sélectionnez Nouvelle clé principale de colonne... .

    2. Sélectionnez le nom de votre clé principale de colonne : CMK1.

    3. Veillez à sélectionnez Magasin de certificats Windows (utilisateur actuel ou ordinateur local) ou Azure Key Vault.

    4. Sélectionnez Autoriser les calculs d’enclave.

    5. Si vous avez sélectionné Azure Key Vault, connectez-vous à Azure et sélectionnez votre coffre de clés. Pour plus d’informations sur la création d’un coffre de clés pour Always Encrypted, consultez Gérer vos coffres de clés à partir du portail Azure.

    6. Sélectionnez votre certificat ou votre clé Valeur de clé Azure, ou bien sélectionnez le bouton Générer un certificat pour en créer un.

    7. Cliquez sur OK.

      Screenshot of the allow enclave computations selection in SSMS when creating a new column master key.

  3. Créez une clé de chiffrement de colonne prenant en charge les enclaves :

    1. Cliquez avec le bouton droit sur Clés Always Encrypted et sélectionnez Nouvelle clé de chiffrement de colonne.
    2. Entrez un nom pour la nouvelle clé de chiffrement de colonne : CEK1.
    3. Dans le menu déroulant Clé principale de colonne, sélectionnez la clé principale de colonne que vous avez créée aux étapes précédentes.
    4. Cliquez sur OK.

Étape 6 : Chiffrer des colonnes sur place

Dans cette étape, vous allez chiffrer les données stockées dans les colonnes SSN et Salaire à l’intérieur de l’enclave côté serveur, puis vous testerez une requête SELECT sur les données.

  1. Ouvrez une nouvelle instance SSMS et connectez-vous à votre instance SQL Server avec Always Encrypted activé pour la connexion de base de données.

    1. Démarrez une nouvelle instance SSMS.

    2. Dans la boîte de dialogue Se connecter au serveur, spécifiez le nom de votre serveur, sélectionnez une méthode d’authentification et spécifiez vos informations d’identification.

    3. Sélectionnez Options >>, puis l’onglet Always Encrypted.

    4. Cochez la case Activer Always Encrypted (chiffrement de colonne).

    5. Sélectionnez Activer les enclaves sécurisées. (Cette étape s’applique à SSMS 19 ou version ultérieure.)

    6. Définissez le protocole sur le service Guardian hôte. (Cette étape s’applique à SSMS 19 ou version ultérieure.)

    7. Spécifiez votre URL d’attestation d’enclave (par exemple, http:// hgs.bastion.local/Attestation).

      Screenshot of the connect to server Always Encrypted tab with attestation using SSMS.

    8. Sélectionnez Connecter.

    9. Si vous êtes invité à activer les requêtes Paramétrage pour Always Encrypted, sélectionnez Activer.

  2. En utilisant la même instance SSMS (avec Always Encrypted activé), ouvrez une nouvelle fenêtre de requête et chiffrez les colonnes SSN et Salaire en exécutant les requêtes ci-dessous.

    USE [ContosoHR];
    GO
    
    ALTER TABLE [HR].[Employees]
    ALTER COLUMN [SSN] [char] (11) COLLATE Latin1_General_BIN2
    ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK1], ENCRYPTION_TYPE = Randomized, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NOT NULL
    WITH
    (ONLINE = ON);
    
    ALTER TABLE [HR].[Employees]
    ALTER COLUMN [Salary] [money]
    ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK1], ENCRYPTION_TYPE = Randomized, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NOT NULL
    WITH
    (ONLINE = ON);
    
    ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE;
    

    Note

    Notez l’instruction ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE destinée à effacer le cache du plan de requête de la base de données dans le script ci-dessus. Une fois que vous avez modifié la table, vous devez effacer les plans pour l’ensemble des lots et des procédures stockées qui accèdent à la table, afin d’actualiser les informations de chiffrement des paramètres.

  3. Pour vérifier que les colonnes SSN et Salaire sont maintenant chiffrées, ouvrez une nouvelle fenêtre de requête dans l’instance SSMS sans Always Encrypted activé pour la connexion de base de données et exécutez l’instruction ci-dessous. La fenêtre de requête doit retourner des valeurs chiffrées dans les colonnes SSN et Salaire. Si vous exécutez la même requête à l’aide de l’instance SSMS avec Always Encrypted activé, vous devez voir les données déchiffrées.

    SELECT * FROM [HR].[Employees];
    

Étape 7 : Exécuter des requêtes complexes sur les colonnes chiffrées

À présent, vous pouvez exécuter des requêtes complexes sur les colonnes chiffrées. Un traitement de requête se produit à l’intérieur de votre enclave côté serveur.

  1. Dans l’instance SSMS avec Always Encrypted activé, vérifiez que Paramétrage pour Always Encrypted est également activé.

    1. Sélectionnez Outils dans le menu principal de SSMS.
    2. Sélectionnez Options... .
    3. Accédez à Exécution de la requête>SQL Server>Avancé.
    4. Vérifiez que la case Activer Paramétrage pour Always Encrypted est cochée.
    5. Cliquez sur OK.
  2. Ouvrez une nouvelle fenêtre de requête, collez et exécutez la requête ci-dessous. La requête doit retourner des valeurs de texte en clair et des lignes correspondant aux critères de recherche spécifiés.

    DECLARE @SSNPattern [char](11) = '%6818';
    DECLARE @MinSalary [money] = $1000;
    SELECT * FROM [HR].[Employees]
    WHERE SSN LIKE @SSNPattern AND [Salary] >= @MinSalary;
    
  3. Réessayez la même requête dans l’instance SSMS où Always Encrypted n’est pas activé et remarquez l’échec qui se produit.

Étapes suivantes

À l’issue de ce tutoriel, vous pouvez accéder à l’un des tutoriels suivants :

Voir aussi