Configurare l'integrazione di Azure Key Vault per SQL Server in macchine virtuali di Azure (distribuzione classica)Configure Azure Key Vault Integration for SQL Server on Azure Virtual Machines (Classic)

PanoramicaOverview

Esistono più funzionalità di crittografia di SQL Server, ad esempio Transparent Data Encryption (TDE), crittografia a livello di colonna (CLE) e crittografia di backup.There are multiple SQL Server encryption features, such as transparent data encryption (TDE), column level encryption (CLE), and backup encryption. Queste modalità di crittografia richiedono la gestione e l'archiviazione delle chiavi usate per la crittografia.These forms of encryption require you to manage and store the cryptographic keys you use for encryption. 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à.The Azure Key Vault (AKV) service is designed to improve the security and management of these keys in a secure and highly available location. Il connettore di SQL Server consente a SQL Server di usare queste chiavi da Azure Key Vault.The SQL Server Connector enables SQL Server to use these keys from Azure Key Vault.

Importante

Azure offre due diversi modelli di distribuzione per creare e usare le risorse: Gestione risorse e la distribuzione classica.Azure has two different deployment models for creating and working with resources: Resource Manager and Classic. Questo articolo illustra l'uso del modello di distribuzione classica.This article covers using the Classic deployment model. Microsoft consiglia di usare il modello di Gestione risorse per le distribuzioni più recenti.Microsoft recommends that most new deployments use the Resource Manager model.

Se si esegue SQL Server con computer locali, sono disponibili passaggi per accedere a Azure Key Vault dal computer locale con SQL Server.If you are running SQL Server with on-premises machines, there are steps you can follow to access Azure Key Vault from your on-premises SQL Server machine. Se si esegue SQL Server in macchine virtuali di Azure, è possibile risparmiare tempo usando la funzionalità di Integrazione di Azure Key Vault .But for SQL Server in Azure VMs, you can save time by using the Azure Key Vault Integration feature. 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.With a few Azure PowerShell cmdlets to enable this feature, you can automate the configuration necessary for a SQL VM to access your key vault.

Quando questa funzionalità è abilitata, installa automaticamente il connettore di SQL Server, configura il provider EKM per accedere ad Azure Key Vault e crea le credenziali per consentire l'accesso all'insieme di credenziali.When this feature is enabled, it automatically installs the SQL Server Connector, configures the EKM provider to access Azure Key Vault, and creates the credential to allow you to access your vault. 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.If you looked at the steps in the previously mentioned on-premises documentation, you can see that this feature automates steps 2 and 3. L'unica attività che è comunque necessario eseguire manualmente è la creazione delle chiavi e dell'insieme di credenziali delle chiavi.The only thing you would still need to do manually is to create the key vault and keys. Una volta completata questa operazione, l'intera installazione della macchina virtuale di SQL è automatizzata.From there, the entire setup of your SQL VM is automated. Quando la funzionalità ha completato l'installazione, è possibile eseguire istruzioni T-SQL per iniziare la crittografia dei database o del backup regolarmente.Once this feature has completed this setup, you can execute T-SQL statements to begin encrypting your databases or backups as you normally would.

Preparare l'integrazione di AKVPrepare for AKV Integration

Per usare l'integrazione dell'insieme di credenziali delle chiavi di Azure per configurare la macchina virtuale di SQL Server, sono necessari diversi prerequisiti:To use Azure Key Vault Integration to configure your SQL Server VM, there are several prerequisites:

  1. Installare Azure PowerShellInstall Azure Powershell
  2. Creare un'istanza di Azure Active DirectoryCreate an Azure Active Directory
  3. Creare un insieme di credenziali delle chiaviCreate a key vault

Le sezioni seguenti descrivono tali prerequisiti e le informazioni da raccogliere per eseguire i cmdlet di PowerShell in un secondo momento.The following sections describe these prerequisites and the information you need to collect to later run the PowerShell cmdlets.

Installare Azure PowerShellInstall Azure PowerShell

