Gestion de clés extensible à l'aide d'Azure Key Vault (SQL Server)

Le connecteur SQL Server pour Microsoft Azure Key Vault permet SQL Server chiffrement de tirer parti du service Azure Key Vault en tant que fournisseur EKM (Extensible Key Management) pour protéger ses clés de chiffrement.

Contenu de cette rubrique :

Utilisations de la gestion de clés extensible

Un organization peut utiliser le chiffrement SQL Server pour protéger les données sensibles. SQL Server chiffrement comprend le chiffrement transparent des données (TDE),le chiffrement au niveau des colonnes (CLE) et le chiffrement de sauvegarde. Dans tous ces cas, les données sont chiffrées à l'aide d'une clé de chiffrement de données symétrique. La clé de chiffrement de données symétrique est ensuite protégée en la chiffrant avec une hiérarchie de clés stockées dans SQL Server. L’architecture du fournisseur EKM permet également à SQL Server de protéger les clés de chiffrement des données à l’aide d’une clé asymétrique stockée en dehors de SQL Server dans un fournisseur de chiffrement externe. L'utilisation de l'architecture du fournisseur EKM ajoute une couche supplémentaire de sécurité et permet aux organisations de séparer la gestion des clés de celle des données.

Le connecteur SQL Server pour Azure Key Vault permet SQL Server tirer parti du service de coffre de clés évolutif, hautes performances et hautement disponible en tant que fournisseur EKM pour la protection des clés de chiffrement. Le service de coffre de clés peut être utilisé avec SQL Server installations sur Microsoft Azure Machines Virtuelles et pour les serveurs locaux. Le service de coffre de clés offre également la possibilité d'utiliser des modules de sécurité matériels étroitement contrôlés et surveillés pour augmenter le niveau de protection des clés de chiffrement asymétriques. Pour plus d’informations sur le coffre de clés, consultez Azure Key Vault.

L'illustration suivante résume le flux du processus de la gestion de clés extensible à l'aide du coffre de clés. Les numéros d'étapes de processus dans l'image ne sont pas censés correspondre aux numéros d'étapes d'installation qui suivent l'image.

SQL Server EKM à l’aide de l’Key Vault Azure

Étape 1 : configurer le coffre de clés pour une utilisation par SQL Server

Utilisez les étapes suivantes pour configurer un coffre de clés à utiliser avec le moteur de base de données SQL Server pour la protection par clé de chiffrement. Un coffre est peut-être déjà en cours d'utilisation pour l'organisation. Quand un coffre n’existe pas, l’administrateur Azure de votre organization désigné pour gérer les clés de chiffrement peut créer un coffre, générer une clé asymétrique dans le coffre, puis autoriser SQL Server à utiliser la clé. Pour vous familiariser avec le service de coffre de clés, consultez la page Prise en main du coffre de clés Azureet les informations de référence sur les applets de commande du coffre de clés Azure PowerShell.

Important

