Transparent Data Encryption avec Azure Key Vault

Ce document décrit la procédure d’exploitation pour configurer le cryptage transparent des données avec Azure Key Vault.

Le chiffrement est un processus visant à rendre des données inintelligibles à l’aide d’une clé ou d’un mot de passe. Les données sont alors inutiles en l’absence du mot de passe ou de la clé de déchiffrement correspondante. Le chiffrement ne résout pas les problèmes de contrôle d’accès. Toutefois, il améliore la sécurité en limitant les pertes de données même si les contrôles d’accès sont contournés.

L’objectif de ce document est de montrer comment crypter la base de données afin d’éviter de restaurer cette dernière sur n’importe quelle autre instance sans avoir la clé de chiffrement. Un backup de cette clé sera ensuite stocké dans un coffre-fort sécurisé : La perte de clé empêchera toute restauration future.

La clé de chiffrement sous forme de clé asymétrique dans le cas présent sera alors stockée dans un fournisseur EKM (Azure Key Vault).

 

1. Hiérarchie de chiffrement

 

2. Configurer Azure Active Directory service principal

La première étape consiste à enregistrer l’application SQL Server dans Azure Active Directory, pour attribuer à Azure Key Vault les autorisations d’accès à SQL Server.

Pour cela, on a besoin d’un compte de service principal dans Azure Active Directory.

Pour pouvoir créer ce compte de service, on a besoin du rôle Application administrator.

Dans le portail Azure, et dans le service Azure Active Directory, et dans le menu App registrations, cliquer sur New registration.

Donnez un nom à l’application et cliquez sur Register.

Copiez Client ID et la Client Secret pour une étape ultérieure, où ils seront utilisés pour accorder au Key Vault l’accès à SQL Server.

 

3. Créer un Key Vault et une Key

Le coffre de clés (Key Vault) et la clé (Key) créés ici seront utilisés par le moteur de base de données SQL Server pour la protection des clés de chiffrement.

L’abonnement dans lequel le coffre de clés est créé doit se trouver dans le même annuaire Azure Active Directory par défaut que celui où le principal du service Azure Active Directory a été créé.

Pour créer un Key Vault, on peut le faire avec le portail Azure comme on peut le faire avec PowerShell

 

 

 

 

 

 

 

 

 

4. Accorder au Compte de service principal Azure Active Directory des autorisations d’accès au Key Vault

 

 

 

 

 

 

 

 

5. Créer une Clé (Key)

Vous pouvez créer une clé de chiffrement dans Azure Key Vault, et la protéger par logiciel ou par HSM. Dans notre cas, nous allons créer une clé à protection logicielle à l’aide de l’Add-AzureKeyVaultKey cmdlet .

 

6. Installer le connecteur SQL Server

Quand on installe le connecteur SQL Server, le fichier Microsoft.AzureKeyVaultService.EKM.dll est installé sur l’ordinateur. Il s’agit de la DLL du fournisseur EKM de services chiffrement qui doit être inscrite auprès de SQL Server à l’aide de l’instruction CREATE CRYPTOGRAPHIC PROVIDER.

 

 

 

 

 

 

 

 

 

 

 

 

7. Configurer SQL Server

7.1. Activer EKM Provider

Par défaut, le EKM Provider est désactivé. Pour activer cette fonctionnalité, utilisez la commande sp_configure pour l’activer. Il faut noter que cette fonctionnalité n’est pas disponible dans toutes les éditions de Microsoft SQL Server.

-- Enable advanced options.
USE master;
GO sp_configure 'show advanced options', 1;
GO  RECONFIGURE;
GO
-- Enable EKM provider  sp_configure 'EKM provider enabled', 1;
GO  RECONFIGURE;

 

7.1.2. Inscrire (ou créer) le connecteur SQL Server en tant que fournisseur EKM avec SQL Server

CREATE CRYPTOGRAPHIC PROVIDER CGP_PRD_KVT1_EKM_Prov
FROM FILE = 'C:\Program Files\SQL Server Connector for Microsoft Azure Key Vault\Microsoft.AzureKeyVaultService.EKM.dll';
GO

 

7.1.3. Configurer SQL Server credential pour un login SQL Server afin d’utiliser le Key Vault

Un credential doit être ajouté à chaque login SQL appelé à effectuer des chiffrements à l’aide d’une clé à partir du Key Vault. Cela peut inclure :

  • Un login SQL Server qui utilisera le Key Vault afin de configurer le chiffrement SQL Server .
  • D’autres login SQL Server qui peuvent activer le chiffrement TDE (Transparent Data Encryption), ou d’autres fonctionnalités de chiffrement SQL Server .
