Créer et stocker des clés principales de colonne pour Always Encrypted
S’applique à : SQL Server Azure SQL Database Azure SQL Managed Instance
Dans Always Encrypted, lesclés principales de colonne sont des clés de protection de clés servant à chiffrer les clés de chiffrement de colonne. Les clés principales de colonne doivent être stockées dans un magasin de clés approuvé, et les clés doivent être accessibles aux applications qui doivent chiffrer ou déchiffrer des données, ainsi qu’aux outils servant à la configuration d’Always Encrypted et à la gestion des clés Always Encrypted.
Cet article fournit des informations détaillées sur la sélection d’un magasin de clés et la création de clés principales de colonne pour Always Encrypted. Pour plus d’informations, consultez Vue d’ensemble de la gestion des clés pour Always Encrypted.
Sélection d’un magasin de clés pour votre clé principale de colonne
Always Encrypted prend en charge plusieurs magasins de clés pour le stockage des clés principales de colonne Always Encrypted. Les magasins de clés pris en charge varient selon le pilote et la version que vous utilisez.
Il existe deux catégories principales de magasins de clés : les magasins de clés locauxet les magasins de clés centralisés.
Magasin de clés local ou centralisé ?
Magasins de clés locaux : utilisables uniquement par les applications installées sur des ordinateurs sur lesquels se trouve un magasin de clés local. En d’autres termes, vous devez répliquer le magasin de clés et la clé pour chaque ordinateur qui exécute votre application. Le magasin de certificats Windows est un exemple de magasin de clés local. Lorsque vous utilisez un magasin de clés local, vous devez vérifier que le magasin de clés existe sur chaque ordinateur qui héberge votre application, et que l’ordinateur contient les clés principales de colonne dont votre application a besoin pour accéder aux données protégées à l’aide d’Always Encrypted. Lorsque vous mettez en service une clé principale de colonne pour la première fois, ou lorsque vous modifiez (permutez) la clé, vous devez vérifier que la clé est déployée sur tous les ordinateurs hébergeant vos applications.
Magasins de clés centralisés : diffusent des applications sur plusieurs ordinateurs. Azure Key Vaultest un exemple de magasin de clés centralisé. Un magasin de clés centralisé facilite généralement la gestion des clés, car vous n’avez pas besoin de maintenir plusieurs copies de vos clés principales de colonne sur plusieurs ordinateurs. Vérifiez que vos applications sont configurées pour se connecter au magasin de clés centralisé.
Quels sont les magasins de clés pris en charge par les pilotes clients avec Always Encrypted ?
Les pilotes clients avec Always Encrypted sont des pilotes clients SQL Server qui disposent d’une prise en charge intégrée permettant l’intégration d’Always Encrypted aux applications clientes. Les pilotes avec Always Encrypted comprennent certains fournisseurs intégrés pour les magasins de clés les plus courants. Certains pilotes autorisent également l’implémentation et l’inscription d’un fournisseur de magasin de clés principales de colonne personnalisé pour vous permettre d’utiliser n’importe quel magasin de clés, même s’il ne correspond à aucun fournisseur intégré. Lorsque vous devez choisir entre un fournisseur intégré et un fournisseur personnalisé, gardez à l’esprit que l’utilisation d’un fournisseur intégré implique généralement moins de modifications pour vos applications (dans certains cas, seule la modification d’une chaîne de connexion de base de données est nécessaire).
Les fournisseurs intégrés disponibles varient selon le pilote, la version du pilote et le système d’exploitation sélectionné. Consultez la documentation Always Encrypted pour votre pilote afin de déterminer les magasins de clés pris en charge sans configuration et si votre pilote prend en charge les fournisseurs de magasins de clés personnalisés (Développer des applications à l’aide d’Always Encrypted).
Quels sont les magasins de clés pris en charge dans les outils SQL ?
SQL Server Management Studio, Azure Data Studio et le module SqlServer PowerShell prennent en charge les clés principales de colonne stockées dans les éléments suivants :
Coffres de clés et HSM managés dans Azure Key Vault.
Remarque
Les modules HSM managés nécessitent SSMS 18.9 ou ultérieur, ainsi que le module PowerShell SqlServer version 21.1.18235 ou ultérieure. Azure Data Studio ne prend pas en charge les HSM managés actuellement.
Magasin de certificats Windows.
Les magasins de clés, comme le module de sécurité matériel, qui fournissent une API CNG (Cryptography Next Generation) ou CAPI (Cryptography API).
Génération de clés principales de colonne dans le magasin de certificats Windows
Une clé principale de colonne peut être un certificat stocké dans le magasin de certificats Windows. Un pilote Always Encrypted ne vérifie pas les dates d’expiration ou les chaînes d’autorité de certification. Un certificat est utilisé simplement comme une paire de clés comprenant une clé publique et une clé privée.
Pour être une clé principale de colonne valide, un certificat doit :
- Être un certificat X.509.
- Être stocké dans l’un des deux emplacements de magasin de certificats : ordinateur local ou utilisateur actuel. (pour créer un certificat dans l’emplacement de magasin de certificats de l’ordinateur local, vous devez être administrateur de l’ordinateur cible)
- Contenir une clé privée (la longueur minimale recommandée pour les clés d’un certificat est de 2 048 bits).
- Être créé en vue d’un échange de clés.
Plusieurs méthodes permettent de créer un certificat qui soit une clé principale de colonne valide. Cependant, l’option la plus simple consiste à créer un certificat auto-signé.
Créer un certificat auto-signé à l’aide de PowerShell
Utilisez l’applet de commande New-SelfSignedCertificate pour créer un certificat auto-signé. L’exemple suivant montre comment générer un certificat pouvant être utilisé comme clé principale de colonne pour Always Encrypted.
# New-SelfSignedCertificate is a Windows PowerShell cmdlet that creates a self-signed certificate. The below examples show how to generate a certificate that can be used as a column master key for Always Encrypted.
$cert = New-SelfSignedCertificate -Subject "AlwaysEncryptedCert" -CertStoreLocation Cert:CurrentUser\My -KeyExportPolicy Exportable -Type DocumentEncryptionCert -KeyUsage KeyEncipherment -KeySpec KeyExchange -KeyLength 2048
# To create a certificate in the local machine certificate store location you need to run the cmdlet as an administrator.
$cert = New-SelfSignedCertificate -Subject "AlwaysEncryptedCert" -CertStoreLocation Cert:LocalMachine\My -KeyExportPolicy Exportable -Type DocumentEncryptionCert -KeyUsage KeyEncipherment -KeySpec KeyExchange -KeyLength 2048
Créer un certificat auto-signé à l’aide de SQL Server Management Studio (SSMS)
Pour plus d’informations, consultez Provisionner des clés Always Encrypted à l’aide de SQL Server Management Studio. Pour obtenir un didacticiel pas à pas qui utilise SSMS et stocke les clés Always Encrypted dans le magasin de certificats Windows, consultez le didacticiel de l’Assistant Always Encrypted (magasin de certificats Windows).
Mise à disposition des certificats pour les applications et les utilisateurs
Si votre clé principale de colonne est un certificat stocké dans l’emplacement de magasin de certificats ordinateur local , vous devez exporter le certificat et la clé privée, et les importer sur tous les ordinateurs qui hébergent les applications censées chiffrer ou déchiffrer des données stockées dans les colonnes chiffrées, ou sur les outils de configuration d’Always Encrypted et de gestion des clés Always Encrypted. En outre, chaque utilisateur doit disposer d’une autorisation de lecture pour le certificat stocké dans le magasin de certificats « ordinateur local » afin de pouvoir utiliser le certificat comme une clé principale de colonne.
Si votre clé principale de colonne est un certificat stocké dans l’emplacement de magasin de certificats utilisateur actuel , vous devez exporter le certificat et la clé privée, et les importer dans l’emplacement de magasin de certificats « utilisateur actuel » de tous les comptes d’utilisateurs qui exécutent les applications censées chiffrer ou déchiffrer des données stockées dans les colonnes chiffrées, ou sur les outils de configuration d’Always Encrypted et de gestion des clés Always Encrypted (sur tous les ordinateurs disposant de ces applications et de ces outils). Aucune configuration d’autorisation n’est nécessaire. Une fois connecté à l’ordinateur, l’utilisateur peut accéder à tous les certificats qui se trouvent dans son emplacement de magasin de certificats « utilisateur actuel ».
Utilisation de PowerShell
Utilisez les applets de commande Import-PfxCertificate et Export-PfxCertificate pour importer et exporter un certificat.
Utilisation de Microsoft Management Console
Pour accorder à un utilisateur une autorisation en lecture pour un certificat stocké dans le magasin de certificats « ordinateur local », procédez comme suit :
- Ouvrez une invite de commandes et tapez mmc.
- Dans la console MMC, dans le menu Fichier , cliquez sur Ajouter/Supprimer un composant logiciel enfichable.
- Dans la boîte de dialogue Ajouter/Supprimer un composant logiciel enfichable , cliquez sur Ajouter.
- Dans la boîte de dialogue Ajout d’un composant logiciel enfichable autonome , cliquez sur Certificats, puis sur Ajouter.
- Dans la boîte de dialogue Composant logiciel enfichable Certificats , cliquez sur Compte d’ordinateur, puis sur Terminer.
- Dans la boîte de dialogue Ajout d’un composant logiciel enfichable autonome , cliquez sur Fermer.
- Dans la boîte de dialogue Ajouter/Supprimer un composant logiciel enfichable , cliquez sur OK.
- Dans le composant logiciel enfichable Certificats, trouvez le certificat dans le dossier personnel Certificats >, faites un clic droit sur le certificat, placez le curseur sur Toutes les tâches, puis cliquez sur Gérer les clés privées.
- Dans la boîte de dialogue Sécurité , ajoutez l’autorisation de lecture pour un compte d’utilisateur, si nécessaire.
Création de clés principales de colonne dans Azure Key Vault
Azure Key Vault permet de protéger les secrets et les clés de chiffrement. Ce service est une option très pratique pour le stockage des clés principales de colonne pour Always Encrypted, surtout si vos applications sont hébergées dans Azure. Pour créer une clé dans Azure Key Vault, vous devez disposer d’un abonnement Azure et d’un coffre de clés Azure. Une clé peut être stockée dans un coffre de clés ou dans un HSM managé. Pour être une clé principale de colonne valide, la clé gérée dans Azure Key Vault doit être une clé RSA.
Utilisation d’Azure CLI, du portail ou de PowerShell
Pour plus d’informations sur la façon de créer une clé dans un coffre de clés, consultez :
- Démarrage rapide : Définir et récupérer une clé dans Azure Key Vault avec Azure CLI
- Démarrage rapide : Définir et récupérer une clé dans Azure Key Vault avec Azure PowerShell
- Démarrage rapide : Définir et récupérer une clé dans Azure Key Vault avec le portail Azure
Pour plus d’informations sur la façon de créer une clé dans un HSM managé, consultez :
SQL Server Management Studio (SSMS)
Pour plus d’informations sur la façon de créer une clé principale de colonne dans un coffre de clés ou dans un HSM managé dans Azure Key Vault à l’aide de SSMS, consultez Provisionner des clés Always Encrypted avec SQL Server Management Studio. Pour obtenir un tutoriel pas à pas qui utilise SSMS et stocke des clés Always Encrypted dans un coffre de clés, consultez le tutoriel de l’Assistant Always Encrypted (Azure Key Vault).
Mise à disposition des clés Azure Key Vault pour les applications et les utilisateurs
Pour accéder à une colonne chiffrée, votre application doit être en mesure d’accéder à Azure Key Vault et également disposer d’autorisations spécifiques sur la clé principale de colonne pour déchiffrer la clé de chiffrement de colonne protégeant la colonne.
Pour gérer des clés pour Always Encrypted, vous devez disposer d’autorisations pour lister et créer des clés principales de colonne dans Azure Key Vault, ainsi que pour effectuer des opérations de chiffrement à l’aide des clés.
Key Vaults
Si vous stockez vos clés principales de colonne dans un coffre de clés et que vous utilisez des autorisations de rôle pour l’autorisation :
L’identité de votre application doit être membre de rôles qui autorisent les actions de plan de données suivantes sur le coffre de clés :
- Microsoft.KeyVault/vaults/keys/decrypt/action
- Microsoft.KeyVault/vaults/keys/read
- Microsoft.KeyVault/vaults/keys/verify/action
Le moyen le plus simple d’accorder à l’application l’autorisation nécessaire consiste à ajouter son identité au rôle Utilisateur de chiffrement Key Vault. Vous pouvez également créer un rôle personnalisé avec les autorisations nécessaires.
Un utilisateur qui gère des clés pour Always Encrypted doit être un membre ou des rôles qui autorisent les actions de plan de données suivantes sur le coffre de clés :
- Microsoft.KeyVault/vaults/keys/create/action
- Microsoft.KeyVault/vaults/keys/decrypt/action
- Microsoft.KeyVault/vaults/keys/encrypt/action
- Microsoft.KeyVault/vaults/keys/read
- Microsoft.KeyVault/vaults/keys/sign/action
- Microsoft.KeyVault/vaults/keys/verify/action
Le moyen le plus simple d’accorder à l’utilisateur l’autorisation nécessaire consiste à ajouter l’utilisateur au rôle Utilisateur de chiffrement Key Vault. Vous pouvez également créer un rôle personnalisé avec les autorisations nécessaires.
Si vous stockez vos clés principales de colonne dans un coffre de clés et que vous utilisez des stratégies d’accès pour l’autorisation :
- L’identité de votre application a besoin des autorisations de stratégie d’accès suivantes sur le coffre de clés : get, unwrapKey et verify.
- Un utilisateur qui gère des clés pour Always Encrypted a besoin des autorisations de stratégie d’accès suivantes sur le coffre de clés : create, get, list, sign, unwrapKey, wrapKey, verify.
Pour des informations générales sur la façon de configurer l’authentification et l’autorisation pour les coffres de clés, consultez Autoriser un principal de sécurité à accéder à Key Vault.
Modules HSM managés
L’identité de votre application doit être membre de rôles qui autorisent les actions de plan de données suivantes sur votre HSM managé :
- Microsoft.KeyVault/managedHsm/keys/decrypt/action
- Microsoft.KeyVault/managedHsm/keys/read/action
- Microsoft.KeyVault/managedHsm/keys/verify/action
Microsoft vous recommande de créer un rôle personnalisé contenant uniquement les autorisations ci-dessus.
Un utilisateur qui gère des clés pour Always Encrypted doit être un membre ou des rôles qui autorisent les actions de plan de données suivantes sur la clé :
- Microsoft.KeyVault/managedHsm/keys/create/action
- Microsoft.KeyVault/managedHsm/keys/decrypt/action
- Microsoft.KeyVault/managedHsm/keys/encrypt/action
- Microsoft.KeyVault/managedHsm/keys/read
- Microsoft.KeyVault/managedHsm/keys/sign/action
- Microsoft.KeyVault/managedHsm/keys/verify/action
Le moyen le plus simple d’accorder à l’utilisateur les autorisations ci-dessus consiste à l’ajouter au rôle Utilisateur du chiffrement du HSM managé. Vous pouvez également créer un rôle personnalisé avec les autorisations nécessaires.
Pour plus d’informations sur le contrôle d’accès pour les HSM managés, consultez :
Création de clés principales de colonne dans des modules de sécurité matériels à l’aide de CNG
Vous pouvez stocker une clé principale de colonne Always Encrypted dans un magasin de clés qui implémente l’API CNG (Cryptography Next Generation). En règle générale, ce type de magasin est un module de sécurité matériel. Un module de sécurité matériel est un périphérique physique qui protège et gère les clés numériques et fournit un traitement du chiffrement. Les modules de sécurité matériels se présentent généralement sous la forme d’une carte enfichable ou d’un périphérique externe qui se connecte directement à un ordinateur (modules de sécurité matériels locaux) ou à un serveur réseau.
Pour rendre un module de sécurité matériel disponible pour les applications d’un ordinateur donné, un fournisseur de stockage de clés (KSP) implémentant le CNG doit être installé et configuré sur l’ordinateur. Un pilote client avec Always Encrypted (fournisseur de clés principales de colonne intégré au pilote) utilise le KSP pour chiffrer et déchiffrer les clés de chiffrement de colonne, protégées par la clé principale de colonne stockée dans le magasin de clés.
Windows inclut le fournisseur de stockage de clés (KSP) des logiciels Microsoft qui peut être utilisé à des fins de test. Consultez CNG Key Storage Providers(Fournisseurs de stockage de clés CNG).
Création de clés principales de colonne dans un magasin de clés à l’aide du CNG ou d’un KSP
Une clé principale de colonne doit être une clé asymétrique (paire de clés publique/privée) utilisant l’algorithme RSA. La longueur de clé minimale recommandée est de 2048 bits.
Utilisation des outils spécifiques aux modules de sécurité matériels
Consultez la documentation de votre module de sécurité matériel.
Utilisation de PowerShell
Vous pouvez utiliser les API .NET pour créer une clé dans un magasin de clés à l’aide du CNG dans PowerShell.
$cngProviderName = "Microsoft Software Key Storage Provider" # If you have an HSM, you can use a KSP for your HSM instead of a Microsoft KSP
$cngAlgorithmName = "RSA"
$cngKeySize = 2048 # Recommended key size for Always Encrypted column master keys
$cngKeyName = "AlwaysEncryptedKey" # Name identifying your new key in the KSP
$cngProvider = New-Object System.Security.Cryptography.CngProvider($cngProviderName)
$cngKeyParams = New-Object System.Security.Cryptography.CngKeyCreationParameters
$cngKeyParams.provider = $cngProvider
$cngKeyParams.KeyCreationOptions = [System.Security.Cryptography.CngKeyCreationOptions]::OverwriteExistingKey
$keySizeProperty = New-Object System.Security.Cryptography.CngProperty("Length", [System.BitConverter]::GetBytes($cngKeySize), [System.Security.Cryptography.CngPropertyOptions]::None);
$cngKeyParams.Parameters.Add($keySizeProperty)
$cngAlgorithm = New-Object System.Security.Cryptography.CngAlgorithm($cngAlgorithmName)
$cngKey = [System.Security.Cryptography.CngKey]::Create($cngAlgorithm, $cngKeyName, $cngKeyParams)
Utilisation de SQL Server Management Studio
Consultez Provisionner des clés Always Encrypted à l’aide de SQL Server Management Studio.
Mise à disposition des clés CNG pour les applications et les utilisateurs
Consultez la documentation relative au module de sécurité matériel et au fournisseur de stockage de clés pour savoir comment configurer le fournisseur de stockage de clés sur un ordinateur et comment accorder aux applications et aux utilisateurs l’accès au module de sécurité matériel.
Création de clés principales de colonne dans des modules de sécurité matériels à l’aide de CAPI
Vous pouvez stocker une clé principale de colonne Always Encrypted dans un magasin de clés qui implémente l’API Cryptography (CAPI). En général, ce type de magasin est un module de sécurité matériel, c’est-à-dire un périphérique physique qui protège et gère les clés numériques et fournit un traitement du chiffrement. Les modules de sécurité matériels se présentent généralement sous la forme d’une carte enfichable ou d’un périphérique externe qui se connecte directement à un ordinateur (modules de sécurité matériels locaux) ou à un serveur réseau.
Pour rendre un module de sécurité matériel disponible pour les applications d’un ordinateur donné, un fournisseur de services de chiffrement (CSP) implémentant CAPI doit être installé et configuré sur l’ordinateur. Un pilote client avec Always Encrypted (fournisseur de clés principales de colonne intégré au pilote) utilise le CSP pour chiffrer et déchiffrer les clés de chiffrement de colonne, protégées par la clé principale de colonne stockée dans le magasin de clés.
Remarque
CAPI est une API héritée obsolète. Si un fournisseur de stockage de clés est disponible pour votre module de sécurité matériel, vous devez l’utiliser plutôt que le fournisseur de services de chiffrement avec CAPI.
Un fournisseur de services de chiffrement doit prendre en charge l’algorithme RSA à utiliser avec Always Encrypted.
Windows inclut les fournisseurs de services de chiffrement logiciels (sans module de sécurité matériel) suivants qui prennent en charge l’algorithme RSA et peuvent être utilisés à des fins de test : Microsoft Enhanced RSA et AES Cryptographic Provider.
Création de clés principales de colonne dans un magasin de clés à l’aide de CAPI ou d’un CSP
Une clé principale de colonne doit être une clé asymétrique (paire de clés publique/privée) utilisant l’algorithme RSA. La longueur de clé minimale recommandée est de 2048 bits.
Utilisation des outils spécifiques aux modules de sécurité matériels
Consultez la documentation de votre module de sécurité matériel.
Avec SQL Server Management Studio (SSMS)
Consultez Provisionner des clés Always Encrypted à l’aide de SQL Server Management Studio.
Mise à disposition des clés CNG pour les applications et les utilisateurs
Consultez la documentation de votre module HSM et de votre fournisseur de services de chiffrement pour savoir comment configurer le fournisseur de services de chiffrement sur un ordinateur, et comment accorder aux applications et aux utilisateurs l’accès au module HSM.
Étapes suivantes
- Provisionner des clés Always Encrypted à l’aide de SQL Server Management Studio
- Provisionner des clés Always Encrypted en utilisant PowerShell