Si vous avez plusieurs abonnements Azure, vous devez utiliser l’abonnement qui contient SQL Server.

  1. Créer un coffre : Créez un coffre en suivant les instructions de la section Créer un coffre de clés de la page Prise en main du coffre de clés Azure. Notez le nom du coffre. Cette rubrique utilise ContosoKeyVault comme nom de coffre de clés.

  2. Générez une clé asymétrique dans le coffre : La clé asymétrique dans le coffre de clés est utilisée pour protéger SQL Server clés de chiffrement. Seule la partie publique de la clé asymétrique quitte le coffre, la partie privée n'étant jamais exportée par celui-ci. Toutes les opérations de chiffrement à l'aide de la clé asymétrique sont déléguées au coffre de clés Azure et sont protégées par la sécurité du coffre de clés.

    Il existe plusieurs méthodes pour générer une clé asymétrique et la stocker dans le coffre. Vous pouvez générer une clé en externe et l'importer dans le coffre en tant que fichier .pfx. Vous pouvez aussi créer la clé directement dans le coffre à l'aide des API du coffre de clés.

    Le connecteur SQL Server nécessite que les clés asymétriques soient rsa 2 048 bits, et le nom de la clé ne peut utiliser que les caractères « a-z », « A-Z », « 0-9 » et « - ». Dans ce document, le nom de la clé asymétrique est appelé ContosoMasterKey. Remplacez-le par le nom unique que vous utilisez pour la clé.

    Important

    L'importation de la clé asymétrique est fortement recommandée dans les scénarios de production, car elle permet à l'administrateur de déposer la clé dans un système de dépôt de clés (Key escrow). Si la clé asymétrique est créée dans le coffre, elle ne peut pas être déposée, car la clé privée ne peut jamais sortir du coffre. Les clés utilisées pour protéger les données critiques doivent être déposées. La perte d'une clé asymétrique rend une partie des données définitivement irrécupérable.

    Important

    Le coffre de clés prend en charge plusieurs versions de la même clé nommée. Les clés à utiliser par SQL Server Connector ne doivent pas être avec version ni roulées. Si l’administrateur souhaite déployer la clé utilisée pour le chiffrement SQL Server, une nouvelle clé portant un nom différent doit être créée dans le coffre et utilisée pour chiffrer la clé DEK.

    Pour plus d'informations sur la façon d'importer une clé dans le coffre de clés ou de créer une clé dans le coffre de clés (non recommandé pour un environnement de production), voir la section Ajouter une clé ou une clé secrète dans le coffre de clés de la page Prise en main d’Azure Key Vault.

  3. Obtenir les principaux du service Azure Active Directory à utiliser pour SQL Server : quand l'organisation s'inscrit à un service cloud Microsoft, elle obtient un répertoire Azure Active Directory. Créez des principaux de service dans Azure Active Directory pour SQL Server à utiliser (pour s’authentifier auprès d’Azure Active Directory) lors de l’accès au coffre de clés.

    • Un administrateur SQL Server a besoin d’un principal de service pour accéder au coffre lors de la configuration de SQL Server pour utiliser le chiffrement.

    • Le moteur de base de données SQL Server a besoin d’un autre principal de service pour accéder au coffre pour désencapsuler les clés utilisées dans SQL Server chiffrement.

    Pour plus d'informations sur la façon d'inscrire une application et de générer un principal du service, consultez la section Inscrire une application auprès d'Azure Active Directory dans Prise en main d'Azure Active Directory. Le processus d'inscription retourne un ID d'application (également appelé ID CLIENT) et une clé d'authentification (également appelée clé secrète) pour chaque principal du serviceAzure Active Directory. Lorsqu’il est utilisé dans l’instruction CREATE CREDENTIAL , le trait d’union doit être supprimé de l’ID CLIENT. Enregistrez ces éléments en vue de les utiliser dans les scripts ci-après :

    • Principal de service pour une connexion sysadmin : CLIENTID_sysadmin_login et SECRET_sysadmin_login

    • Principal du service pour le moteur de base de données SQL Server : CLIENTID_DBEngine et SECRET_DBEngine.

  4. Accorder l’autorisation aux principaux de service d’accéder à la Key Vault : les principaux CLIENTID_sysadmin_login et CLIENTID_DBEngineService nécessitent les autorisations get, list, wrapKey et unwrapKey dans le coffre de clés. Si vous envisagez de créer des clés via SQL Server vous devez également accorder l’autorisation de création dans le coffre de clés.

    Important

    Les utilisateurs doivent avoir au moins les opérations wrapKey et unwrapKey pour le coffre de clés.

    Pour plus d'informations sur l'octroi d'autorisations dans le coffre, voir la section Autoriser l'application à utiliser la clé ou la clé secrète de la page Prise en main du coffre de clés Azure.

    Liens vers la documentation du coffre de clés Azure

Étape 2 : installer le connecteur SQL Server

Le connecteur SQL Server est téléchargé et installé par l’administrateur de l’ordinateur SQL Server. Le connecteur SQL Server est disponible en téléchargement à partir du Centre de téléchargement Microsoft. Recherchez le connecteur SQL Server pour le coffre de clés Microsoft Azure, passez en revue les détails, la configuration système requise et les instructions d'installation, téléchargez le connecteur et démarrez l'installation à l'aide de l'option Exécuter. Passez en revue la licence et acceptez-la, puis continuez.

