Approvisionner des clés prenant en charge les enclaves

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

Cet article explique comment provisionner des clés activées pour les enclaves qui prennent en charge les calculs à l’intérieur des enclaves sécurisées côté serveur utilisées pour Always Encrypted avec enclaves sécurisées.

Les instructions générales et les processus de gestion des clés Always Encrypted s’appliquent quand vous provisionnez des clés activées pour les enclaves. Cet article traite des détails spécifiques à Always Encrypted avec enclaves sécurisées.

Pour provisionner une clé principale de colonne activée pour les enclaves en utilisant SQL Server Management Studio ou PowerShell, vérifiez que la nouvelle clé prend en charge les calculs d’enclave. L’outil (SSMS ou PowerShell) génère alors l’instruction CREATE COLUMN MASTER KEY, qui définit ENCLAVE_COMPUTATIONS dans les métadonnées de clé principale des colonnes dans la base de données. Pour plus d’informations, consultez CREATE COLUMN MASTER KEY (Transact-SQL).

L’outil signe également numériquement les propriétés principales de colonne avec la clé principale de colonne et stocke la signature dans les métadonnées de la base de données. La signature empêche la falsification malveillante avec le paramètre ENCLAVE_COMPUTATIONS. Les pilotes du client SQL vérifient les signatures avant d’autoriser l’utilisation de l’enclave. Cela permet aux administrateurs de sécurité de contrôler des données de la colonne pouvant être calculées à l’intérieur de l’enclave.

ENCLAVE_COMPUTATIONS est non modifiable, ce qui signifie que vous ne pouvez pas le changer une fois que vous avez défini la clé principale de colonne dans les métadonnées. Pour activer les calculs d’enclave en utilisant une clé de chiffrement de colonne chiffrée par une clé principale de colonne donnée, vous devez effectuer une rotation de la clé principale de colonne et la remplacer par une clé principale de colonne activée pour les enclaves. Consultez Effectuer une rotation de clés activées pour les enclaves.

Note

Actuellement, SSMS et PowerShell prennent en charge les clés principales de colonne activées pour les enclaves stockées dans Azure Key Vault ou dans le magasin de certificats Windows. Les modules de sécurité matériels (avec CNG ou CAPI) ne sont pas pris en charge.

Pour créer une clé de chiffrement de colonne activée pour les enclaves, vous devez veiller à sélectionner une clé principale de colonne activée pour les enclaves pour chiffrer la nouvelle clé.

Les sections suivantes fournissent plus de détails sur le provisionnement des clés activées pour les enclaves avec SSMS et PowerShell.

Provisionner des clés activées pour les enclaves avec SQL Server Management Studio

Dans SQL Server Management Studio, vous pouvez provisionner :

  • Une clé principale de colonne activée pour les enclaves en utilisant la boîte de dialogue Nouvelle clé principale de colonne.
  • Une clé principale de colonne activée pour les enclaves en utilisant la boîte de dialogue Nouvelle clé de chiffrement de colonne.

L’Assistant Always Encrypted vous permet également de créer une clé principale de colonne prenant en charge les enclaves et une clé de chiffrement de colonne prenant en charge les enclaves.

Vérifiez que vous avez installé la dernière version en disponibilité générale de SQL Server Management Studio (SSMS).

Provisionner des clés principales de colonne activées pour les enclaves en utilisant la boîte de dialogue Nouvelle clé principale de colonne

Pour provisionner une clé principale de colonne activée pour les enclaves, suivez les étapes décrites dans Provisionner des clés principales de colonne avec la boîte de dialogue Nouvelle clé principale de colonne. Veillez à sélectionner Autoriser les calculs d’enclave. Consultez la capture d’écran ci-dessous :

Allow enclave computations

Note

La case à cocher Autoriser les calculs d’enclave n’apparaît que si une enclave sécurisée est configurée pour la base de données. Si vous utilisez SQL Server, consultez Configurer l’enclave sécurisée dans SQL Server. Si vous utilisez Azure SQL Database, consultez Activer Always Encrypted avec enclaves sécurisées pour votre base de données Azure SQL.

Astuce

Pour vérifier si une clé principale de colonne est activée pour les enclaves, cliquez sur celle-ci avec le bouton droit dans l’Explorateur d’objets, puis sélectionnez Propriétés. Si la clé est activée pour les enclaves, les calculs d’enclave : autorisés s’affichent dans la fenêtre affichant les propriétés de la clé. Vous pouvez aussi utiliser la vue sys.column_master_keys (Transact-SQL).

