Configurare l'integrazione di Azure Key Vault per SQL Server in macchine virtuali di Azure (distribuzione classica)

Panoramica

Esistono più funzionalità di crittografia di SQL Server, ad esempio Transparent Data Encryption (TDE), crittografia a livello di colonna (CLE) e crittografia di backup. Queste modalità di crittografia richiedono la gestione e l'archiviazione delle chiavi usate per la crittografia. Il servizio dell'insieme di credenziali delle chiavi di Azure (AKV) è progettato per migliorare la sicurezza e la gestione di queste chiavi in una posizione sicura e a elevata disponibilità. Il connettore di SQL Server consente a SQL Server di usare queste chiavi dall'insieme di credenziali delle chiavi di Azure.

Importante

Azure offre due modelli di distribuzione diversi per creare e usare le risorse: Resource Manager e distribuzione classica. Questo articolo illustra l'uso del modello di distribuzione classica. Microsoft consiglia di usare il modello di Gestione risorse per le distribuzioni più recenti.

Se si esegue SQL Server con computer locali, è possibile seguire una procedura per accedere ad Azure Key Vault dal computer SQL Server locale. Se si esegue SQL Server in macchine virtuali di Azure, è possibile risparmiare tempo usando la funzionalità di Integrazione dell'insieme di credenziali delle chiavi di Azure . Con alcuni cmdlet di Azure PowerShell che abilitano questa funzionalità, è possibile automatizzare la configurazione necessaria per l'accesso all'insieme di credenziali delle chiavi di una macchina virtuale di SQL.

Quando questa funzionalità è abilitata, installa automaticamente il connettore di SQL Server, configura il provider EKM per accedere all'insieme di credenziali delle chiavi di Azure e crea le credenziali per consentire l'accesso all'insieme di credenziali. Se sono stati esaminati i passaggi nella documentazione locale menzionati in precedenza, si noterà che questa funzionalità consente di automatizzare i passaggi 2 e 3. L'unica attività che è comunque necessario eseguire manualmente è la creazione delle chiavi e dell'insieme di credenziali delle chiavi. Una volta completata questa operazione, l'intera installazione della macchina virtuale di SQL è automatizzata. Quando la funzionalità ha completato l'installazione, è possibile eseguire istruzioni T-SQL per iniziare la crittografia dei database o del backup regolarmente.

Preparare l'integrazione di AKV

Per usare l'integrazione dell'insieme di credenziali delle chiavi di Azure per configurare la macchina virtuale di SQL Server, sono necessari diversi prerequisiti:

  1. Installare Azure PowerShell
  2. Creare un'istanza di Azure Active Directory
  3. Creare un insieme di credenziali delle chiavi

Le sezioni seguenti descrivono tali prerequisiti e le informazioni da raccogliere per eseguire i cmdlet di PowerShell in un secondo momento.

Nota

È consigliabile usare il modulo Azure Az PowerShell per interagire con Azure. Per iniziare, vedere Installare Azure PowerShell. Per informazioni su come eseguire la migrazione al modulo AZ PowerShell, vedere Eseguire la migrazione di Azure PowerShell da AzureRM ad Az.

Installare Azure PowerShell

Assicurarsi di aver installato il modulo di Azure PowerShell più recente. Per altre informazioni, vedere Come installare e configurare Azure PowerShell.

Registrare un'applicazione in Azure Active Directory

Innanzitutto, è necessario che un'istanza di Azure Active Directory (AAD) sia presente nella sottoscrizione. AAD offre numerosi vantaggi, ad esempio, consente di concedere l'autorizzazione all'insieme di credenziali delle chiavi per determinati utenti e applicazioni.

