Creare e archiviare chiavi master della colonna per Always Encrypted
Si applica a: SQL Server Database SQL di Azure Istanza gestita di SQL di Azure
Lechiavi master della colonna proteggono le chiavi usate in Always Encrypted per crittografare le chiavi di crittografia della colonna. Le chiavi master della colonna devono essere archiviate in un archivio attendibile e devono essere accessibili alle applicazioni che le richiedono per crittografare o decrittografare i dati e agli strumenti per la configurazione di Always Encrypted e la gestione delle chiavi di Always Encrypted.
Questo articolo fornisce informazioni dettagliate per la selezione di un archivio chiavi e la creazione di chiavi master della colonna per Always Encrypted. Per una panoramica dettagliata, vedere Overview of Key Management for Always Encrypted (Panoramica della gestione delle chiavi per Always Encrypted).
Scelta di un archivio chiavi per la chiave master della colonna
Always Encrypted supporta più archivi chiavi per l'archiviazione di chiavi master della colonna Always Encrypted. Gli archivi chiavi supportati variano a seconda dei driver e della versione in uso.
Esistono due categorie generali di archivi da considerare: gli archivi chiavi localie gli archivi chiavi centralizzati.
Archivio chiavi centralizzato o locale?
Gliarchivi chiavi locali possono essere usati solo dalle applicazioni nei computer che contengono l'archivio chiavi locale. In altre parole, è necessario replicare l'archivio chiavi e la chiave per ogni computer che esegue l'applicazione. Un esempio di archivio chiavi locale è l'archivio certificati Windows. Quando si usa un archivio chiavi locale, è necessario verificare che l'archivio chiavi esista in ogni computer che ospita l'applicazione e che il computer contenga le chiavi master della colonna richieste dall'applicazione per accedere ai dati protetti con Always Encrypted. Quando si esegue il provisioning di una chiave master della colonna per la prima volta o quando si modifica (ruota) la chiave, è necessario verificare che la chiave venga distribuita a tutti i computer che ospitano una o più applicazioni.
Gliarchivi chiavi centralizzati vengono usati dalle applicazioni in più computer. Un esempio di archivio chiavi centralizzato è un insieme di credenziali delle chiavi di Azure. Un archivio chiavi centralizzato in genere facilita la gestione delle chiavi perché non è necessario avere più copie delle chiavi master della colonna in più computer. Verificare che le applicazioni siano configurate per la connessione all'archivio chiavi centralizzato.
Quali sono gli archivi chiavi supportati nei driver dei client abilitati per Always Encrypted?
I driver dei client abilitati per Always Encrypted sono driver dei client di SQL Server con un supporto predefinito che consente di incorporare Always Encrypted nelle applicazioni client. I driver abilitati per Always Encrypted includono alcuni provider predefiniti per gli archivi chiavi più diffusi. Alcuni driver consentono anche di implementare e registrare un provider di archivio della chiave master della colonna personalizzato, in modo che sia possibile usare qualsiasi archivio chiavi, anche se non è disponibile un provider predefinito specifico. Quando si sceglie tra un provider predefinito e un provider personalizzato considerare che l'utilizzo un provider predefinito in genere implica meno modifiche alle applicazioni. In alcuni casi, è richiesta solo la modifica a una stringa di connessione del database.
I provider predefiniti disponibili dipendono dal driver, dalla versione del driver e dal sistema operativo selezionati. Consultare la documentazione di Always Encrypted per il driver specifico per determinare quali archivi chiavi sono supportati in modo predefinito e se il driver supporta provider di archivi chiavi personalizzati - Sviluppare applicazioni usando Always Encrypted.
Quali archivi chiavi sono supportati negli strumenti SQL?
SQL Server Management Studio, Azure Data Studio e il modulo SqlServer di PowerShell supportano le chiavi master della colonna archiviate in:
Insieme di credenziali delle chiavi e HSM gestiti in Azure Key Vault.
Nota
Gli HSM gestiti richiedono SSMS 18.9 o versioni successive e il modulo SqlServer di PowerShell versione 21.1.18235 o successive. Attualmente Azure Data Studio non supporta gli HSM gestiti.
Archivio certificati Windows.
Archivi di chiavi, ad esempio il modulo di protezione hardware, che forniscono API Cryptography Next Generation (CNG) o API di crittografia (CAPI).
Creazione di chiavi master della colonna nell'archivio certificati Windows
Una chiave master della colonna può essere un certificato archiviato nell'archivio certificati Windows. Un driver abilitato per Always Encrypted non verifica la data di scadenza o una catena di autorità di certificazione. Un certificato viene usato semplicemente come una coppia di chiavi composta da una chiave pubblica e da una privata.
Per essere una chiave master della colonna valida, un certificato deve:
- essere un certificato X.509.
- essere archiviato in uno dei percorsi dell'archivio certificati: computer locale o utente corrente. Per creare un certificato nel percorso dell'archivio certificati del computer locale, è necessario essere un amministratore nel computer di destinazione.
- contenere una chiave privata. La lunghezza consigliata delle chiavi nel certificato è di 2048 bit o superiore.
- essere creato per lo scambio di chiavi.
Esistono diversi modi per creare un certificato che corrisponda a una chiave master della colonna valida, ma l'opzione più semplice consiste nel creare un certificato autofirmato.
Creare un certificato autofirmato con PowerShell
Usare il cmdlet New-SelfSignedCertificate per creare un certificato autofirmato. L'esempio seguente mostra come generare un certificato che può essere usato come chiave master della colonna per Always Encrypted.
# New-SelfSignedCertificate is a Windows PowerShell cmdlet that creates a self-signed certificate. The below examples show how to generate a certificate that can be used as a column master key for Always Encrypted.
$cert = New-SelfSignedCertificate -Subject "AlwaysEncryptedCert" -CertStoreLocation Cert:CurrentUser\My -KeyExportPolicy Exportable -Type DocumentEncryptionCert -KeyUsage KeyEncipherment -KeySpec KeyExchange -KeyLength 2048
# To create a certificate in the local machine certificate store location you need to run the cmdlet as an administrator.
$cert = New-SelfSignedCertificate -Subject "AlwaysEncryptedCert" -CertStoreLocation Cert:LocalMachine\My -KeyExportPolicy Exportable -Type DocumentEncryptionCert -KeyUsage KeyEncipherment -KeySpec KeyExchange -KeyLength 2048
Creare un certificato autofirmato usando SQL Server Management Studio (SSMS)
Per informazioni dettagliate, vedere Effettuare il provisioning di chiavi Always Encrypted con SQL Server Management Studio. Per un'esercitazione dettagliata che usa SQL Server Management Studio e archivia le chiavi di Always Encrypted nell'archivio certificati Windows, vedere l' esercitazione guidata su Always Encrypted (archivio certificati Windows).
Rendere disponibili i certificati a utenti e applicazioni
Se la chiave master della colonna è un certificato archiviato nel percorso dell'archivio certificati del computer locale , è necessario esportare il certificato con la chiave privata e importarlo in tutti i computer che ospitano le applicazioni che si prevede eseguiranno la crittografia o la decrittografia dei dati archiviati nelle colonne crittografate oppure negli strumenti per la configurazione di Always Encrypted e per la gestione delle chiavi di Always Encrypted. Inoltre, a ogni utente deve essere concessa un'autorizzazione di lettura per il certificato archiviato nel percorso dell'archivio certificati del computer locale per poter usare il certificato come una chiave master della colonna.
Se la chiave master della colonna è un certificato archiviato nel percorso dell'archivio certificati dell' utente corrente , è necessario esportare il certificato con la chiave privata e importarlo nel percorso dell'archivio certificati dell'utente corrente di tutti gli account che eseguono le applicazioni che si prevede eseguiranno la crittografia o la decrittografia dei dati archiviati nelle colonne crittografate oppure negli strumenti per la configurazione di Always Encrypted e per la gestione delle chiavi di Always Encrypted, in tutti i computer che contengono tali applicazioni/strumenti. Non è necessaria la configurazione dell'autorizzazione: dopo l'accesso a un computer, un utente può accedere a tutti i certificati nel percorso dell'archivio certificati dell'utente corrente.
Tramite PowerShell
Usare i cmdlet Import-PfxCertificate ed Export-PfxCertificate per importare ed esportare un certificato.
Uso di Microsoft Management Console
Per concedere all'utente l'autorizzazione di lettura per un certificato archiviato nel percorso dell'archivio certificati del computer locale, seguire questi passaggi:
- Aprire un prompt dei comandi e digitare mmc.
- Nella console di MMC, nel File menu, fare clic su Aggiungi/Rimuovi Snap-in.
- Nella finestra di dialogo Aggiungi/Rimuovi snap-in fare clic su Aggiungi.
- Nella finestra di dialogo Aggiungi snap-in autonomo fare clic su Certificatie quindi su Aggiungi.
- Nella finestra di dialogo Snap-in certificati fare clic su Account del computere quindi su Fine.
- Nella finestra di dialogo Aggiungi snap-in autonomo fare clic su Chiudi.
- Nella finestra di dialogo Aggiungi/Rimuovi snap-in fare clic su OK.
- Nello snap-in Certificati, trovare il certificato nella cartella Certificati > Personale, fare clic con il pulsante destro del mouse sul certificato, scegliere Tutte le attività e quindi fare clic su Gestisci chiavi private.
- Nella finestra di dialogo Sicurezza aggiungere le autorizzazioni di lettura per un account utente, se necessario.
Creazione di chiavi master della colonna nell'insieme di credenziali delle chiavi di Azure
Azure Key Vault contribuisce a proteggere i segreti e le chiavi crittografiche e rappresenta una scelta valida per l'archiviazione delle chiavi master della colonna per Always Encrypted, soprattutto se le applicazioni sono ospitate in Azure. Per creare una chiave nell' insieme di credenziali delle chiavi di Azure, è necessario una sottoscrizione di Azure e un insieme di credenziali delle chiavi di Azure. Una chiave può essere archiviata in un insieme di credenziali delle chiavi o in un HSM gestito. Per essere una chiave master della colonna valida, la chiave gestita in Azure Key Vault deve essere una chiave RSA.
Uso dell'interfaccia della riga di comando di Azure, del portale di Azure o di PowerShell
Per informazioni su come creare una chiave in un insieme di credenziali delle chiavi, vedere:
- Guida introduttiva: Impostare e riprendere un segreto da Azure Key Vault tramite l'interfaccia della riga di comando di Azure
- Guida introduttiva: Impostare e riprendere una chiave gestita da Azure Key Vault tramite Azure PowerShell
- Guida introduttiva: Impostare e riprendere un segreto da Azure Key Vault tramite il portale di Azure
Per informazioni su come creare una chiave in un HSM gestito, vedere:
SQL Server Management Studio (SSMS)
Per informazioni dettagliate su come creare una chiave master della colonna in un insieme di credenziali delle chiavi o in un HSM gestito in Azure Key Vault usando SSMS, vedere Effettuare il provisioning di chiavi Always Encrypted con SQL Server Management Studio. Per un'esercitazione dettagliata che usa SSMS e archivia le chiavi di Always Encrypted in un insieme di credenziali delle chiavi, vedere l'esercitazione sulla procedura guidata di Always Encrypted (Azure Key Vault).
Rendere disponibili le chiavi dell'insieme di credenziali delle chiavi di Azure ad applicazioni e utenti
Per accedere a una colonna crittografata, l'applicazione deve essere in grado di accedere ad Azure Key Vault e necessita anche di autorizzazioni specifiche per la chiave master della colonna per decriptare la chiave di crittografia della colonna che protegge la colonna.
Per gestire le chiavi per Always Encrypted, sono necessarie autorizzazioni per elencare e creare chiavi master della colonna in Azure Key Vault e per eseguire operazioni di crittografia usando le chiavi.
Insiemi di credenziali delle chiavi
Se si archiviano le chiavi master della colonna in un insieme di credenziali delle chiavi e si usano le autorizzazioni del ruolo per l'autorizzazione:
L'identità dell'applicazione deve essere un membro dei ruoli che consentono le azioni del piano dati seguenti nell'insieme di credenziali delle chiavi:
- Microsoft.KeyVault/vaults/keys/decrypt/action
- Microsoft.KeyVault/vaults/keys/read
- Microsoft.KeyVault/vaults/keys/verify/action
Il modo più semplice per concedere all'applicazione l'autorizzazione necessaria consiste nell'aggiungere la propria identità al ruolo Utente della crittografia di Key Vault. È possibile creare un ruolo personalizzato anche con le autorizzazioni necessarie.
Un utente che gestisce le chiavi per Always Encrypted deve essere un membro o un ruolo che consentano le azioni del piano dati seguenti nell'insieme di credenziali delle chiavi:
- Microsoft.KeyVault/vaults/keys/create/action
- Microsoft.KeyVault/vaults/keys/decrypt/action
- Microsoft.KeyVault/vaults/keys/encrypt/action
- Microsoft.KeyVault/vaults/keys/read
- Microsoft.KeyVault/vaults/keys/sign/action
- Microsoft.KeyVault/vaults/keys/verify/action
Il modo più semplice per concedere all'utente l'autorizzazione necessaria consiste nell'aggiungere l'utente al ruolo Utente della crittografia di Key Vault. È possibile creare un ruolo personalizzato anche con le autorizzazioni necessarie.
Se si archiviano le chiavi master della colonna in un insieme di credenziali delle chiavi e si usano i criteri di accesso per l'autorizzazione:
- L'identità di applicazione richiede le autorizzazioni seguenti per i criteri di accesso per l'insieme di credenziali delle chiavi: get, unwrapKey e verify.
- Un utente che gestisce le chiavi per Always Encrypted necessita delle autorizzazioni seguenti per i criteri di accesso nell'insieme di credenziali delle chiavi: create, get, list, sign, unwrapKey, wrapKey, verify.
Per informazioni generali su come configurare l'autenticazione e l'autorizzazione per gli insiemi di credenziali delle chiavi, vedere Autorizzare un'entità di sicurezza ad accedere a Key Vault.
HSM gestiti
L'identità di applicazione deve essere membro di ruoli che consentono le azioni del piano dati seguenti nell'HSM gestito:
- Microsoft.KeyVault/managedHsm/keys/decrypt/action
- Microsoft.KeyVault/managedHsm/keys/read/action
- Microsoft.KeyVault/managedHsm/keys/verify/action
Microsoft consiglia di creare un ruolo personalizzato contenente solo le autorizzazioni precedenti.
Un utente che gestisce le chiavi per Always Encrypted deve essere un membro o un ruolo che consentano le azioni del piano dati seguenti sulle chiavi:
- Microsoft.KeyVault/managedHsm/keys/create/action
- Microsoft.KeyVault/managedHsm/keys/decrypt/action
- Microsoft.KeyVault/managedHsm/keys/encrypt/action
- Microsoft.KeyVault/managedHsm/keys/read
- Microsoft.KeyVault/managedHsm/keys/sign/action
- Microsoft.KeyVault/managedHsm/keys/verify/action
Il modo più semplice per concedere all'utente le autorizzazioni precedenti consiste nell'aggiungere l'utente al ruolo Utente della crittografia dell'HSM gestito. È possibile creare un ruolo personalizzato anche con le autorizzazioni necessarie.
Per ulteriori informazioni sul controllo di accesso per gli HSM gestiti, vedere:
- Controllo di accesso per il modulo di protezione hardware gestito
- Ruoli predefiniti del controllo degli accessi in base al ruolo locale per l'HSM gestito.
Creazione di chiavi master della colonna nei moduli di protezione hardware con CNG
Una chiave master della colonna per Always Encrypted può essere archiviata in un archivio chiavi che implementa l'API Cryptography Next Generation (CNG). In genere, questo tipo di archivio è un modulo di protezione hardware (HSM). Un modulo di protezione hardware (HSM) è un dispositivo fisico che protegge e gestisce le chiavi digitali e fornisce l'elaborazione della crittografia. I moduli di protezione hardware vengono generalmente forniti come schede plug-in o dispositivi esterni collegati direttamente a un computer (HSM locale) o a un server di rete.
Per rendere disponibile un modulo di protezione hardware alle applicazioni di un determinato computer, è necessario installare e configurare un provider di archiviazione chiavi (KSP) che implementa CNG nel computer. Un driver del client Always Encrypted, ovvero un provider di archivio della chiave master della colonna interno al driver, usa il provider di archiviazione chiavi per crittografare e decrittografare le chiavi di crittografia della colonna, protette con la chiave master della colonna archiviata nell'archivio chiavi.
Windows include il provider di archiviazione chiavi del software Microsoft, un provider di archiviazione chiavi basato su software che è possibile usare per i test. Vedere CNG Key Storage Providers (Provider di archiviazione chiavi CNG).
Creazione di chiavi master della colonna in un archivio chiavi con CNG/KSP
Una chiave master della colonna deve essere una chiave asimmetrica, ovvero una coppia di chiavi pubblica/privata, che usa l'algoritmo RSA. La lunghezza della chiave consigliata è di almeno 2048.
Utilizzo degli strumenti specifici per il modulo di protezione hardware
Vedere la documentazione per il modulo di protezione hardware.
Tramite PowerShell
È possibile usare le API .NET per creare una chiave in un archivio chiavi usando CNG in PowerShell.
$cngProviderName = "Microsoft Software Key Storage Provider" # If you have an HSM, you can use a KSP for your HSM instead of a Microsoft KSP
$cngAlgorithmName = "RSA"
$cngKeySize = 2048 # Recommended key size for Always Encrypted column master keys
$cngKeyName = "AlwaysEncryptedKey" # Name identifying your new key in the KSP
$cngProvider = New-Object System.Security.Cryptography.CngProvider($cngProviderName)
$cngKeyParams = New-Object System.Security.Cryptography.CngKeyCreationParameters
$cngKeyParams.provider = $cngProvider
$cngKeyParams.KeyCreationOptions = [System.Security.Cryptography.CngKeyCreationOptions]::OverwriteExistingKey
$keySizeProperty = New-Object System.Security.Cryptography.CngProperty("Length", [System.BitConverter]::GetBytes($cngKeySize), [System.Security.Cryptography.CngPropertyOptions]::None);
$cngKeyParams.Parameters.Add($keySizeProperty)
$cngAlgorithm = New-Object System.Security.Cryptography.CngAlgorithm($cngAlgorithmName)
$cngKey = [System.Security.Cryptography.CngKey]::Create($cngAlgorithm, $cngKeyName, $cngKeyParams)
Utilizzo di SQL Server Management Studio
Vedere Effettuare il provisioning di chiavi Always Encrypted con SQL Server Management Studio.
Rendere disponibili le chiavi CNG a utenti e applicazioni
Vedere la documentazione per il modulo di protezione hardware e il provider di archiviazione chiavi per informazioni su come configurare il provider di archiviazione chiavi in un computer e su come concedere l'accesso al modulo di protezione hardware a utenti e applicazioni.
Creazione di chiavi master della colonna nei moduli di protezione hardware con CAPI
Una chiave master della colonna per Always Encrypted può essere archiviata in un archivio chiavi che implementa l'API Cryptography (CAPI). In genere, questo tipo di archivio è un modulo di protezione hardware (HSM), ovvero un dispositivo fisico che protegge e gestisce le chiavi digitali e fornisce l'elaborazione della crittografia. I moduli di protezione hardware vengono generalmente forniti come schede plug-in o dispositivi esterni collegati direttamente a un computer (HSM locale) o a un server di rete.
Per rendere disponibile un modulo di protezione hardware alle applicazioni di un determinato computer, è necessario installare e configurare un provider del servizio di crittografia (CSP) che implementa CAPI nel computer. Un driver del client Always Encrypted, ovvero un provider di archivio della chiave master della colonna interno al driver, usa il provider del servizio di crittografia per crittografare e decrittografare le chiavi di crittografia della colonna, protette con la chiave master della colonna archiviata nell'archivio chiavi.
Nota
CAPI è un'API legacy deprecata. Se è disponibile un provider di archiviazione chiavi per il modulo di protezione hardware, è necessario usare quello invece di CSP/CAPI.
Un provider del servizio di crittografia deve supportare l'algoritmo RSA da usare con Always Encrypted.
Windows include i provider del servizio di crittografia seguenti basati su software, ovvero non supportati da un modulo di protezione hardware, che supportano RSA e che possono essere usati per i test: Microsoft Enhanced RSA e AES Cryptographic Provider.
Creazione di chiavi master della colonna in un archivio chiavi con CAPI/CSP
Una chiave master della colonna deve essere una chiave asimmetrica, ovvero una coppia di chiavi pubblica/privata, che usa l'algoritmo RSA. La lunghezza della chiave consigliata è di almeno 2048.
Utilizzo degli strumenti specifici per il modulo di protezione hardware
Vedere la documentazione per il modulo di protezione hardware.
Usando SQL Server Management Studio (SSMS)
Vedere Effettuare il provisioning di chiavi Always Encrypted con SQL Server Management Studio.
Rendere disponibili le chiavi CNG a utenti e applicazioni
Vedere la documentazione per il modulo di protezione hardware e il provider del servizio di crittografia per informazioni su come configurare il provider del servizio di crittografia in un computer e su come concedere l'accesso al modulo di protezione hardware a utenti e applicazioni.
Passaggi successivi
- Effettuare il provisioning di chiavi Always Encrypted con SQL Server Management Studio
- Effettuare il provisioning di chiavi Always Encrypted con PowerShell