Effettuare il provisioning delle chiavi abilitate per l'enclaveProvision enclave-enabled keys

Si applica a:Applies to: sìSQL Server 2019 (15.x)SQL Server 2019 (15.x)yesSQL Server 2019 (15.x)SQL Server 2019 (15.x) - Solo Windows Sìdatabase SQL di AzureAzure SQL DatabaseYesdatabase SQL di AzureAzure SQL DatabaseSi applica a:Applies to: sìSQL Server 2019 (15.x)SQL Server 2019 (15.x)yesSQL Server 2019 (15.x)SQL Server 2019 (15.x) - Windows only Sìdatabase SQL di AzureAzure SQL DatabaseYesdatabase SQL di AzureAzure SQL Database

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.This article describes how to provision enclave-enabled keys that support computations inside server-side secure enclaves used for Always Encrypted with secure enclaves.

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.The general guidelines and processes for managing Always Encrypted keys apply when you provision enclave-enabled keys. Questo articolo illustra dettagli specifici di Always Encrypted con enclave sicuri.This article address details specific to Always Encrypted with secure enclaves.

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.To provision an enclave-enabled column master key using SQL Server Management Studio or PowerShell, make sure the new key supports enclave computations. 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.This will cause the tool (SSMS or PowerShell) to generate the CREATE COLUMN MASTER KEY statement that sets the ENCLAVE_COMPUTATIONS in the columns master key metadata in the database. Per altre informazioni, vedere CREATE COLUMN MASTER KEY (Transact-SQL).For more information, see 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.The tool will also digitally sign the column master properties with the column master key, and it will store the signature in the database metadata. La firma impedisce la manomissione dell'impostazione ENCLAVE_COMPUTATIONS.The signature prevents malicious tampering with the ENCLAVE_COMPUTATIONS setting. I driver client SQL verificano le firme prima di consentire l'uso dell'enclave.The SQL client drivers verify the signatures before allowing the enclave use. In questo modo gli amministratori della sicurezza hanno il controllo sui dati di colonna che possono essere calcolati all'interno dell'enclave.This provides security administrators with control over which column data can be computed inside the enclave.

ENCLAVE_COMPUTATIONS non è modificabile, ovvero non è possibile cambiarlo dopo aver definito la chiave master di colonna nei metadati.The ENCLAVE_COMPUTATIONS is immutable, meaning, you can't change it once you define the column master key in the metadata. 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.To enable enclave computations using a column encryption key, that a given column master key encrypts, you need to rotate the column master key and replace it with an enclave-enabled column master key. Vedere Ruotare le chiavi abilitate per l'enclave.See Rotate enclave-enabled keys.

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.Currently, both SSMS and PowerShell support enclave-enabled column master keys stored in Azure Key Vault or Windows Certificate Store. I moduli di protezione hardware (che usano CNG o CAPI) non sono supportati.Hardware security modules (using CNG or CAPI) are not supported.

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.To create an enclave-enabled column encryption key, you need to ensure that you select an enclave-enabled column master key to encrypt the new key.

Le sezioni seguenti forniscono altri dettagli su come effettuare il provisioning di chiavi abilitate per l'enclave usando SSMS e PowerShell.The following sections provide more details on how to provision enclave-enabled keys using SSMS and PowerShell.

Effettuare il provisioning di chiavi abilitate per l'enclave con SQL Server Management StudioProvision enclave-enabled keys using SQL Server Management Studio

In SQL Server Management Studio è possibile effettuare il provisioning di:In SQL Server Management Studio you can provision:

  • Una chiave master di colonna abilitata per l'enclave usando la finestra di dialogo Nuova chiave master della colonna.An enclave-enabled column master key using the New Column Master Key dialog.
  • Una chiave di crittografia di colonna abilitata per l'enclave usando la finestra di dialogo Nuova chiave di crittografia della colonna.An enclave-enabled column encryption key using the New Column Encryption Key dialog.