Par défaut, le connecteur est installé dans C:\Program Files\connecteur SQL Server pour Microsoft Azure Key Vault. Cet emplacement peut être changé lors de l'installation. (S'il est changé, adaptez les scripts ci-dessous).

À la fin de l'installation, les éléments suivants sont installés sur l'ordinateur :

  • Microsoft.AzureKeyVaultService.EKM.dll: il s’agit de la DLL du fournisseur EKM de chiffrement qui doit être inscrite auprès de SQL Server à l’aide de l’instruction CREATE CRYPTOGRAPHIC PROVIDER.

  • Connecteur SQL Server pour le coffre de clés Azure: Il s'agit d'un service Windows qui permet au fournisseur EKM de chiffrement de communiquer avec le coffre de clés.

L’installation du connecteur SQL Server vous permet également de télécharger des exemples de scripts pour le chiffrement SQL Server.

Étape 3 : Configurer SQL Server pour utiliser un fournisseur EKM pour le coffre de clés

Autorisations

L'exécution de l'ensemble de ce processus nécessite l'autorisation CONTROL SERVER ou l'appartenance au rôle serveur fixe sysadmin . Des actions spécifiques nécessitent les autorisations suivantes :

  • Pour créer un fournisseur de chiffrement, l'autorisation CONTROL SERVER ou l'appartenance au rôle de serveur fixe sysadmin est requise.

  • Pour modifier une option de configuration et exécuter l'instruction RECONFIGURE, vous devez disposer de l'autorisation de niveau serveur ALTER SETTINGS. L'autorisation ALTER SETTINGS est implicitement détenue par les rôles serveur fixes sysadmin et serveradmin .

  • La création des informations d'identification nécessite l'autorisation ALTER ANY CREDENTIAL.

  • L'ajout d'informations d'identification à une connexion nécessite l'autorisation ALTER ANY LOGIN.

  • La création d'une clé asymétrique nécessite l'autorisation CREATE ASYMMETRIC KEY.

Pour configurer SQL Server afin d'utiliser un fournisseur de chiffrement

  1. Configurez le moteur de base de données pour utiliser EKM et inscrivez (créez) le fournisseur de chiffrement avec 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 ;
    GO
    
    -- Create a cryptographic provider, using the SQL Server Connector
    -- which is an EKM provider for the Azure Key Vault. This example uses 
    -- the name AzureKeyVault_EKM_Prov.
    
    CREATE CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM_Prov 
    FROM FILE = 'C:\Program Files\SQL Server Connector for Microsoft Azure Key Vault\Microsoft.AzureKeyVaultService.EKM.dll';
    GO
    
  2. Configurez des informations d’identification SQL Server pour une connexion d’administrateur SQL Server afin d’utiliser le coffre de clés afin de configurer et de gérer des scénarios de chiffrement SQL Server.

    Important

    L’argument IDENTITY de CREATE CREDENTIAL nécessite le nom du coffre de clés. L’argument SECRET de CREATE CREDENTIAL nécessite que l’ID<> client (sans traits d’union) et <le secret> soient passés ensemble sans espace entre eux.

    Dans l’exemple suivant, l’ID client (EF5C8E09-4D2A-4A76-9998-D93440D8115D) est supprimé des traits d’union et entré en tant que chaîne EF5C8E094D2A4A769998D93440D8115D et le secret est représenté par la chaîne SECRET_sysadmin_login.

    USE master;
    CREATE CREDENTIAL sysadmin_ekm_cred 
        WITH IDENTITY = 'ContosoKeyVault', 
        SECRET = 'EF5C8E094D2A4A769998D93440D8115DSECRET_sysadmin_login' 
    FOR CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM_Prov ;
    
    -- Add the credential to the SQL Server administrators domain login 
    ALTER LOGIN [<domain>/<login>]
    ADD CREDENTIAL sysadmin_ekm_cred;
    

    Pour obtenir un exemple d’utilisation de variables pour les CREATE CREDENTIAL arguments et de suppression programmatique des traits d’union de l’ID client, consultez CREATE CREDENTIAL (Transact-SQL).

  3. Si vous avez importé une clé asymétrique comme décrit précédemment dans l'étape 1 de la section 3, ouvrez la clé en fournissant son nom dans l'exemple suivant.

    CREATE ASYMMETRIC KEY CONTOSO_KEY 
    FROM PROVIDER [AzureKeyVault_EKM_Prov]
    WITH PROVIDER_KEY_NAME = 'ContosoMasterKey',
    CREATION_DISPOSITION = OPEN_EXISTING;
    

    Bien qu’il ne soit pas recommandé en production (car la clé ne peut pas être exportée), il est possible de créer une clé asymétrique directement dans le coffre à partir de SQL Server. Si vous n'avez pas déjà importé de clé, créez une clé asymétrique dans le coffre de clés à des fins de test en utilisant le script suivant. Exécutez le script à l'aide d'une connexion configurée avec les informations d'identification sysadmin_ekm_cred .

    CREATE ASYMMETRIC KEY CONTOSO_KEY 
    FROM PROVIDER [AzureKeyVault_EKM_Prov]
    WITH ALGORITHM = RSA_2048,
    PROVIDER_KEY_NAME = 'ContosoMasterKey';
    

