Sdílet prostřednictvím


Zřízení klíčů s podporou enklávy

platí pro: SQL Server 2019 (15.x) a novější – Pouze Windows Azure SQL Database

Tento článek popisuje, jak poskytnout klíče podporující enklávy, které umožňují výpočty uvnitř bezpečných oblastí na straně serveru, používaných pro Always Encrypted se zabezpečenými enklávami.

Obecné pokyny a procesy pro správu klíčů Always Encrypted se použijí při zřizování klíčů s enklávou. Tento článek popisuje podrobnosti týkající se funkce Always Encrypted se zabezpečenými enklávy.

Pokud chcete zřídit hlavní klíč sloupce s podporou enklávy pomocí aplikace SQL Server Management Studio nebo PowerShellu, ujistěte se, že nový klíč podporuje výpočty enklávy. To způsobí, že nástroj (SSMS nebo PowerShell) vygeneruje příkaz CREATE COLUMN MASTER KEY, který nastaví ENCLAVE_COMPUTATIONS v metadatech hlavního klíče sloupců v databázi. Pro více informací si přečtěte CREATE COLUMN MASTER KEY (Transact-SQL).

Nástroj také digitálně podepíše hlavní vlastnosti sloupce pomocí hlavního klíče sloupce a uloží podpis do metadat databáze. Podpis zabraňuje škodlivé manipulaci s nastavením ENCLAVE_COMPUTATIONS. Ovladače klienta SQL ověřují podpisy před povolením použití enklávy. Správci zabezpečení tak mají kontrolu nad tím, která data sloupců se dají vypočítat uvnitř enklávy.

ENCLAVE_COMPUTATIONS je neměnný, což znamená, že ho nemůžete změnit, jakmile v metadatech definujete hlavní klíč sloupce. Pokud chcete povolit výpočty enklávy pomocí šifrovacího klíče sloupce, který daný hlavní klíč sloupce šifruje, musíte otočit hlavní klíč sloupce a nahradit ho hlavním klíčem sloupce s podporou enklávy. Viz Rotovat enklávou podporované klíče.

Poznámka

V současné době jak SSMS, tak PowerShell podporují hlavní klíče sloupců s podporou enklávy, které jsou uloženy ve službě Azure Key Vault nebo ve Windows Certificate Store. Moduly hardwarového zabezpečení (používající CNG nebo CAPI) se nepodporují.

Pokud chcete vytvořit šifrovací klíč sloupce s podporou enklávy, musíte zajistit, že pro šifrování tohoto nového klíče vyberete hlavní klíč sloupce s podporou enklávy.

V následujících částech najdete další podrobnosti o tom, jak zřizovat klíče s podporou enklávy pomocí SSMS a PowerShellu.

Zřízení klíčů s podporou enklávy pomocí aplikace SQL Server Management Studio

V aplikaci SQL Server Management Studio můžete zřídit:

  • Hlavní klíč sloupce s podporou pro enklávy s použitím dialogového okna Nový hlavní klíč sloupce.
  • Šifrovací klíč sloupce s podporou enklávy pomocí dialogového okna Nový šifrovací klíč sloupce.

Průvodce Always Encrypted také umožňuje vytvořit hlavní klíč sloupce s podporou enklávy a šifrovací klíč sloupce s podporou enklávy.

Ujistěte se, že máte nainstalovanou nejnovější obecně dostupnou verzi aplikace SQL Server Management Studio (SSMS).

Zřízení hlavních klíčů sloupců s podporou enklávy pomocí dialogového okna Nový hlavní klíč sloupce

Pokud chcete zřídit hlavní klíč sloupce s podporou enklávy, postupujte podle pokynů v tématu Zřízení hlavních klíčů sloupců pomocí dialogového okna Hlavní klíč nového sloupce. Ujistěte se, že jste vybrali Povolit výpočty enklávy. Podívejte se na následující snímek obrazovky:

Povolit výpočty pro enklávu

Poznámka

Zaškrtávací políčko Povolit výpočty enklávy se zobrazí jenom v případě, že je pro vaši databázi nakonfigurovaná zabezpečená enkláva. Pokud používáte SQL Server, přečtěte si téma Konfigurace zabezpečené enklávy v SYSTÉMU SQL Server. Pokud používáte Azure SQL Database, přečtěte si téma Povolení funkce Always Encrypted se zabezpečenými enklávy pro službu Azure SQL Database.

Spropitné

Chcete-li zkontrolovat, zda je hlavní klíč sloupce povolen pro enklávu, klikněte na něj pravým tlačítkem v Průzkumníku objektů a vyberte Vlastnosti. Pokud je klíč s povolenou podporou enklávy, Enclave Computations: Allowed se zobrazí v okně s vlastnostmi klíče. Alternativně můžete použít pohled sys.column_master_keys (Transact-SQL).