Successivamente, registrare un'applicazione con AAD. In questo modo, è disponibile per l'utente un account dell'entità servizio con accesso all'insieme di credenziali delle chiavi necessario per la macchina virtuale. Nell'articolo Azure Key Vault è possibile trovare questi passaggi nella sezione Registrare un'applicazione con Azure Active Directory oppure vedere i passaggi con gli screenshot nella sezione Ottenere un'identità per l'applicazione di questo post di blog. Prima di completare questi passaggi, è necessario raccogliere le informazioni seguenti durante la registrazione, utili in seguito quando si abilita l'integrazione di Azure Key Vault nella macchina virtuale di SQL.

  • Dopo aver aggiunto l'applicazione, trovare l'ID applicazione (noto anche come AAD ClientID o AppID) nel pannello App registrata . L'ID applicazione viene assegnato successivamente al parametro $spName (nome entità servizio) nello script di PowerShell per abilitare l'integrazione dell'insieme di credenziali delle chiavi di Azure.

    ID applicazione

  • Quando si crea la chiave durante la procedura, copiare il segreto della chiave come illustrato nello screenshot seguente. Tale segreto della chiave viene assegnato successivamente al parametro $spSecret (segreto entità servizio) nello script di PowerShell.

    Segreto AAD

  • L'ID applicazione e il segreto verranno usati anche per creare le credenziali in SQL Server.

  • È necessario autorizzare questo nuovo ID applicazione (o ID client) ad avere le autorizzazioni di accesso seguenti: get, wrapKey, unwrapKey. Questa operazione viene eseguita con il cmdlet Set-AzKeyVaultAccessPolicy. Per altre informazioni, vedere Panoramica di Azure Key Vault.

Creare un insieme di credenziali delle chiavi

Per usare l'insieme di credenziali delle chiavi di Azure per archiviare le chiavi da usare per la crittografia nella macchina virtuale, è necessario accedere a un insieme di credenziali delle chiavi. Se l'insieme di credenziali delle chiavi non è ancora stato configurato, crearne uno seguendo i passaggi nell'articolo Introduzione ad Azure Key Vault. Prima di completare questi passaggi, è necessario raccogliere alcune informazioni durante l'impostazione, utili in seguito quando si abilita l'integrazione di Azure Key Vault nella macchina virtuale di SQL.

New-AzKeyVault -VaultName 'ContosoKeyVault' -ResourceGroupName 'ContosoResourceGroup' -Location 'East Asia'

Al passaggio Creare un insieme di credenziali delle chiavi, si noti la proprietà vaultUri restituita, ovvero l'URL dell'insieme di credenziali delle chiavi. Nell'esempio fornito in questo passaggio, riportato di seguito, il nome dell'insieme di credenziali delle chiavi è ContosoKeyVault, quindi l'URL dell'insieme di credenziali delle chiavi è https://contosokeyvault.vault.azure.net/.

L'URL dell'insieme di credenziali delle chiavi viene assegnato successivamente al parametro $akvURL nello script di PowerShell, per abilitare l'integrazione dell'insieme di credenziali delle chiavi di Azure.

Dopo aver creato l'insieme di credenziali delle chiavi, è necessario aggiungere una chiave all'insieme di credenziali delle chiavi. Questa chiave verrà definita quando si crea una chiave asimmetrica in SQL Server versioni successive.

Configurare l'integrazione di AKV

Usare PowerShell per configurare l'integrazione di Azure Key Vault. Le sezioni seguenti forniscono una panoramica dei parametri necessari e quindi uno script di PowerShell di esempio.

Installare l'estensione di SQL Server IaaS

Come prima operazione, installare l'estensione di SQL Server IaaS.

Comprendere i parametri di input

La tabella seguente elenca i parametri necessari per eseguire lo script di PowerShell nella sezione successiva.

Parametro Descrizione Esempio
$akvURL URL dell'insieme di credenziali delle chiavi "https://contosokeyvault.vault.azure.net/"
$spName Nome entità servizio "fde2b411-33d5-4e11-af04eb07b669ccf2"
$spSecret Segreto entità servizio "9VTJSQwzlFepD8XODnzy8n2V01Jd8dAjwm/azF1XDKM="
$credName Nome credenziali: L'integrazione dell'insieme di credenziali delle chiavi di Azure crea le credenziali all'interno di SQL Server, consentendo alla VM di accedere all'insieme di credenziali delle chiavi. Scegliere un nome per la credenziale. "mycred1"
$vmName Nome macchina virtuale: il nome di una macchina virtuale di SQL creato in precedenza. "myvmname"
$serviceName Nome servizio: il nome del servizio cloud associato alla macchina virtuale di SQL. "mycloudservicename"