Provisionner des clés principales de colonne activées pour les enclaves avec la boîte de dialogue Nouvelle clé de chiffrement de colonne

Pour provisionner une clé de chiffrement de colonne activée pour les enclaves, suivez les étapes décrites dans Provisionner des clés de chiffrement de colonne avec la boîte de dialogue Nouvelle clé de chiffrement de colonne. Quand vous sélectionnez une clé principale de colonne, vérifiez qu’elle est activée pour les enclaves.

Astuce

Pour vérifier si une clé de chiffrement de colonne est activée pour les enclaves, cliquez sur celle-ci avec le bouton droit dans l’Explorateur d’objets, puis sélectionnez Propriétés. Si la clé est activée pour les enclaves, les calculs d’enclave : autorisés s’affichent dans la fenêtre affichant les propriétés de la clé.

Approvisionner des clés prenant en charge les enclaves avec PowerShell

Pour approvisionner des clés prenant en charge les enclaves à l’aide de PowerShell, vous avez besoin du module SqlServer PowerShell version 22 ou ultérieure.

En général, les workflows de provisionnement de clés PowerShell (avec et sans séparation des rôles) pour Always Encrypted, décrits dans Provisionner des clés Always Encrypted en utilisant PowerShell s’appliquent également aux clés activées pour les enclaves. Cette section décrit les détails spécifiques aux clés activées pour les enclaves.

Le module PowerShell SqlServer étend les cmdlets New-SqlCertificateStoreColumnMasterKeySettings et New-SqlAzureKeyVaultColumnMasterKeySettings avec le paramètre -AllowEnclaveComputations pour vous permettre de spécifier une clé principale de colonne compatible avec les enclaves pendant le processus d’approvisionnement. Les deux applets de commande créent un objet local contenant les propriétés d’une clé principale de colonne (stockée dans Azure Key Vault ou dans le magasin de certificats Windows). Si ce paramètre est spécifié, la propriété -AllowEnclaveComputations marque la clé comme étant activée pour les enclaves dans l’objet local. Elle a aussi pour effet que l’applet de commande accède à la clé principale de colonne référencée (dans Azure Key Vault ou dans le magasin de certificats Windows) pour signer numériquement les propriétés de la clé. Une fois que vous avez créé un objet de paramètres pour une nouvelle clé principale de colonne activée pour les enclaves, vous pouvez l’utiliser dans un appel ultérieur de l’applet de commande New-SqlColumnMasterKey pour créer un objet de métadonnées décrivant la nouvelle clé dans la base de données.

L’approvisionnement des clés de chiffrement de colonne prenant en charge les enclaves n’est pas différente de l’approvisionnement des clés de chiffrement de colonne qui ne sont pas activées pour les enclaves. Vous devez simplement vérifier qu’une clé principale de colonne utilisée pour chiffrer la nouvelle clé de chiffrement de colonne est activée pour les enclaves.

Note

Le module SqlServer PowerShell ne prend actuellement pas en charge le provisionnement de clés activées pour les enclaves stockées dans des modules de sécurité matériels (avec CNG ou CAPI).

Exemple - Provisionner des clés activées pour les enclaves en utilisant le magasin de certificats Windows

L’exemple complet ci-dessous montre comment configurer des clés activées pour les enclaves, en stockant la clé principale de colonne dans le magasin de certificats Windows. Le script est basé sur l’exemple de Magasin de certificats Windows sans séparation des rôles (exemple). Il est important de noter que l’utilisation du paramètre -AllowEnclaveComputations dans le l’applet de commande New-SqlCertificateStoreColumnMasterKeySettings est la seule différence entre les workflows dans les deux exemples.

# Create a column master key in Windows Certificate Store.
$cert = New-SelfSignedCertificate -Subject "AlwaysEncryptedCert" -CertStoreLocation Cert:CurrentUser\My -KeyExportPolicy Exportable -Type DocumentEncryptionCert -KeyUsage DataEncipherment -KeySpec KeyExchange

# Import the SqlServer module.
Import-Module "SqlServer" -MinimumVersion 22.0.50

# Connect to your database.
$serverName = "<server name>"
$databaseName = "<database name>"
# Change the authentication method in the connection string, if needed.
$connStr = "Server = " + $serverName + "; Database = " + $databaseName + "; Integrated Security = True"
$database = Get-SqlDatabase -ConnectionString $connStr