Conseil

Les utilisateurs recevant l’erreur Impossible d’exporter la clé publique du fournisseur. Code d’erreur du fournisseur : 2053. doivent case activée leurs autorisations get, list, wrapKey et unwrapKey dans le coffre de clés.

Pour plus d’informations, consultez les rubriques suivantes :

Exemples

Exemple A : chiffrement transparent des données à l'aide d'une clé asymétrique dans le coffre de clés

Après avoir effectué les étapes ci-dessus, créez des informations d'identification et une connexion, puis créez une clé de chiffrement de base de données protégée par la clé asymétrique dans le coffre de clés. Utilisez la clé de chiffrement de base de données pour chiffrer une base de données avec le chiffrement transparent des données.

Chiffrer une base de données nécessite l'autorisation CONTROL sur la base de données.

Pour activer le chiffrement transparent des données à l'aide de la gestion de clés extensible et du coffre de clés
  1. Créez des informations d’identification SQL Server dont se servira le moteur de base de données pour accéder à la gestion de clés extensible du coffre de clés au moment du chargement de la base de données.

    Important

    L’argument IDENTITY de CREATE CREDENTIAL nécessite le nom du coffre de clés. L’argument SECRET de CREATE CREDENTIAL nécessite que l’ID<> client (sans traits d’union) et <le secret> soient passés ensemble sans espace entre eux.

    Dans l'exemple suivant, l' ID client (EF5C8E09-4D2A-4A76-9998-D93440D8115D) est débarrassé des tirets et entré comme chaîne EF5C8E094D2A4A769998D93440D8115D , tandis que la clé secrète est représentée par la chaîne SECRET_DBEngine.

    USE master;
    CREATE CREDENTIAL Azure_EKM_TDE_cred 
        WITH IDENTITY = 'ContosoKeyVault', 
        SECRET = 'EF5C8E094D2A4A769998D93440D8115DSECRET_DBEngine' 
        FOR CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM_Prov ;
    
  2. Créez une connexion SQL Server à utiliser par le moteur de base de données pour TDE, puis ajoutez-y les informations d’identification. Cet exemple utilise la clé asymétrique CONTOSO_KEY stockée dans le coffre de clés, qui a été importée ou créée précédemment pour la base de données MASTER, comme décrit à l' étape 3 de la section 3 ci-dessus.

    USE master;
    -- Create a SQL Server login associated with the asymmetric key 
    -- for the Database engine to use when it loads a database 
    -- encrypted by TDE.
    CREATE LOGIN TDE_Login 
    FROM ASYMMETRIC KEY CONTOSO_KEY;
    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 Azure_EKM_TDE_cred ;
    GO
    
  3. Créez la clé de chiffrement de base de données (DEK) qui sera utilisée pour le chiffrement transparent des données. La clé de chiffrement de base de données peut être créée à l'aide de n'importe quelle longueur de clé ou algorithme pris en charge par SQL Server. La clé DEK est protégée par la clé asymétrique dans le coffre de clés.

    Cet exemple utilise la clé asymétrique CONTOSO_KEY stockée dans le coffre de clés, qui a été importée ou créée précédemment, comme décrit à l' étape 3 de la section 3 ci-dessus.

    USE ContosoDatabase;
    GO
    
    CREATE DATABASE ENCRYPTION KEY 
    WITH ALGORITHM = AES_128 
    ENCRYPTION BY SERVER ASYMMETRIC KEY CONTOSO_KEY;
    GO
    
    -- Alter the database to enable transparent data encryption.
    ALTER DATABASE ContosoDatabase 
    SET ENCRYPTION ON ;
    GO
    

    Pour plus d’informations, consultez les rubriques suivantes :