Assicurarsi che sia installata la versione più recente di Azure PowerShell SDK.Make sure you have installed the latest Azure PowerShell SDK. Per altre informazioni, vedere Come installare e configurare Azure PowerShell.For more information, see How to install and configure Azure PowerShell.

Creare un'istanza di Azure Active DirectoryCreate an Azure Active Directory

Innanzitutto, è necessario che un'istanza di Azure Active Directory (AAD) sia presente nella sottoscrizione.First, you need to have an Azure Active Directory (AAD) in your subscription. AAD offre numerosi vantaggi, ad esempio, consente di concedere l'autorizzazione all'insieme di credenziali delle chiavi per determinati utenti e applicazioni.Among many benefits, this allows you to grant permission to your key vault for certain users and applications.

Successivamente, registrare un'applicazione con AAD.Next, register an application with 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.This will give you a Service Principal account that has access to your key vault which your VM will need. Nell'articolo sull'insieme di credenziali delle chiavi di Azure è possibile trovare questi passaggi nella sezione Registrare un'applicazione con Azure Active Directory. In alternativa, è possibile vedere i passaggi con gli screenshot nella sezione Get an identity for the application (Ottenere un'identità per l'applicazione) di questo post di blog.In the Azure Key Vault article, you can find these steps in the Register an application with Azure Active Directory section, or you can see the steps with screen shots in the Get an identity for the application section of this blog post. Prima di completare questi passaggi, si noti che è necessario raccogliere le informazioni seguenti durante la registrazione, utili in seguito quando si abilita l'integrazione dell'insieme di credenziali delle chiavi di Azure nella macchina virtuale di SQL.Before completing these steps, note that you need to collect the following information during this registration that is needed later when you enable Azure Key Vault Integration on your SQL VM.

  • Dopo aver aggiunto l'applicazione, trovare l'ID CLIENT nella scheda CONFIGURA. ID client di Azure Active DirectoryAfter the application is added, find the CLIENT ID on the CONFIGURE tab. Azure Active Directory Client ID

    L'ID client 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.The client ID is assigned later to the $spName (Service Principal name) parameter in the PowerShell script to enable Azure Key Vault Integration.

  • Inoltre, durante questa procedura quando si crea la chiave, copiare il segreto della chiave come illustrato nella schermata seguente.Also, during these steps when you create your key, copy the secret for your key as is shown in the following screenshot. Tale segreto della chiave viene assegnato successivamente al parametro $spSecret (segreto entità servizio) nello script di PowerShell.This key secret is assigned later to the $spSecret (Service Principal secret) parameter in the PowerShell script.
    Segreto di Azure Active DirectoryAzure Active Directory Secret
  • È necessario autorizzare questo nuovo ID client per disporre delle autorizzazioni di accesso seguenti: encrypt, decrypt, wrapKey, unwrapKey, sign e verify.You must authorize this new client ID to have the following access permissions: encrypt, decrypt, wrapKey, unwrapKey, sign, and verify. Questa operazione viene eseguita con il cmdlet Set-AzureKeyVaultAccessPolicy .This is done with the Set-AzureRmKeyVaultAccessPolicy cmdlet. Per altre informazioni, vedere Autorizzare l'applicazione a usare la chiave o il segreto.For more information see Authorize the application to use the key or secret.

Creare un insieme di credenziali delle chiaviCreate a key vault

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.In order to use Azure Key Vault to store the keys you will use for encryption in your VM, you need access to a key vault. Se l'insieme di credenziali delle chiavi non è ancora stato configurato, crearne uno seguendo i passaggi nell'argomento Introduzione all'insieme di credenziali delle chiavi di Azure .If you have not already set up your key vault, create one by following the steps in the Getting Started with Azure Key Vault topic. Prima di completare questi passaggi, si noti che è necessario raccogliere alcune informazioni durante l'impostazione, utili in seguito quando si abilita l'integrazione dell'insieme di credenziali delle chiavi di Azure nella macchina virtuale di SQL.Before completing these steps, note that there is some information you need to collect during this set up that is needed later when you enable Azure Key Vault Integration on your SQL VM.