Abilitare l'integrazione di AKV con PowerShell

Il cmdlet New-AzureVMSqlServerKeyVaultCredentialConfig crea un oggetto di configurazione per la funzionalità di integrazione di Azure Key Vault. Il cmdlet Set-AzureVMSqlServerExtensionconfigura l'integrazione con il parametro KeyVaultCredentialSettings. I passaggi seguenti illustrano come usare questi comandi.

  1. In Azure PowerShell configurare innanzitutto i parametri di input con i valori specifici, come descritto nelle sezioni precedenti di questo argomento. Di seguito è riportato uno script di esempio.

    $akvURL = "https:\//contosokeyvault.vault.azure.net/"
    $spName = "fde2b411-33d5-4e11-af04eb07b669ccf2"
    $spSecret = "9VTJSQwzlFepD8XODnzy8n2V01Jd8dAjwm/azF1XDKM="
    $credName = "mycred1"
    $vmName = "myvmname"
    $serviceName = "mycloudservicename"
    
  2. Usare quindi lo script seguente per configurare e abilitare l'integrazione di AKV.

    $secureakv =  $spSecret | ConvertTo-SecureString -AsPlainText -Force
    $akvs = New-AzureVMSqlServerKeyVaultCredentialConfig -Enable -CredentialName $credname -AzureKeyVaultUrl $akvURL -ServicePrincipalName $spName -ServicePrincipalSecret $secureakv
    Get-AzureVM -ServiceName $serviceName -Name $vmName | Set-AzureVMSqlServerExtension -KeyVaultCredentialSettings $akvs | Update-AzureVM
    

L'estensione dell'agente IaaS di SQL aggiornerà la macchina virtuale di SQL con questa nuova configurazione.

Passaggi successivi

Dopo aver attivato l'integrazione dell'insieme di credenziali delle chiavi di Azure, è possibile abilitare la crittografia di SQL Server nella macchina virtuale di SQL. Innanzitutto, è necessario creare una chiave asimmetrica nell'insieme di credenziali delle chiavi e una chiave simmetrica in SQL Server nella macchina virtuale. A questo punto, sarà possibile eseguire istruzioni T-SQL per abilitare la crittografia per i database e i backup.

Esistono diversi tipi di crittografia di cui è possibile usufruire:

Gli script Transact-SQL seguenti forniscono esempi per ognuna di queste aree.

Prerequisiti per gli esempi

Ogni esempio si basa sui due prerequisiti: una chiave asimmetrica dall'insieme di credenziali delle chiavi denominata CONTOSO_KEY e una credenziale creata dalla funzionalità di integrazione AKV denominata Azure_EKM_cred. I comandi Transact-SQL seguenti consentono di configurare questi prerequisiti per l'esecuzione degli esempi.

USE master;
GO

--create credential
--The <<SECRET>> here requires the <Application ID> (without hyphens) and <Secret> to be passed together without a space between them.
CREATE CREDENTIAL Azure_EKM_cred
    WITH IDENTITY = 'keytestvault', --keyvault
    SECRET = '<<SECRET>>'
FOR CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM_Prov;


--Map the credential to a SQL login that has sysadmin permissions. This allows the SQL login to access the key vault when creating the asymmetric key in the next step.
ALTER LOGIN [SQL_Login]
ADD CREDENTIAL Azure_EKM_cred;


CREATE ASYMMETRIC KEY CONTOSO_KEY
FROM PROVIDER [AzureKeyVault_EKM_Prov]
WITH PROVIDER_KEY_NAME = 'KeyName_in_KeyVault',  --The key name here requires the key we created in the key vault
CREATION_DISPOSITION = OPEN_EXISTING;