Exemple B : chiffrement des sauvegardes à l'aide d'une clé asymétrique dans le coffre de clés

Les sauvegardes chiffrées sont prises en charge à partir de SQL Server 2014. L'exemple suivant crée et restaure une sauvegarde chiffrée avec une clé de chiffrement de données protégée par la clé asymétrique dans le coffre de clés.

USE master;
BACKUP DATABASE [DATABASE_TO_BACKUP]
TO DISK = N'[PATH TO BACKUP FILE]' 
WITH FORMAT, INIT, SKIP, NOREWIND, NOUNLOAD, 
ENCRYPTION(ALGORITHM = AES_256, SERVER ASYMMETRIC KEY = [CONTOSO_KEY]);
GO

Exemple de code de restauration.

RESTORE DATABASE [DATABASE_TO_BACKUP]
FROM DISK = N'[PATH TO BACKUP FILE]' WITH FILE = 1, NOUNLOAD, REPLACE;
GO

Pour plus d’informations sur les options de sauvegarde, consultez BACKUP (Transact-SQL).

Exemple C : chiffrement au niveau colonne à l'aide d'une clé asymétrique dans le coffre de clés

L'exemple suivant crée une clé symétrique protégée par la clé asymétrique dans le coffre de clés. La clé symétrique est ensuite utilisée pour chiffrer les données de la base de données.

Cet exemple utilise la clé asymétrique CONTOSO_KEY stockée dans le coffre de clés, qui a été importée ou créée précédemment, comme décrit à l' étape 3 de la section 3 ci-dessus. Pour utiliser cette clé asymétrique dans la base de données ContosoDatabase , vous devez réexécuter l'instruction CREATE ASYMMETRIC KEY pour fournir à la base de données ContosoDatabase une référence à la clé.

USE [ContosoDatabase];
GO

-- Create a reference to the key in the key vault
CREATE ASYMMETRIC KEY CONTOSO_KEY 
FROM PROVIDER [AzureKeyVault_EKM_Prov]
WITH PROVIDER_KEY_NAME = 'ContosoMasterKey',
CREATION_DISPOSITION = OPEN_EXISTING;

-- Create the data encryption key.
-- The data encryption key can be created using any SQL Server 
-- supported algorithm or key length.
-- The DEK will be protected by the asymmetric key in the key vault

CREATE SYMMETRIC KEY DATA_ENCRYPTION_KEY
    WITH ALGORITHM=AES_256
    ENCRYPTION BY ASYMMETRIC KEY CONTOSO_KEY;

DECLARE @DATA VARBINARY(MAX);

--Open the symmetric key for use in this session
OPEN SYMMETRIC KEY DATA_ENCRYPTION_KEY 
DECRYPTION BY ASYMMETRIC KEY CONTOSO_KEY;

--Encrypt syntax
SELECT @DATA = ENCRYPTBYKEY(KEY_GUID('DATA_ENCRYPTION_KEY'), CONVERT(VARBINARY,'Plain text data to encrypt'));

-- Decrypt syntax
SELECT CONVERT(VARCHAR, DECRYPTBYKEY(@DATA));

--Close the symmetric key
CLOSE SYMMETRIC KEY DATA_ENCRYPTION_KEY;

Voir aussi

CREATE CRYPTOGRAPHIC PROVIDER (Transact-SQL)CREATE CREDENTIAL (Transact-SQL)CREATE ASYMMETRIC KEY (Transact-SQL)CREATE SYMMETRIC KEY (Transact-SQL)Extensible Key Management (EKM)Enable TDE using EKMBackup EncryptionCreate an Encrypted Backup Encryption Create an Encrypted Backup Encryption