Nota

La procedura guidata Always Encrypted attualmente non supporta la generazione di chiavi abilitate per l'enclave.The Always Encrypted wizard does not currently support generating enclave-enabled keys. È tuttavia possibile creare chiavi abilitate per l'enclave usando prima le finestre di dialogo precedenti e quindi, quando si esegue la procedura guidata, selezionare una crittografia di colonna abilitata per l'enclave già esistente per le colonne da crittografare.You can, however, create enclave-enabled keys using the above dialogs first, and then when you run the wizard, select an already existing enclave-enabled column encryption for columns that you want to encrypt.

Requisiti minimi della versione di SSMS:Minimum SSMS version requirements:

  • SSMS 18.3 quando si usa SQL ServerSQL Server.SSMS 18.3 when using SQL ServerSQL Server.
  • SSMS 18.8 quando si usa database SQL di AzureAzure SQL Database.SSMS 18.8 when using database SQL di AzureAzure SQL Database.

Effettuare il provisioning di chiavi master di colonna abilitate per l'enclave con la finestra di dialogo Nuova chiave master della colonnaProvision enclave-enabled column master keys with the New Column Master Key dialog

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.To provision an enclave-enabled column master key, follow the steps in Provision Column Master Keys with the New Column Master Key Dialog. Assicurarsi di selezionare Consenti calcoli enclave.Make sure you select Allow enclave computations. Vedere lo screenshot di seguito:See the below screenshot:

Consenti calcoli enclave

Nota

La casella di controllo Consenti calcoli enclave viene visualizzata solo se è configurata un'enclave sicura per il database.The Allow enclave computations checkbox appears only if a secure enclave is configured for your database. Se si usa SQL ServerSQL Server, vedere Configurare l'enclave sicura in SQL Server.If you are using SQL ServerSQL Server, see Configure the secure enclave in SQL Server. Se si usa database SQL di AzureAzure SQL Database, vedere Abilitare Intel SGX per il database SQL di Azure.If you are using database SQL di AzureAzure SQL Database, see Enable Intel SGX for your Azure SQL database.

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à.To check if a column master key is enclave-enabled, right-click on it in Object Explorer and select Properties. Se la chiave è abilitata per l'enclave, Calcoli dell'enclave: Consentiti viene visualizzato nella finestra che mostra le proprietà della chiave.If the key is enclave-enabled, Enclave Computations: Allowed appears in the window showing the properties of the key. In alternativa, è possibile usare la vista sys.column_master_keys (Transact-SQL).Alternativelly, you can use the sys.column_master_keys (Transact-SQL) view.

Effettuare il provisioning di chiavi di crittografia di colonna abilitate per l'enclave con la finestra di dialogo Nuova chiave di crittografia della colonnaProvision enclave-enabled column encryption keys with the New Column Encryption Key dialog

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.To provision an enclave-enabled column encryption key, follow the steps in Provision Column Encryption Keys with the New Column Encryption Key Dialog. Quando si seleziona una chiave master di colonna, assicurarsi che sia abilitata per l'enclave.When selecting a column master key, make sure it is enclave-enabled.

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à.To check if a column encryption key is enclave-enabled, right-click on it in Object Explorer and select Properties. Se la chiave è abilitata per l'enclave, Calcoli dell'enclave: Consentiti viene visualizzato nella finestra che mostra le proprietà della chiave.If the key is enclave-enabled, Enclave Computations: Allowed appears in the window showing the properties of the key.

Effettuare il provisioning delle chiavi abilitate per l'enclave con PowerShellProvision enclave-enabled keys using PowerShell

