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 des 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 des enclaves sécurisées sans attestation, consultez Tutoriel : prise en main d’Always Encrypted avec des enclaves sécurisées dans SQL Server.
Prérequis
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 versions ultérieures.
- 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 :
- Dans Azure, utilisez une taille de machine virtuelle de deuxième génération (recommandé) ou une taille de machine virtuelle de première génération avec virtualisation imbriquée. Pour savoir quelles tailles de machines virtuelles de première génération prennent en charge la virtualisation imbriquée, consultez la documentation relative aux différentes tailles de machines virtuelles.
- Sur Hyper-V 2016 ou versions ultérieures (en dehors d’Azure), vérifiez que votre machine virtuelle est une machine virtuelle de deuxième génération (recommandé) ou une machine virtuelle de première génération avec virtualisation imbriquée. Pour plus d’informations, consultez Dois-je créer une machine virtuelle de première ou de deuxième génération dans Hyper-V ? et Configuration de la virtualisation imbriquée.
- Sur VMware vSphere 6.7 ou ultérieur, activez la prise en charge de la sécurité basée sur la virtualisation pour la machine virtuelle, comme le décrit la documentation VMware.
- D’autres hyperviseurs et clouds publics peuvent prendre en charge les fonctionnalités de virtualisation imbriquées qui permettent aussi l’utilisation d’Always Encrypted avec enclaves VBS. Consultez les instructions relatives à la compatibilité et à la configuration dans la documentation de votre solution de virtualisation.
- 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
Remarque
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.
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
Une fois que l’ordinateur SGH a redémarré, connectez-vous avec votre compte d’administrateur, ouvrez une console Windows PowerShell avec élévation de privilèges, puis 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
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 SGH.
Initialize-HgsAttestation -HgsServiceName 'hgs' -TrustHostKey
Recherchez l’adresse IP de l’ordinateur SGH en exécutant la commande suivante. Enregistrez cette adresse IP pour les étapes suivantes.
Get-NetIPAddress
Remarque
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.
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
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
Quand vous y êtes invité, redémarrez votre ordinateur SQL Server pour terminer l’installation d’Hyper-V.
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.
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
Redémarrez l’ordinateur SQL Server pour que VBS présente les conditions réduites en ligne.
Restart-Computer
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
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.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
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 obtenez une erreur HostUnreachable
, ça signifie que votre ordinateur SQL Server ne peut pas communiquer avec SGH. Vérifiez que vous pouvez effectuer un test ping sur l’ordinateur SGH.
Une erreur UnauthorizedHost
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 Remove-HgsClientHostKey
et répétez 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.
À 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.
Démarrer SSMS.
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.
Sélectionnez Options >>, puis l’onglet Always Encrypted.
Assurez-vous que la case Activer Always Encrypted (chiffrement de colonne) n’est pas cochée.
Sélectionnez Connecter.
Ouvrez une nouvelle fenêtre de requête et exécutez l’instruction ci-dessous pour définir le type d’enclave sécurisée sur la sécurité basée sur la virtualisation (VBS).
EXEC sys.sp_configure 'column encryption enclave type', 1; RECONFIGURE;
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.
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 :
name valeur 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.
À 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];
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];
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.
À 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.
Provisionnez une nouvelle clé principale de colonne prenant en charge les enclaves :
Cliquez avec le bouton droit sur Clés Always Encrypted et sélectionnez Nouvelle clé principale de colonne... .
Sélectionnez le nom de votre clé principale de colonne : CMK1.
Veillez à sélectionnez Magasin de certificats Windows (utilisateur actuel ou ordinateur local) ou Azure Key Vault.
Sélectionnez Autoriser les calculs d’enclave.
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.
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.
Cliquez sur OK.
Créez une clé de chiffrement de colonne prenant en charge les enclaves :
- Cliquez avec le bouton droit sur Clés Always Encrypted et sélectionnez Nouvelle clé de chiffrement de colonne.
- Entrez un nom pour la nouvelle clé de chiffrement de colonne : CEK1.
- 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.
- 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.
Ouvrez une nouvelle instance SSMS et connectez-vous à votre instance SQL Server avec Always Encrypted activé pour la connexion de base de données.
Démarrez une nouvelle instance SSMS.
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.
Sélectionnez Options >>, puis l’onglet Always Encrypted.
Cochez la case Activer Always Encrypted (chiffrement de colonne).
Sélectionnez Activer les enclaves sécurisées. (Cette étape s’applique à SSMS 19 ou version ultérieure.)
Définissez le Protocol sur Host Guardian Service. (Cette étape s’applique à SSMS 19 ou version ultérieure.)
Spécifiez votre URL d’attestation d’enclave (par exemple, http:// hgs.bastion.local/Attestation).
Sélectionnez Connecter.
Si vous êtes invité à activer les requêtes Paramétrage pour Always Encrypted, sélectionnez Activer.
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;
Remarque
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.
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.
Dans l’instance SSMS avec Always Encrypted activé, vérifiez que Paramétrage pour Always Encrypted est également activé.
- Sélectionnez Outils dans le menu principal de SSMS.
- Sélectionnez Options... .
- Accédez à Exécution de la requête>SQL Server>Avancé.
- Vérifiez que la case Activer Paramétrage pour Always Encrypted est cochée.
- Cliquez sur OK.
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;
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 :
- Tutoriel : Développer une application .NET en utilisant Always Encrypted avec enclaves sécurisées
- Tutoriel : Développer une application .NET Framework avec Always Encrypted avec enclaves sécurisées
- Tutoriel : Création et utilisation des index sur des colonnes prenant en charge les enclaves à l’aide d’un chiffrement aléatoire