Transparent Data Encryption (TDE)

  1. Creare un account di accesso di SQL Server che può essere usato dal motore di database per la TDE, quindi aggiungere la credenziale.

    USE master;
    -- Create a SQL Server login associated with the asymmetric key
    -- for the Database engine to use when it loads a database
    -- encrypted by TDE.
    CREATE LOGIN EKM_Login
    FROM ASYMMETRIC KEY CONTOSO_KEY;
    GO
    
    -- Alter the TDE Login to add the credential for use by the
    -- Database Engine to access the key vault
    ALTER LOGIN EKM_Login
    ADD CREDENTIAL Azure_EKM_cred;
    GO
    
  2. Creare la chiave di crittografia del database che verrà usata per la TDE.

    USE ContosoDatabase;
    GO
    
    CREATE DATABASE ENCRYPTION KEY 
    WITH ALGORITHM = AES_128 
    ENCRYPTION BY SERVER ASYMMETRIC KEY CONTOSO_KEY;
    GO
    
    -- Alter the database to enable transparent data encryption.
    ALTER DATABASE ContosoDatabase
    SET ENCRYPTION ON;
    GO
    

Backup crittografati

  1. Creare un account di accesso di SQL Server che può essere usato dal motore di database per la crittografia dei backup, quindi aggiungere la credenziale.

    USE master;
    -- Create a SQL Server login associated with the asymmetric key
    -- for the Database engine to use when it is encrypting the backup.
    CREATE LOGIN EKM_Login
    FROM ASYMMETRIC KEY CONTOSO_KEY;
    GO
    
    -- Alter the Encrypted Backup Login to add the credential for use by
    -- the Database Engine to access the key vault
    ALTER LOGIN EKM_Login
    ADD CREDENTIAL Azure_EKM_cred ;
    GO
    
  2. Eseguire il backup del database specificando la crittografia con la chiave asimmetrica archiviata nell'insieme di credenziali delle chiavi.

    USE master;
    BACKUP DATABASE [DATABASE_TO_BACKUP]
    TO DISK = N'[PATH TO BACKUP FILE]'
    WITH FORMAT, INIT, SKIP, NOREWIND, NOUNLOAD,
    ENCRYPTION(ALGORITHM = AES_256, SERVER ASYMMETRIC KEY = [CONTOSO_KEY]);
    GO
    

Crittografia a livello di colonna (CLE)

Questo script crea una chiave simmetrica protetta dalla chiave asimmetrica nell'insieme di credenziali delle chiavi e quindi usa la chiave simmetrica per crittografare i dati nel database.

CREATE SYMMETRIC KEY DATA_ENCRYPTION_KEY
WITH ALGORITHM=AES_256
ENCRYPTION BY ASYMMETRIC KEY CONTOSO_KEY;

DECLARE @DATA VARBINARY(MAX);

--Open the symmetric key for use in this session
OPEN SYMMETRIC KEY DATA_ENCRYPTION_KEY
DECRYPTION BY ASYMMETRIC KEY CONTOSO_KEY;

--Encrypt syntax
SELECT @DATA = ENCRYPTBYKEY(KEY_GUID('DATA_ENCRYPTION_KEY'), CONVERT(VARBINARY,'Plain text data to encrypt'));

-- Decrypt syntax
SELECT CONVERT(VARCHAR, DECRYPTBYKEY(@DATA));

--Close the symmetric key
CLOSE SYMMETRIC KEY DATA_ENCRYPTION_KEY;

Risorse aggiuntive

Per altre informazioni su come usare queste funzionalità di crittografia, vedere l'argomento relativo all' uso di EKM con le funzionalità di crittografia di SQL Server.

Si noti che i passaggi in questo articolo presuppongono che si disponga già di SQL Server in esecuzione in una macchina virtuale di Azure. In caso contrario, vedere Effettuare il provisioning di una macchina virtuale di SQL Server in Azure. Per altre informazioni dettagliate sull'esecuzione di SQL Server nelle macchine virtuali di Azure, vedere SQL Server nella panoramica delle macchine virtuali di Azure.