Per effettuare il provisioning di chiavi abilitate per l'enclave usando PowerShell, è necessario il modulo di PowerShell SqlServer versione 21.1.18179 o successiva.To provision enclave-enabled keys using PowerShell, you need the SqlServer PowerShell module version 21.1.18179 or higher.

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 general, PowerShell key provisioning workflows (with and without role separation) for Always Encrypted, described in Provision Always Encrypted Keys using PowerShell also apply to enclave-enabled keys. In questa sezione vengono fornite informazioni dettagliate sulle chiavi abilitate per l'enclave.This section describes details specific to enclave-enabled keys.

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.The SqlServer PowerShell module extends the New-SqlCertificateStoreColumnMasterKeySettings and New-SqlAzureKeyVaultColumnMasterKeySettings cmdlets with the -AllowEnclaveComputations parameter to allow you to specify a column master key that is enclave-enabled during the provisioning process. 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).Either cmdlet creates a local object containing properties of a column master key (stored in Azure Key Vault or in the Windows Certificate Store). Se specificata, la proprietà -AllowEnclaveComputations contrassegna la chiave come abilitata per l'enclave nell'oggetto localeIf specified, the -AllowEnclaveComputations property marks the key as enclave-enabled in the local object. 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.It also causes the cmdlet to access the referenced column master key (in Azure Key Vault or in Windows Certificate Store) to digitally sign the properties of the key. 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.Once you create a settings object for a new enclave-enabled column master key, you can use it in a subsequent invocation of the New-SqlColumnMasterKey cmdlet to create a metadata object describing the new key in the database.

Il provisioning delle chiavi di crittografia di colonna abilitate per l'enclave non è diverso dal provisioning delle chiavi di crittografia di colonna non abilitate per l'enclave.Provisioning enclave-enabled column encryption keys is no different from provisioning column encryption keys that are not enclave-enabled. È sufficiente assicurarsi che una chiave master di colonna usata per crittografare la nuova chiave di crittografia di colonna sia abilitata per l'enclave.You just need to make sure that a column master key used to encrypt the new column encryption key is enclave-enabled.

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).The SqlServer PowerShell module does not currently support provisioning enclave-enabled keys stored in hardware security modules (using CNG or CAPI).

Esempio - Effettuare il provisioning di chiavi abilitate per l'enclave usando l'archivio certificati WindowsExample - provision enclave-enabled keys using Windows Certificate Store

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.The below end-to-end example shows how to provision enclave-enabled keys, storing the column master key stored in Windows Certificate Store. Lo script è basato sull'esempio illustrato in Archivio certificati Windows senza separazione dei ruoli (esempio).The script is based on the example in Windows Certificate Store without Role Separation (Example). È importante notare l'uso del parametro -AllowEnclaveComputations nel cmdlet New-SqlCertificateStoreColumnMasterKeySettings, che è l'unica differenza tra i flussi di lavoro nei due esempi.Important to note is the use of the -AllowEnclaveComputations parameter in the New-SqlCertificateStoreColumnMasterKeySettings cmdlet, which is the only difference between the workflows in the two examples.

# 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"

# 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 VaultExample - provision enclave-enabled keys using Azure Key Vault

L'esempio end-to-end seguente illustra come effettuare il provisioning di chiavi abilitate per l'enclave, archiviando la chiave master di colonna in Azure Key Vault.The below end-to-end example shows how to provision enclave-enabled keys, storing the column master key in Azure Key Vault. Lo script è basato sull'esempio illustrato in Azure Key Vault senza separazione dei ruoli (esempio).The script is based on the example in Azure Key Vault without Role Separation (Example). 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.It's important to note two differences between the workflow for enclave-enabled keys compared to the keys that are not enclave-enabled.

# Create a column master key in Azure Key Vault.
Import-Module Az
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-AzureKeyVaultKey -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

# Authenticate to Azure - it is required before calling the next cmdlet.
Add-SqlAzureAuthenticationContext -Interactive

# Create a SqlColumnMasterKeySettings object for your column master key. 
$cmkSettings = New-SqlAzureKeyVaultColumnMasterKeySettings -KeyURL $akvKey.ID -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

Passaggi successiviNext Steps

Vedere ancheSee Also