Al passaggio Creare un insieme di credenziali delle chiavi, si noti la proprietà vaultUri restituita, ovvero l'URL dell'insieme di credenziali delle chiavi.When you get to the Create a key vault step, note the returned vaultUri property, which is the key vault URL. 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/.In the example provided in that step, shown below, the key vault name is ContosoKeyVault, therefore the key vault URL would be https://contosokeyvault.vault.azure.net/.

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

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.The key vault URL is assigned later to the $akvURL parameter in the PowerShell script to enable Azure Key Vault Integration.

Configurare l'integrazione di AKVConfigure AKV Integration

Usare PowerShell per configurare l'integrazione di Azure Key Vault.Use PowerShell to configure Azure Key Vault Integration. Le sezioni seguenti forniscono una panoramica dei parametri necessari e quindi uno script di PowerShell di esempio.The following sections provide an overview of the required parameters and then a sample PowerShell script.

Installare l'estensione di SQL Server IaaSInstall the SQL Server IaaS Extension

Come prima operazione, installare l'estensione di SQL Server IaaS.First, install the SQL Server IaaS Extension.

Comprendere i parametri di inputUnderstand the input parameters

La tabella seguente elenca i parametri necessari per eseguire lo script di PowerShell nella sezione successiva.The following table lists the parameters required to run the PowerShell script in the next section.

ParametroParameter DescrizioneDescription EsempioExample
$akvURL$akvURL URL dell'insieme di credenziali delle chiaviThe key vault URL "https://contosokeyvault.vault.azure.net/""https://contosokeyvault.vault.azure.net/"
$spName$spName Nome entità servizioService Principal name "fde2b411-33d5-4e11-af04eb07b669ccf2""fde2b411-33d5-4e11-af04eb07b669ccf2"
$spSecret$spSecret Segreto entità servizioService Principal secret "9VTJSQwzlFepD8XODnzy8n2V01Jd8dAjwm/azF1XDKM=""9VTJSQwzlFepD8XODnzy8n2V01Jd8dAjwm/azF1XDKM="
$credName$credName Nome della credenziale: l'integrazione di AKV crea una credenziale all'interno di SQL Server, consentendo alla macchina virtuale di avere accesso all'insieme di credenziali delle chiavi.Credential name: AKV Integration creates a credential within SQL Server, allowing the VM to have access to the key vault. Scegliere un nome per la credenziale.Choose a name for this credential. "mycred1""mycred1"
$vmName$vmName Nome macchina virtuale: il nome di una macchina virtuale di SQL creato in precedenza.Virtual machine name: The name of a previously created SQL VM. "myvmname""myvmname"
$serviceName$serviceName Nome servizio: il nome del servizio cloud associato alla macchina virtuale di SQL.Service name: The Cloud Service name that is associated with the SQL VM. "mycloudservicename""mycloudservicename"

Abilitare l'integrazione di AKV con PowerShellEnable AKV Integration with PowerShell

Il cmdlet New-AzureVMSqlServerKeyVaultCredentialConfig crea un oggetto di configurazione per la funzionalità di integrazione di Azure Key Vault.The New-AzureVMSqlServerKeyVaultCredentialConfig cmdlet creates a configuration object for the Azure Key Vault Integration feature. Il cmdlet Set-AzureVMSqlServerExtensionconfigura l'integrazione con il parametro KeyVaultCredentialSettings.The Set-AzureVMSqlServerExtension configures this integration with the KeyVaultCredentialSettings parameter. I passaggi seguenti illustrano come usare questi comandi.The following steps show how to use these commands.

  1. In Azure PowerShell configurare innanzitutto i parametri di input con i valori specifici, come descritto nelle sezioni precedenti di questo argomento.In Azure PowerShell, first configure the input parameters with your specific values as described in the previous sections of this topic. Di seguito è riportato uno script di esempio.The following script is an example.

     $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.Then use the following script to configure and enable AKV Integration.

     $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.The SQL IaaS Agent Extension will update the SQL VM with this new configuration.