USE master;
CREATE CREDENTIAL sysadmin_ekm_cred
WITH IDENTITY = 'XXX-PRD-KVT1', -- for public Azure
SECRET = '26DE76BAxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxvaD*E::'
FOR CRYPTOGRAPHIC PROVIDER CGP_PRD_KVT1_EKM_Prov;
-- Add the credential to the SQL Server administrator's domain login
ALTER LOGIN [xxxx.com\axxdmin_ssaci]
ADD CREDENTIAL sysadmin_ekm_cred;

 

7.1.4. Ouvrir la clé Azure Key Vault dans SQL Server

Pour ouvrir la clé asymétrique (XXX-PRD-KEY-SQL01) créée dans la partie 8 dans SQL Server, il faut exécuter le script ci-dessous :

USE [MASTER]
-- Use the EKM to open the asymmetric KEK that was previously created in the Key Vault
CREATE ASYMMETRIC KEY XXX_PRD_KEY1 -- Give the asymmetric KEK a name in SQL Server
FROM PROVIDER XXX_PRD_KVT1_EKM_Prov WITH
PROVIDER_KEY_NAME = 'XXX-PRD-KEY-SQL01', -- The name of the asym-metric KEK in Azure Key Vault
CREATION_DISPOSITION = OPEN_EXISTING -- To indicate
GO

 

7.1.5. Créer un login SQL pour le moteur de base de données et le TDE

USE master;
CREATE LOGIN TDE_Login
FROM ASYMMETRIC KEY XXX_PRD_KEY1;
GO 
-- Alter the TDE Login to add the credential for use by the -- Database Engine to access the key vault
ALTER LOGIN TDE_Login ADD CREDENTIAL sysadmin_ekm_cred ;
GO

 

7.1.6. Créer la clé de chiffrement de la base de données (DEK)

La clé DEK chiffre les fichiers de données et de transaction de la base de données dans l’instance SQL, puis sera chiffrée à l’aide de la clé asymétrique Azure Key Vault.

USE DB1;
GO CREATE DATABASE ENCRYPTION KEY
WITH ALGORITHM = AES_256
ENCRYPTION BY SERVER ASYMMETRIC KEY CGP_PRD_KEY1;
GO

 

7.1.7. Activer le chiffrement TDE dans la base de données

-- Alter the database to enable transparent data encryption.
ALTER DATABASE DB1 SET ENCRYPTION ON;
GO

 

8. Restaurer une base de données cryptée en TDE sur un autre serveur

Maintenant que notre base de données est cryptée en TDE dans l’instance d’origine, et si on essaye de restaurer un backup de notre base de données DB1 sur une autre instance, on aura le message d’erreur suivant, montrant que l’instance en question n’arrive pas à trouver la clé asymétrique.

TITLE: Microsoft SQL Server Management Studio
——————————
Failed to retrieve data for this request. (Microsoft.SqlServer.Management.Sdk.Sfc)
For help, click: https://go.microsoft.com/fwlink?ProdName=Microsoft%20SQL%20Server&LinkId=20476
——————————
ADDITIONAL INFORMATION:
An exception occurred while executing a Transact-SQL statement or batch. (Microsoft.SqlServer.ConnectionInfo)
——————————
Cannot find server asymmetric key with thumbprint ‘0xC195BEF62F98BB07DAE28B572DE199486933329D’. (Microsoft SQL Server, Error: 33111)
For help, click: http://go.microsoft.com/fwlink?ProdName=Microsoft%20SQL%20Server&ProdVer=13.00.5026&EvtSrc=MSSQLServer&EvtID=33111&LinkId=20476
——————————
BUTTONS:
OK

Pour pouvoir restaurer cette base de données dans la nouvelle instance et le nouveau serveur, il faut qu’on répète les actions suivantes sur ce nouveau serveur :

6. Installer le connecteur SQL Server

7. Configurer SQL Server

7.1. Activer EKM Provider

7.2. Inscrire (ou créer) le connecteur SQL Server en tant que fournisseur EKM avec SQL Server

7.3. Configurer SQL Server credential pour un login SQL Server afin d’utiliser le Key Vault

7.4. Ouvrir la clé Azure Key Vault dans SQL Server

7.5. Créer un login SQL pour le moteur de base de données et le TDE

7.6. Créer la clé de chiffrement de la base de données (DEK)