Delen via


Enclave-ondersteunde sleutels voorzien

Van toepassing op: SQL Server 2019 (15.x) en hoger - Alleen Windows Azure SQL Database

In dit artikel wordt beschreven hoe u enclavesleutels inricht die ondersteuning bieden voor berekeningen in beveiligde enclaves aan de serverzijde die worden gebruikt voor Always Encrypted met beveiligde enclaves.

De algemene richtlijnen en processen voor het beheren van Always Encrypted-sleutels zijn van toepassing wanneer u enclavesleutels inricht. In dit artikel worden details beschreven die specifiek zijn voor Always Encrypted met beveiligde enclaves.

Bij het voorzien van een enclave-ingeschakelde kolomhoofdsleutel door SQL Server Management Studio of PowerShell, moet u ervoor zorgen dat de nieuwe sleutel enclaveberekeningen ondersteunt. Dit zorgt ervoor dat het hulpprogramma (SSMS of PowerShell) de CREATE COLUMN MASTER KEY-instructie genereert waarmee de ENCLAVE_COMPUTATIONS wordt ingesteld in de metagegevens van de hoofdsleutel voor kolommen in de database. Zie CREATE COLUMN MASTER KEY (Transact-SQL)voor meer informatie.

Het hulpprogramma ondertekent ook digitaal de eigenschappen van het kolomhoofd met de kolomhoofdsleutel en slaat de handtekening op in de metagegevens van de database. De handtekening voorkomt kwaadwillende manipulatie met de instelling ENCLAVE_COMPUTATIONS. De SQL-clientstuurprogramma's controleren de handtekeningen voordat u het gebruik van de enclave toestaat. Dit biedt beveiligingsbeheerders controle over welke kolomgegevens in de enclave kunnen worden berekend.

De ENCLAVE_COMPUTATIONS is onveranderbaar, wat betekent dat u deze niet kunt wijzigen wanneer u de kolomhoofdsleutel in de metagegevens definieert. Om enclaveberekeningen mogelijk te maken met behulp van een kolomversleutelingssleutel die door een bepaalde kolomhoofdsleutel wordt versleuteld, moet u de kolomhoofdsleutel roteren en vervangen door een kolomhoofdsleutel met enclave-functionaliteit. Zie Roteer enclave-geschakelde sleutels.

Notitie

Momenteel bieden zowel SSMS als PowerShell ondersteuning voor kolomhoofdsleutels met enclave-functionaliteit die zijn opgeslagen in Azure Key Vault of Windows Certificate Store. Hardwarebeveiligingsmodules (met CNG of CAPI) worden niet ondersteund.

Als u een enclave-versleutelingssleutel voor kolommen wilt maken, moet u ervoor zorgen dat u een kolomhoofdsleutel met enclave selecteert om de nieuwe sleutel te versleutelen.

In de volgende secties vindt u meer informatie over het inrichten van enclavesleutels met behulp van SSMS en PowerShell.

Enclave-ingeschakelde sleutels inrichten in SQL Server Management Studio

In SQL Server Management Studio kunt u het volgende inrichten:

  • Een kolomhoofdsleutel met enclaves met behulp van het dialoogvenster Nieuwe kolomhoofdsleutel.
  • Een enclave-versleutelingssleutel voor kolommen met behulp van het dialoogvenster Nieuwe kolomversleutelingssleutel.

Met de Always Encrypted wizard kunt u ook een kolomhoofdsleutel inschakelen voor enclaves en een kolomversleutelingssleutel inschakelen voor enclaves.

Zorg ervoor dat u de meest recente algemene beschikbaarheidsversie van SSMS (SQL Server Management Studio)hebt geïnstalleerd.

Kolomhoofdsleutels met inschakeling van enclave inrichten met het dialoogvenster Nieuwe kolomhoofdsleutel

Als u een enclave-geschikte kolomhoofdsleutel wilt inrichten, volg de stappen zoals beschreven in Kolomhoofdsleutels inrichten met het dialoogvenster Nieuwe kolomhoofdsleutel. Zorg ervoor dat u enclaveberekeningen toestaanselecteert. Zie de onderstaande schermopname:

enclaveberekeningen toestaan

Notitie

Het selectievakje Enclaveberekeningen toestaan wordt alleen weergegeven als er een beveiligde enclave is geconfigureerd voor uw database. Zie De beveiligde enclave configureren in SQL Serverals u SQL Server gebruikt. Als u Azure SQL Database gebruikt, raadpleegt u Always Encrypted inschakelen met beveiligde enclaves voor uw Azure SQL Database-.

Tip

Als u wilt controleren of een kolomhoofdsleutel enclave is ingeschakeld, klikt u er met de rechtermuisknop op in Objectverkenner en selecteert u Eigenschappen. Als de sleutel enclave-ingeschakeld is, verschijnt Enclaveberekeningen: Toegestaan in het venster met de eigenschappen van de sleutel. U kunt ook de sys.column_master_keys (Transact-SQL) weergave gebruiken.

