Esercitazione: Introduzione ad Always Encrypted con enclavi sicure in SQL Server con attestazione usando HGS
Si applica a: SQL Server 2019 (15.x) e versioni successive - Solo Windows
Questa esercitazione spiega come iniziare a usare Always Encrypted con enclavi sicure in SQL Server usando il Servizio Sorveglianza host (HGS) per l'attestazione dell'enclave. L’esercitazione illustra:
- Come creare un ambiente di base per i test e la valutazione di Always Encrypted con enclavi sicure con HGS configurato per l’attestazione dell’enclave.
- Come crittografare i dati in locale ed eseguire query avanzate riservate su colonne crittografate usando SQL Server Management Studio (SSMS).
Per informazioni su come configurare Always Encrypted con enclavi sicure senza attestazione, vedere Esercitazione: Introduzione all'uso di Always Encrypted con enclavi sicure in SQL Server.
Prerequisiti
Per iniziare a usare Always Encrypted con enclave sicuri sono necessari almeno due computer (possono essere macchine virtuali):
- Il computer SQL Server per ospitare SQL Server e SSMS.
- Il computer del servizio Sorveglianza host (HGS) in cui eseguire il servizio, necessario per l'attestazione dell'enclave.
Requisiti per il computer SQL Server
- SQL Server 2019 (15.x) o versioni successive.
- Windows 10, versione 1809 o successive - Enterprise Edition, Windows 11 o versioni successive - Enterprise Edition, Windows Server 2019 o versioni successive - Datacenter Edition. Le altre edizioni di Windows 10/11 e Windows Server non supportano l'attestazione con HGS.
- Supporto della CPU per le tecnologie di virtualizzazione:
- Intel VT-x con Extended Page Tables.
- AMD-V con Rapid Virtualization Indexing.
- Se si esegue SQL Server in una VM:
- In Azure, usare una dimensione VM di seconda generazione (scelta consigliata) o una dimensione VM di prima generazione con la virtualizzazione annidata abilitata. Consultare la documentazione sulle dimensioni delle singole VM per determinare le dimensioni di VM di prima generazione che supportano la virtualizzazione annidata.
- In Hyper-V 2016 o versioni successive (all'esterno di Azure), accertarsi che la VM sia di seconda generazione (scelta consigliata) o di prima generazione con la virtualizzazione annidata. Per altre informazioni, vedere È necessario creare una macchina virtuale di prima o seconda generazione in Hyper-V? e Configurare la virtualizzazione annidata.
- In VMware vSphere 6.7 o versioni successive, abilitare il supporto della sicurezza basata sulla virtualizzazione (VBS) per la macchina virtuale come descritto nella documentazione di VMware.
- Anche altri hypervisor e cloud pubblici possono supportare le funzionalità di virtualizzazione annidata che abilitano Always Encrypted con enclave di sicurezza basata sulla virtualizzazione. Vedere la documentazione della soluzione di virtualizzazione per informazioni sulla compatibilità e istruzioni per la configurazione.
- La versione più recente di SQL Server Management Studio (SSMS). In alternativa è possibile installare SSMS in un altro computer.
Avviso
In ambienti di produzione, l'esecuzione di SSMS o altri strumenti di gestione delle chiavi nel computer SQL Server può ridurre i vantaggi della sicurezza con l'uso di Always Encrypted. In generale, è consigliabile eseguire tali strumenti in un computer diverso. Per altre informazioni, vedere Considerazioni sulla sicurezza per la gestione delle chiavi.
Requisiti per il computer HGS
- Windows Server 2019 Standard o Datacenter Edition
- 2 CPU
- 8 GB di RAM
- 100 GB di spazio di archiviazione
Nota
Il computer HGS non deve appartenere a un dominio prima di iniziare la procedura.
Passaggio 1: Configurare il computer
In questo passaggio si configura il computer HGS per eseguire il Servizio Sorveglianza host che supporta l'attestazione della chiave host.
Accedere al computer del servizio HGS come amministratore (amministratore locale), aprire una console di Windows PowerShell con privilegi elevati e aggiungere il ruolo del servizio Sorveglianza host eseguendo il comando seguente:
Install-WindowsFeature -Name HostGuardianServiceRole -IncludeManagementTools -Restart
Dopo il riavvio del computer HGS, accedere nuovamente con l'account di amministratore, aprire una console di Windows PowerShell con privilegi elevati e usare i comandi seguenti per installare il Servizio Sorveglianza host e configurare il relativo dominio. La password specificata qui si applicherà solo alla password della modalità di ripristino dei servizi directory per Active Directory; non cambierà la password di accesso dell'account amministratore. È possibile specificare qualsiasi nome di dominio per -HgsDomainName.
$adminPassword = ConvertTo-SecureString -AsPlainText '<password>' -Force Install-HgsServer -HgsDomainName 'bastion.local' -SafeModeAdministratorPassword $adminPassword -Restart
Dopo il riavvio del computer, accedere con l'account amministratore (che ora è anche un Amministrazione di dominio). Aprire una console di Windows PowerShell con privilegi elevati e configurare l'attestazione della chiave host per l’istanza di HGS.
Initialize-HgsAttestation -HgsServiceName 'hgs' -TrustHostKey
Trovare l'indirizzo IP del computer HGS eseguendo il comando seguente. Salvare questo indirizzo IP per i passaggi successivi.
Get-NetIPAddress
Nota
In alternativa, per fare riferimento al computer HGS mediante un nome DNS, è possibile configurare un server di inoltro dai server DNS aziendali al nuovo controller di dominio HGS.
Passaggio 2: Configurare il computer SQL Server come host controllato
In questo passaggio si configura il computer SQL Server come host sorvegliato registrato con HGS usando l’attestazione della chiave host.
Avviso
L'attestazione della chiave host è considerata una modalità di attestazione più debole. Se possibile, per gli ambienti di produzione usare l'attestazione TPM. Per altre informazioni, vedere Modalità di attestazione.
Accedere al computer SQL Server come amministratore, aprire una console di Windows PowerShell con privilegi elevati e recuperare il nome del computer in uso eseguendo l'accesso alla variabile computername.
$env:computername
Installare la funzionalità Host sorvegliato, che consente anche di installare Hyper-V (se non è ancora installato).
Enable-WindowsOptionalFeature -Online -FeatureName HostGuardian -All
Al prompt riavviare il computer SQL Server per completare l'installazione di Hyper-V.
Se il computer con SQL Server è una macchina virtuale, un computer fisico che non supporta l'avvio sicuro UEFI o un computer fisico sprovvisto di IOMMU, è necessario rimuovere il requisito VBS per le funzionalità di sicurezza della piattaforma.
Rimuovere il requisito per l'avvio protetto e IOMMU eseguendo il comando seguente nel computer SQL Server in una console di PowerShell con privilegi elevati:
Set-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Control\DeviceGuard -Name RequirePlatformSecurityFeatures -Value 0
Riavviare il computer SQL Server per riportare online VBS con i requisiti ridotti.
Restart-Computer
Accedere ancora al computer SQL Server come amministratore, aprire una console di Windows PowerShell con privilegi elevati, generare una chiave host univoca ed esportare la chiave pubblica risultante in un file.
Set-HgsClientHostKey Get-HgsClientHostKey -Path $HOME\Desktop\hostkey.cer
Copiare manualmente il file della chiave host generato nel passaggio precedente e incollarlo nel computer HGS. Le istruzioni seguenti presuppongono che il nome del file sia
hostkey.cer
e che il file sia stato copiato sul desktop del computer HGS.Nel computer HGS, aprire una console di Windows PowerShell con privilegi elevati e registrare la chiave host del computer SQL Server con HGS:
Add-HgsAttestationHostKey -Name <your SQL Server computer name> -Path $HOME\Desktop\hostkey.cer
Nel computer SQL Server eseguire il comando seguente in una console di Windows PowerShell con privilegi elevati, per indicare al computer SQL Server dove eseguire l'attestazione. Assicurarsi di specificare l'indirizzo IP o il nome DNS del computer HGS in uso in entrambe le posizioni degli indirizzi.
# use http, and not https Set-HgsClientConfiguration -AttestationServerUrl http://<IP address or DNS name>/Attestation -KeyProtectionServerUrl http://<IP address or DNS name>/KeyProtection/
Il risultato del comando precedente visualizzerà AttestationStatus = Passed.
Se si verifica un errore HostUnreachable
, il computer SQL Server non può comunicare con HGS. Verificare che sia possibile effettuare il ping del computer HGS.
Un errore UnauthorizedHost
indica che la chiave pubblica non è stata registrata con il server HGS. Per risolvere l’errore, ripetere i passaggi 5 e 6.
Se tutti gli altri tentativi non riescono, eseguire Remove-HgsClientHostKey
e ripetere i passaggi da 4 a 7.
Passaggio 3: Abilitare Always Encrypted con enclave sicuri in SQL Server
In questo passaggio si abilita la funzionalità Always Encrypted con enclavi nell'istanza di SQL Server.
Usando SSMS, connettersi all'istanza di SQL Server come sysadmin senza Always Encrypted abilitato per la connessione di database.
Avviare SSMS.
Nella finestra di dialogo Connetti al server specificare il nome del server, selezionare un metodo di autenticazione e specificare le credenziali.
Selezionare Opzioni >> e scegliere la scheda Always Encrypted.
Verificare che la casella di controllo Abilita Always Encrypted (crittografia colonna)non sia selezionata.
Selezionare Connetti.
Aprire una nuova finestra di query ed eseguire l'istruzione seguente per impostare il tipo di enclave sicura sulla sicurezza basata sulla virtualizzazione (VBS).
EXEC sys.sp_configure 'column encryption enclave type', 1; RECONFIGURE;
Riavviare l'istanza di SQL Server per rendere effettive le modifiche. Per riavviare l'istanza in SQL Server Management Studio, fare clic con il pulsante destro del mouse su di essa in Esplora oggetti e scegliere Riavvia. Dopo il riavvio dell'istanza, riconnettersi.
Verificare che l'enclave sicuro sia ora caricato eseguendo la query seguente:
SELECT [name], [value], [value_in_use] FROM sys.configurations WHERE [name] = 'column encryption enclave type';
La query deve restituire il risultato seguente:
name value value_in_use column encryption enclave type 1 1
Passaggio 4: Creare un database di esempio
In questo passaggio si crea un database con alcuni dati di esempio che verranno crittografati in un secondo momento.
Usando l'istanza di SSMS nel passaggio precedente, eseguire l'istruzione seguente in una finestra di query per creare un nuovo database, denominato ContosoHR.
CREATE DATABASE [ContosoHR];
Creare una nuova tabella di nome Employees.
USE [ContosoHR]; GO CREATE SCHEMA [HR]; GO CREATE TABLE [HR].[Employees] ( [EmployeeID] [int] IDENTITY(1,1) NOT NULL, [SSN] [char](11) NOT NULL, [FirstName] [nvarchar](50) NOT NULL, [LastName] [nvarchar](50) NOT NULL, [Salary] [money] NOT NULL ) ON [PRIMARY];
Aggiungere alcuni record dei dipendenti alla tabella Employees.
USE [ContosoHR]; GO INSERT INTO [HR].[Employees] ([SSN] ,[FirstName] ,[LastName] ,[Salary]) VALUES ('795-73-9838' , N'Catherine' , N'Abel' , $31692); INSERT INTO [HR].[Employees] ([SSN] ,[FirstName] ,[LastName] ,[Salary]) VALUES ('990-00-6818' , N'Kim' , N'Abercrombie' , $55415);
Passaggio 5: Effettuare il provisioning delle chiavi abilitate per l'enclave
In questo passaggio si crea una chiave master della colonna e una chiave di crittografia della colonna che consentono i calcoli delle enclavi.
Usando l’istanza di SSMS nel passaggio precedente, in Esplora oggetti espandere il database e passare a Sicurezza>Chiavi Always Encrypted.
Effettuare il provisioning di una nuova chiave master della colonna abilitata per l’enclave:
Fare clic con il pulsante destro del mouse su Chiavi Always Encrypted e scegliere Nuova chiave master della colonna.
Selezionare il nome della chiave master della colonna: CMK1.
Assicurarsi di selezionare Archivio certificati Windows (Utente corrente o Computer locale) o Azure Key Vault.
Selezionare Consenti calcoli enclave.
Se si seleziona Azure Key Vault, accedere ad Azure e selezionare l'insieme di credenziali delle chiavi. Per altre informazioni su come creare un insieme di credenziali delle chiavi per Always Encrypted, vedere Manage your key vaults from Azure portal (Gestire gli insiemi di credenziali delle chiavi dal portale di Azure).
Selezionare il certificato o la chiave di Azure Key Vault, se esiste già, oppure selezionare il pulsante Genera certificato per crearne uno nuovo.
Seleziona OK.
Creare una nuova chiave di crittografia di colonna abilitata per l’enclave:
- Fare clic con il pulsante destro del mouse su Chiavi Always Encrypted e scegliere Nuova chiave di crittografia della colonna.
- Inserire un nome per la nuova chiave di crittografia della colonna: CEK1.
- Nell’elenco a discesa Chiave master della colonna selezionare la chiave master della colonna creata nei passaggi precedenti.
- Seleziona OK.
Passaggio 6: Crittografare alcune colonne sul posto
In questo passaggio si esegue la crittografia dei dati archiviati nelle colonne SSN e Salary all'interno dell'enclave lato server, quindi si esegue il test di una query SELECT sui dati.
Aprire una nuova istanza di SSMS e connettersi all'istanza di SQL Server con Always Encrypted abilitato per la connessione di database.
Avviare una nuova istanza di SSMS.
Nella finestra di dialogo Connetti al server specificare il nome del server, selezionare un metodo di autenticazione e specificare le credenziali.
Selezionare Opzioni >> e scegliere la scheda Always Encrypted.
Selezionare la casella di controllo Abilita Always Encrypted (crittografia della colonna).
Selezionare Abilita enclavi sicure. (Questo passaggio si applica a SSMS 19 o versioni successive.)
Impostare Protocollo su Servizio Sorveglianza host. (Questo passaggio si applica a SSMS 19 o versioni successive.)
Specificare l'URL di attestazione dell'enclave, ad esempio http://hgs.bastion.local/Attestation.
Selezionare Connetti.
Se viene chiesto di abilitare la parametrizzazione per le query Always Encrypted, selezionare Abilita.
Usando la stessa istanza di SSMS (con Always Encrypted abilitato), aprire una nuova finestra di query e crittografare le colonne SSN e Salary eseguendo le query seguenti.
USE [ContosoHR]; GO ALTER TABLE [HR].[Employees] ALTER COLUMN [SSN] [char] (11) COLLATE Latin1_General_BIN2 ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK1], ENCRYPTION_TYPE = Randomized, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NOT NULL WITH (ONLINE = ON); ALTER TABLE [HR].[Employees] ALTER COLUMN [Salary] [money] ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK1], ENCRYPTION_TYPE = Randomized, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NOT NULL WITH (ONLINE = ON); ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE;
Nota
Si noti l’istruzione ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE per cancellare la cache del piano di query per il database nello script precedente. Dopo aver modificato la tabella è necessario cancellare i piani per tutti i batch e le stored procedure che accedono alla tabella per aggiornare le informazioni di crittografia dei parametri.
Per verificare che le colonne SSN e Salary ora sono crittografate, aprire una nuova finestra di query nell’istanza di SSMS senza Always Encrypted abilitato per la connessione di database ed eseguire l’istruzione seguente. La finestra di query restituisce valori crittografati nelle colonne SSN e Salary. Se si esegue la stessa query usando l’istanza di SSMS con Always Encrypted abilitato, vengono visualizzati i dati decrittografati.
SELECT * FROM [HR].[Employees];
Passaggio 7: Eseguire query avanzate su colonne crittografate
Ora è possibile eseguire query avanzate sulle colonne crittografate. Vengono eseguite alcune operazioni di elaborazione query nell’enclave lato server.
Nell’istanza di SSMS con Always Encrypted abilitato verificare che la parametrizzazione per Always Encrypted sia abilitata.
- Selezionare Strumenti dal menu principale di SSMS.
- Selezionare Opzioni.
- Passare a Esecuzione query>SQL Server>Avanzata.
- Assicurarsi che sia selezionata l’opzione Abilita parametrizzazione per Always Encrypted.
- Seleziona OK.
Aprire una nuova finestra di query, incollare ed eseguire la query seguente. La query restituisce valori di testo non crittografato e righe che soddisfano i criteri di ricerca specificati.
DECLARE @SSNPattern [char](11) = '%6818'; DECLARE @MinSalary [money] = $1000; SELECT * FROM [HR].[Employees] WHERE SSN LIKE @SSNPattern AND [Salary] >= @MinSalary;
Riprovare la stessa query nell'istanza di SSMS senza Always Encrypted abilitato e notare l'errore che si verifica.
Passaggi successivi
Al termine dell’esercitazione, è possibile passare a una delle esercitazioni seguenti:
- Esercitazione: Sviluppare un'applicazione .NET usando Always Encrypted con enclavi sicure
- Esercitazione: Sviluppare un'applicazione .NET Framework usando Always Encrypted con enclavi sicure
- Esercitazione: Creazione e uso di indici sulle colonne abilitate per enclave tramite la crittografia casuale