Zřízení šifrovacích klíčů sloupců s podporou enklávy pomocí dialogového okna Nový šifrovací klíč sloupce

Pokud chcete zřídit šifrovací klíč sloupce s podporou enklávy, postupujte podle kroků v Zřízení šifrovacích klíčů sloupců pomocí dialogového okna Nový šifrovací klíč sloupce. Při výběru hlavního klíče sloupce se ujistěte, že je povolená enkláva.

Spropitné

Pokud chcete zkontrolovat, jestli je šifrovací klíč sloupce povolený, klikněte na něj pravým tlačítkem v Průzkumníku objektů a vyberte Vlastnosti. Pokud je klíč zapnutý pro enklávu, Výpočty enklávy: Povolené se zobrazí v okně s vlastnostmi klíče.

Zřízení klíčů s podporou enklávy pomocí PowerShellu

Pokud chcete zřídit klíče s podporou enklávy pomocí PowerShellu, potřebujete modul SqlServer PowerShell verze 22 nebo vyšší.

Obecně platí, že pracovní postupy zřizování klíčů PowerShellu (s oddělením rolí a bez rolí) pro Always Encrypted popsané v tématu Zřízení klíčů Always Encrypted pomocí PowerShellu platí také pro klíče s podporou enklávy. Tato část popisuje podrobnosti specifické pro klíče s podporou enklávy.

Modul SqlServer pro PowerShell rozšiřuje cmdlety New-SqlCertificateStoreColumnMasterKeySettings a New-SqlAzureKeyVaultColumnMasterKeySettings o parametr -AllowEnclaveComputations, který umožňuje během procesu zřizování zadat hlavní klíč sloupce povolený pro enclave. Buď rutina vytvoří místní objekt obsahující vlastnosti hlavního klíče sloupce (uložený ve službě Azure Key Vault nebo ve Windows Certificate Storu). Pokud je zadáno, vlastnost -AllowEnclaveComputations označí klíč jako místní objekt s povoleným přístupem pro enklávu. Také způsobí, že rutina přistupuje k hlavnímu klíči odkazovaného sloupce (ve službě Azure Key Vault nebo ve Windows Certificate Storu), aby digitálně podepisovala vlastnosti klíče. Jakmile vytvoříte objekt nastavení pro nový hlavní klíč sloupce s podporou enklávy, můžete ho použít při následném vyvolání rutiny New-SqlColumnMasterKey k vytvoření objektu metadat popisujícího nový klíč v databázi.

Zřizování šifrovacích klíčů sloupců s podporou enklávy se nijak neliší od zřizování šifrovacích klíčů sloupců, které nejsou povolené enklávou. Stačí se ujistit, že hlavní klíč sloupce, který je použit k šifrování nového šifrovacího klíče sloupce, je povoleno pro enklávu.

Poznámka

Modul SqlServer PowerShell v současné době nepodporuje zřizování klíčů s podporou enklávy uložených v modulech hardwarového zabezpečení (pomocí CNG nebo CAPI).

Příklad – zřízení klíčů s povolenou enklávou pomocí Úložiště certifikátů Windows

Následující příklad end-to-end ukazuje, jak zřídit klíče umožňující využití enkláv a jak uložit hlavní klíč sloupce v úložišti certifikátů Windows. Skript je založen na příkladu v windows Certificate Store bez oddělení rolí (příklad). Důležité je poznamenat použití parametru -AllowEnclaveComputations v rutině New-SqlCertificateStoreColumnMasterKeySettings, což je jediný rozdíl mezi pracovními postupy v obou příkladech.

# 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

Příklad – zřízení klíčů s podporou enklávy pomocí služby Azure Key Vault

Následující kompletní příklad ukazuje, jak nastavit klíče umožňující enklávu a uložit hlavní klíč sloupce do trezoru klíčů v Azure Key Vault. Skript je založený na příkladu ve službě Azure Key Vault bez oddělení rolí (příklad). Je důležité si uvědomit dva rozdíly mezi pracovním postupem pro klíče s podporou enklávy oproti klíčům, které nemají podporu enklávy.

  • V následujícím skriptu New-SqlCertificateStoreColumnMasterKeySettings používá parametr -AllowEnclaveComputations k povolení nového hlavního klíče sloupce.
  • Následující skript používá rutinu Get-AzAccessToken k získání přístupového tokenu pro trezory klíčů. To je nezbytné, protože New-SqlAzureKeyVaultColumnMasterKeySettings musí mít přístup ke službě Azure Key Vault pro podepsání vlastností hlavního klíče sloupce.
# 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

Další kroky

Viz také