# Create a SqlColumnMasterKeySettings object for your column master key
# using the -AllowEnclaveComputations parameter.
$cmkSettings = New-SqlCertificateStoreColumnMasterKeySettings -CertificateStoreLocation "CurrentUser" -Thumbprint $cert.Thumbprint -AllowEnclaveComputations

# Create column master key metadata in the database.
$cmkName = "CMK1"
New-SqlColumnMasterKey -Name $cmkName -InputObject $database -ColumnMasterKeySettings $cmkSettings

# Generate a column encryption key, encrypt it with the column master key and create column encryption key metadata in the database. 
$cekName = "CEK1"
New-SqlColumnEncryptionKey -Name $cekName  -InputObject $database -ColumnMasterKey $cmkName

Exemple - Provisionner des clés activées pour les enclaves en utilisant Azure Key Vault

L’exemple de bout en bout ci-dessous montre comment provisionner des clés d’enclave, en stockant la clé principale de colonne dans un coffre de clés dans Azure Key Vault. Le script est basé sur l’exemple de Azure Key Vault sans séparation des rôles (exemple). Il est important de noter deux différences entre le flux de travail pour les clés prenant en charge les enclaves par rapport aux clés qui ne sont pas activées pour les enclaves.

  • Dans le script ci-dessous, l’applet de commande New-SqlCertificateStoreColumnMasterKeySettings utilise le paramètre -AllowEnclaveComputations pour rendre la nouvelle clé principale de colonne activée pour les enclaves.
  • Le script ci-dessous utilise l’applet de commande Get-AzAccessToken pour obtenir un jeton d’accès pour les coffres de clés. Cela est nécessaire, car New-SqlAzureKeyVaultColumnMasterKeySettings doit avoir accès à Azure Key Vault pour signer les propriétés de la clé principale de colonne.
# Create a column master key in Azure Key Vault.
Import-Module "SqlServer" -MinimumVersion 22.0.50
Import-Module Az.Accounts -MinimumVersion 2.2.0
Connect-AzAccount
$SubscriptionId = "<Azure SubscriptionId>"
$resourceGroup = "<resource group name>"
$azureLocation = "<datacenter location>"
$akvName = "<key vault name>"
$akvKeyName = "<key name>"
$azureCtx = Set-AzConteXt -SubscriptionId $SubscriptionId # Sets the context for the below cmdlets to the specified subscription.
New-AzResourceGroup -Name $resourceGroup -Location $azureLocation # Creates a new resource group - skip, if your desired group already exists.
New-AzKeyVault -VaultName $akvName -ResourceGroupName $resourceGroup -Location $azureLocation # Creates a new key vault - skip if your vault already exists.
Set-AzKeyVaultAccessPolicy -VaultName $akvName -ResourceGroupName $resourceGroup -PermissionsToKeys get, create, delete, list, wrapKey,unwrapKey, sign, verify -UserPrincipalName $azureCtx.Account
$akvKey = Add-AzKeyVaultKey -VaultName $akvName -Name $akvKeyName -Destination "Software"

# Connect to your database.
$serverName = "<server name>"
$databaseName = "<database name>"
# Change the authentication method in the connection string, if needed.
$connStr = "Server = " + $serverName + "; Database = " + $databaseName + "; Integrated Security = True"
$database = Get-SqlDatabase -ConnectionString $connStr

# Obtain an access token for key vaults.
$keyVaultAccessToken = (Get-AzAccessToken -ResourceUrl https://vault.azure.net).Token 

# Create a SqlColumnMasterKeySettings object for your column master key. 
$cmkSettings = New-SqlAzureKeyVaultColumnMasterKeySettings -KeyURL $akvKey.ID -AllowEnclaveComputations -KeyVaultAccessToken $keyVaultAccessToken

# Create column master key metadata in the database.
$cmkName = "CMK1"
New-SqlColumnMasterKey -Name $cmkName -InputObject $database -ColumnMasterKeySettings $cmkSettings

# Generate a column encryption key, encrypt it with the column master key and create column encryption key metadata in the database. 
$cekName = "CEK1"
New-SqlColumnEncryptionKey -Name $cekName -InputObject $database -ColumnMasterKey $cmkName -KeyVaultAccessToken $keyVaultAccessToken

Étapes suivantes

Voir aussi