Effettuare il provisioning delle chiavi abilitate per l'enclave
Si applica a: SQL Server 2019 (15.x) e versioni successive - Solo Windows Database SQL di Azure
Questo articolo descrive come effettuare il provisioning di chiavi abilitate per l'enclave che supportano i calcoli all'interno di enclave sicuri lato server usati per Always Encrypted con enclave sicuri.
Quando si effettua il provisioning di chiavi abilitate per l'enclave, si applicano le linee guida e i processi generali per la gestione delle chiavi Always Encrypted. Questo articolo illustra dettagli specifici di Always Encrypted con enclave sicuri.
Per effettuare il provisioning di una chiave master di colonna abilitata per l'enclave usando SQL Server Management Studio o PowerShell, verificare che la nuova chiave supporti i calcoli nell'enclave. In questo modo lo strumento (SSMS o PowerShell) genererà l'istruzione CREATE COLUMN MASTER KEY
che imposta ENCLAVE_COMPUTATIONS
nei metadati della chiave master delle colonne nel database. Per altre informazioni, vedere CREATE COLUMN MASTER KEY (Transact-SQL).
Lo strumento firmerà inoltre digitalmente le proprietà master della colonna con la chiave master della colonna e archivierà la firma nei metadati del database. La firma impedisce la manomissione dell'impostazione ENCLAVE_COMPUTATIONS
. I driver client SQL verificano le firme prima di consentire l'uso dell'enclave. In questo modo gli amministratori della sicurezza hanno il controllo sui dati di colonna che possono essere calcolati all'interno dell'enclave.
ENCLAVE_COMPUTATIONS
non è modificabile, ovvero non è possibile cambiarlo dopo aver definito la chiave master di colonna nei metadati. Per abilitare i calcoli nell'enclave usando una chiave di crittografia di colonna, crittografata da una determinata chiave master di colonna, è necessario ruotare la chiave master di colonna e sostituirla con una chiave master di colonna abilitata per l'enclave. Vedere Ruotare le chiavi abilitate per l'enclave.
Nota
Attualmente sia SSMS che PowerShell supportano le chiavi master di colonna abilitate per l'enclave archiviate in Azure Key Vault o nell'archivio certificati Windows. I moduli di protezione hardware (che usano CNG o CAPI) non sono supportati.
Per creare una chiave di crittografia di colonna abilitata per l'enclave, è necessario assicurarsi di selezionare una chiave master di colonna abilitata per l'enclave per crittografare la nuova chiave.
Le sezioni seguenti forniscono altri dettagli su come effettuare il provisioning di chiavi abilitate per l'enclave usando SSMS e PowerShell.
Effettuare il provisioning di chiavi abilitate per l'enclave con SQL Server Management Studio
In SQL Server Management Studio è possibile effettuare il provisioning di:
- Una chiave master di colonna abilitata per l'enclave usando la finestra di dialogo Nuova chiave master della colonna.
- Una chiave di crittografia di colonna abilitata per l'enclave usando la finestra di dialogo Nuova chiave di crittografia della colonna.
La procedura guidata di Always Encrypted consente anche di creare una chiave master della colonna abilitata per l'enclave e una chiave di crittografia della colonna abilitata per l'enclave.
Assicurarsi di aver installato la versione di disponibilità generale (GA) più recente di SQL Server Management Studio (SSMS).
Effettuare il provisioning di chiavi master di colonna abilitate per l'enclave con la finestra di dialogo Nuova chiave master della colonna
Per effettuare il provisioning di una chiave master di colonna abilitata per l'enclave, seguire i passaggi in Effettuare il provisioning delle chiavi master di colonna con la finestra di dialogo Nuova chiave master della colonna. Assicurarsi di selezionare Consenti calcoli enclave. Vedere lo screenshot di seguito:
Nota
La casella di controllo Consenti calcoli enclave viene visualizzata solo se è configurata un'enclave sicura per il database. Se si usa SQL Server, vedere Configurare l'enclave sicura in SQL Server. Se si usa Database SQL di Azure, vedere Abilitare Always Encrypted con enclave sicure per Database SQL di Azure.
Suggerimento
Per verificare se una chiave master di colonna è abilitata per l'enclave, fare clic con il pulsante destro del mouse su di essa in Esplora oggetti e scegliere Proprietà. Se la chiave è abilitata per l'enclave, appare Calcoli dell'enclave: consentiti nella finestra che mostra le proprietà della chiave. In alternativa, è possibile usare la vista sys.column_master_keys (Transact-SQL).
Effettuare il provisioning di chiavi di crittografia di colonna abilitate per l'enclave con la finestra di dialogo Nuova chiave di crittografia della colonna
Per effettuare il provisioning di una chiave di crittografia di colonna abilitata per l'enclave, seguire i passaggi in Effettuare il provisioning delle chiavi di crittografia di colonna con la finestra di dialogo Nuova chiave di crittografia della colonna. Quando si seleziona una chiave master di colonna, assicurarsi che sia abilitata per l'enclave.
Suggerimento
Per verificare se una chiave di crittografia di colonna è abilitata per l'enclave, fare clic con il pulsante destro del mouse su di essa in Esplora oggetti e scegliere Proprietà. Se la chiave è abilitata per l'enclave, appare Calcoli dell'enclave: consentiti nella finestra che mostra le proprietà della chiave.
Effettuare il provisioning delle chiavi abilitate per l'enclave con PowerShell
Per effettuare il provisioning di chiavi abilitate per l'enclave usando PowerShell, è necessario il modulo di PowerShell SqlServer versione 22 o successiva.
In generale, i flussi di lavoro di provisioning delle chiavi di PowerShell (con e senza separazione dei ruoli) per Always Encrypted, descritti in Effettuare il provisioning di chiavi Always Encrypted con PowerShell si applicano anche alle chiavi abilitate per enclave. In questa sezione vengono fornite informazioni dettagliate sulle chiavi abilitate per l'enclave.
Il modulo di PowerShell SqlServer estende i cmdlet New-SqlCertificateStoreColumnMasterKeySettings e New-SqlAzureKeyVaultColumnMasterKeySettings con il parametro -AllowEnclaveComputations
per consentire di specificare una chiave master di colonna abilitata per l'enclave durante il processo di provisioning. Entrambi i cmdlet creano un oggetto locale contenente le proprietà di una chiave master di colonna (archiviata in Azure Key Vault o nell'archivio certificati Windows). Se specificata, la proprietà -AllowEnclaveComputations
contrassegna la chiave come abilitata per l'enclave nell'oggetto locale e fa anche in modo che il cmdlet acceda alla chiave master di colonna a cui si fa riferimento (in Azure Key Vault o nell'archivio certificati Windows) per firmare digitalmente le proprietà della chiave. Dopo aver creato un oggetto impostazioni per una nuova chiave master di colonna abilitata per l'enclave, è possibile usarlo in una chiamata successiva del cmdlet New-SqlColumnMasterKey per creare un oggetto metadati che descrive la nuova chiave nel database.
Il provisioning delle chiavi di crittografia della colonna abilitate per l'enclave non è diverso dal provisioning delle chiavi di crittografia di colonna non abilitate per l'enclave. È sufficiente assicurarsi che una chiave master di colonna usata per crittografare la nuova chiave di crittografia di colonna sia abilitata per l'enclave.
Nota
Il modulo di PowerShell SqlServer non supporta attualmente il provisioning di chiavi abilitate per l'enclave archiviate in moduli di protezione hardware (tramite CNG o CAPI).
Esempio - Effettuare il provisioning di chiavi abilitate per l'enclave usando l'archivio certificati Windows
L'esempio end-to-end seguente illustra come effettuare il provisioning di chiavi abilitate per l'enclave, archiviando la chiave master di colonna archiviata nell'archivio certificati Windows. Lo script è basato sull'esempio illustrato in Archivio certificati Windows senza separazione dei ruoli (esempio). È importante notare l'uso del parametro -AllowEnclaveComputations
nel cmdlet New-SqlCertificateStoreColumnMasterKeySettings, che è l'unica differenza tra i flussi di lavoro nei due esempi.
# 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
Esempio - Effettuare il provisioning di chiavi abilitate per l'enclave usando Azure Key Vault
L'esempio end-to-end seguente illustra come effettuare il provisioning di chiavi abilitate per l'enclave, archiviando la chiave master della colonna in un insieme di credenziali delle chiavi in Azure Key Vault. Lo script è basato sull'esempio illustrato in Azure Key Vault senza separazione dei ruoli (esempio). Esistono due importanti differenze tra il flusso di lavoro per le chiavi abilitate per l'enclave e quello per le chiavi non abilitate per l'enclave.
- Nello script seguente New-SqlCertificateStoreColumnMasterKeySettings usa il parametro
-AllowEnclaveComputations
per abilitare per l'enclave la nuova chiave master di colonna. - Lo script seguente usa il cmdlet Get-AzAccessToken per ottenere un token di accesso per gli insiemi di credenziali delle chiavi. Questo è necessario perché New-SqlAzureKeyVaultColumnMasterKeySettings deve avere accesso ad Azure Key Vault per firmare le proprietà della chiave chiave master della colonna.
# 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
Passaggi successivi
- Eseguire istruzioni Transact-SQL con enclave sicure
- Configurare la crittografia delle colonne sul posto usando Always Encrypted con enclave sicuri
- Abilitare Always Encrypted con enclave sicuri per le colonne crittografate esistenti
- Sviluppare applicazioni usando Always Encrypted con enclave sicuri