Enclave-compatibele kolomversleutelingssleutels inrichten met het dialoogvenster Nieuwe Kolomversleutelingssleutel

Als u een kolomversleutelsleutel met enclave-ondersteuning wilt configureren, volgt u de stappen in Kolomversleutelsleutel configureren met het dialoogvenster Nieuwe Kolomversleutelsleutel. Wanneer u een kolomhoofdsleutel selecteert, moet u ervoor zorgen dat deze is ingesteld voor enclave-ondersteuning.

Tip

Als u wilt controleren of een kolomversleutelingssleutel enclave is ingeschakeld, klikt u er met de rechtermuisknop op in Objectverkenner en selecteert u Eigenschappen. Als de sleutel enclave-ingeschakeld is, Enclave-berekeningen: Toegestaan wordt weergegeven in het venster met de eigenschappen van de sleutel.

Sleutels die enclaves ondersteunen inrichten met PowerShell

Als u enclavesleutels wilt inrichten met behulp van PowerShell, hebt u versie 22 of hoger van de SqlServer PowerShell-module nodig.

Over het algemeen zijn PowerShell-sleutel inrichtingswerkstromen voor Always Encrypted (met en zonder scheiding van rollen), zoals beschreven in Always Encrypted-sleutels inrichten met behulp van PowerShell, ook van toepassing op enclavesleutels. In deze sectie worden details beschreven die specifiek zijn voor enclave-ondersteunde sleutels.

De SqlServer PowerShell-module breidt de New-SqlCertificateStoreColumnMasterKeySettings en New-SqlAzureKeyVaultColumnMasterKeySettings cmdlets uit met de parameter -AllowEnclaveComputations, zodat u een kolomhoofdsleutel kunt opgeven die enclave is ingeschakeld tijdens het inrichtingsproces. Cmdlet maakt een lokaal object met eigenschappen van een kolomhoofdsleutel (opgeslagen in Azure Key Vault of in het Windows-certificaatarchief). Indien opgegeven, markeert de eigenschap -AllowEnclaveComputations de sleutel als enclave ingeschakeld in het lokale object. Het zorgt er ook voor dat de cmdlet toegang krijgt tot de hoofdsleutel van de kolom waarnaar wordt verwezen (in Azure Key Vault of in Windows Certificate Store), om de eigenschappen van de sleutel digitaal te ondertekenen. Zodra u een instellingenobject voor een nieuwe kolomhoofdsleutel met enclave hebt gemaakt, kunt u dit gebruiken in een volgende aanroep van de cmdlet New-SqlColumnMasterKey cmdlet om een metagegevensobject te maken waarin de nieuwe sleutel in de database wordt beschreven.

Het inrichten van enclave-ingeschakelde kolomversleutelingssleutels verschilt niet van het inrichten van kolomversleutelingssleutels zonder enclave-ondersteuning. U hoeft er alleen voor te zorgen dat een kolomhoofdsleutel die wordt gebruikt voor het versleutelen van de nieuwe sleutel voor kolomversleuteling enclave is ingeschakeld.

Notitie

De SqlServer PowerShell-module biedt momenteel geen ondersteuning voor het inrichten van enclave-sleutels die zijn opgeslagen in hardwarebeveiligingsmodules (met CNG of CAPI).

Voorbeeld: enclavesleutels configureren met Windows-certificaatarchief

In het onderstaande end-to-end-voorbeeld ziet u hoe u enclave-ingeschakelde sleutels inricht, waarbij de kolomhoofdsleutel wordt opgeslagen in de Windows-certificaatopslag. Het script is gebaseerd op het voorbeeld in Windows-certificaatarchief zonder rolscheiding (voorbeeld). Belangrijk om te weten is het gebruik van de parameter -AllowEnclaveComputations in de New-SqlCertificateStoreColumnMasterKeySettings cmdlet, wat het enige verschil is tussen de werkstromen in de twee voorbeelden.

# 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

Voorbeeld: enclave-ingeschakelde sleutels inrichten met Azure Key Vault

In het onderstaande end-to-end-voorbeeld ziet u hoe u enclavesleutels inricht, waarbij de kolomhoofdsleutel wordt opgeslagen in een sleutelkluis in Azure Key Vault. Het script is gebaseerd op het voorbeeld in Azure Key Vault zonder rolscheiding (voorbeeld). Het is belangrijk om twee verschillen op te merken tussen de workflow voor sleutels met enclave-ondersteuning en die zonder enclave-ondersteuning.

  • In het onderstaande script gebruikt de New-SqlCertificateStoreColumnMasterKeySettings de parameter -AllowEnclaveComputations om de nieuwe kolomhoofdsleutel-enclave ingeschakeld te maken.
  • In het onderstaande script wordt de cmdlet Get-AzAccessToken gebruikt om een toegangstoken voor sleutelkluizen te verkrijgen. Dit is nodig omdat de New-SqlAzureKeyVaultColumnMasterKeySettings toegang moet hebben tot de Azure Key Vault om de eigenschappen van de kolomhoofdsleutel te ondertekenen.
# 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

Volgende stappen

Zie ook