Passaggi successiviNext steps

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.After enabling Azure Key Vault Integration, you can enable SQL Server encryption on your SQL VM. Innanzitutto, è necessario creare una chiave asimmetrica nell'insieme di credenziali delle chiavi e una chiave simmetrica in SQL Server nella macchina virtuale.First, you will need to create an asymmetric key inside your key vault and a symmetric key within SQL Server on your VM. A questo punto, sarà possibile eseguire istruzioni T-SQL per abilitare la crittografia per i database e i backup.Then, you will be able to execute T-SQL statements to enable encryption for your databases and backups.

Esistono diversi tipi di crittografia di cui è possibile usufruire:There are several forms of encryption you can take advantage of:

Gli script Transact-SQL seguenti forniscono esempi per ognuna di queste aree.The following Transact-SQL scripts provide examples for each of these areas.

Prerequisiti per gli esempiPrerequisites for examples

Ogni esempio è basato su due prerequisiti: una chiave asimmetrica dall'insieme di credenziali delle chiavi denominata CONTOSO_KEY e una credenziale creata dalla funzionalità di integrazione di AKV denominata Azure_EKM_TDE_cred.Each example is based on the two prerequisites: an asymmetric key from your key vault called CONTOSO_KEY and a credential created by the AKV Integration feature called Azure_EKM_TDE_cred. I comandi Transact-SQL seguenti consentono di configurare questi prerequisiti per l'esecuzione degli esempi.The following Transact-SQL commands setup these prerequisites for running the examples.

USE master;
GO

sp_configure [show advanced options], 1;
GO
RECONFIGURE;
GO

-- Enable EKM provider
sp_configure [EKM provider enabled], 1;
GO
RECONFIGURE;

--create provider
CREATE CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM_Prov
FROM FILE = 'C:\Program Files\SQL Server Connector for Microsoft Azure Key Vault\Microsoft.AzureKeyVaultService.EKM.dll';
GO

--create credential
CREATE CREDENTIAL sysadmin_ekm_cred
    WITH IDENTITY = 'keytestvault', --keyvault
    SECRET = '<<SECRET>>'
FOR CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM_Prov;


--must have sysadmin
ALTER LOGIN [TDE_Login]
ADD CREDENTIAL sysadmin_ekm_cred;


CREATE ASYMMETRIC KEY CONTOSO_KEY
FROM PROVIDER [AzureKeyVault_EKM_Prov]
WITH PROVIDER_KEY_NAME = 'keytestvault',  --key name
CREATION_DISPOSITION = OPEN_EXISTING;

Transparent data encryption (TDE)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.Create a SQL Server login to be used by the Database Engine for TDE, then add the credential to it.

    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 TDE_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 TDE_Login
    ADD CREDENTIAL Azure_EKM_TDE_cred;
    GO
    
  2. Creare la chiave di crittografia del database che verrà usata per la TDE.Create the database encryption key that will be used for 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 crittografatiEncrypted backups

  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.Create a SQL Server login to be used by the Database Engine for encrypting backups, and add the credential to it.

    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 Backup_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 Backup_Login
    ADD CREDENTIAL Azure_EKM_Backup_cred ;
    GO
    
  2. Eseguire il backup del database specificando la crittografia con la chiave asimmetrica archiviata nell'insieme di credenziali delle chiavi.Backup the database specifying encryption with the asymmetric key stored in the key vault.

    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)Column Level Encryption (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.This script creates a symmetric key protected by the asymmetric key in the key vault, and then uses the symmetric key to encrypt data in the 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 aggiuntiveAdditional resources

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.For more information on how to use these encryption features, see Using EKM with SQL Server Encryption Features.

Si noti che i passaggi in questo articolo presuppongono che si disponga già di SQL Server in esecuzione in una macchina virtuale di Azure.Note that the steps in this article assume that you already have SQL Server running on an Azure virtual machine. In caso contrario, vedere Effettuare il provisioning di una macchina virtuale di SQL Server in Azure.If not, see Provision a SQL Server virtual machine 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.For other guidance on running SQL Server on Azure VMs, see SQL Server on Azure Virtual Machines overview.