Extensible Key Management tramite l'insieme di credenziali delle chiavi di Azure (SQL Server)

SQL Server Connector per l'insieme di credenziali delle chiavi di Microsoft Azure permette alla crittografia di SQL Server di sfruttare i vantaggi del servizio di insieme di credenziali delle chiavi di Azure come provider Extensible Key Management (EKM) per proteggere le chiavi di crittografia.

Contenuto dell'argomento:

  • Usi di EKM

  • Passaggio 1: Configurare l'insieme di credenziali delle chiavi per l'uso da parte di SQL Server

  • Passaggio 2: Installazione di SQL Server Connector

  • Passaggio 3: Configurare SQL Server per l'uso di un provider EKM per l'insieme di credenziali delle chiavi

  • Esempio A: Crittografia dati trasparente tramite una chiave asimmetrica dell'insieme di credenziali delle chiavi

  • Esempio B: Crittografia dei backup tramite una chiave asimmetrica dell'insieme di credenziali delle chiavi

  • Esempio C: Crittografia a livello di colonna tramite una chiave asimmetrica dell'insieme di credenziali delle chiavi

Usi di EKM

Un'organizzazione può usare la crittografia di SQL Server per proteggere i dati sensibili. La crittografia di SQL Server include Transparent Data Encryption (TDE), la Crittografia a livello di colonna (CLE, Column Level Encryption) e la Backup Encryption. In tutti questi casi i dati vengono crittografati tramite una chiave di crittografia dei dati simmetrica, che viene protetta ulteriormente mediante la crittografia con una gerarchia di chiavi archiviate in SQL Server. In alternativa, l'architettura del provider EKM permette a SQL Server di proteggere le chiavi di crittografia dei dati tramite una chiave asimmetrica archiviata all'esterno di SQL Server in un provider di crittografia esterno. L'uso dell'architettura del provider EKM aggiunge un ulteriore livello di sicurezza e permette alle organizzazioni di separare la gestione di chiavi e dati.

SQL Server Connector per l'insieme di credenziali delle chiavi di Azure permette a SQL Server di sfruttare il servizio di insieme di credenziali delle chiavi scalabile, con prestazioni e disponibilità elevata come provider EKM per la protezione delle chiavi di crittografia. Il servizio di insieme di credenziali delle chiavi può essere usato con installazioni di SQL Server in Macchine virtuali di Microsoft Azure e per server locali. Il servizio di insieme di credenziali delle chiavi permette anche di usare moduli di protezione hardware strettamente controllati e monitorati per un livello di protezione più elevato per le chiavi di crittografia asimmetriche. Per altre informazioni sull'insieme di credenziali delle chiavi, vedere la pagina relativa all'insieme di credenziali delle chiavi di Azure.

Inizio pagina

La figura seguente riepiloga il flusso di processi di EKM tramite l'insieme di credenziali delle chiavi. I numeri dei passaggi dei processi nella figura non devono corrispondere ai numeri dei passaggi di configurazione che seguono la figura.

EKM di SQL Server con l'insieme di credenziali delle chiave di Azure

Passaggio 1: Configurare l'insieme di credenziali delle chiavi per l'uso da parte di SQL Server

Eseguire i passaggi seguenti per configurare un insieme di credenziali delle chiavi da usare con Motore di database di SQL Server per la protezione delle chiavi di crittografia. È possibile che un insieme di credenziali sia già in uso per l'organizzazione. Se non esiste alcun insieme di credenziali, l'amministratore di Azure dell'organizzazione incaricato di gestire le chiavi di crittografia può creare un insieme di credenziali, generare una chiave asimmetrica nell'insieme di credenziali e quindi autorizzare SQL Server a usare la chiave. Per acquisire familiarità con il servizio di insieme di credenziali delle chiavi, vedere Introduzione all'insieme di credenziali delle chiavi di Azure e le informazioni di riferimento sui cmdlet PowerShell per l'insieme di credenziali delle chiavi di Azure.

Nota importanteImportante

Se sono disponibili più sottoscrizioni di Azure, sarà necessario usare la sottoscrizione che include SQL Server.

  1. **Creare un insieme di credenziali:**creare un insieme di credenziali seguendo le istruzioni presenti nella sezione Creare un insieme di credenziali delle chiavi dell'articolo Introduzione all'insieme di credenziali delle chiavi di Azure. Registrare il nome dell'insieme di credenziali. Questo argomento usa ContosoKeyVault come nome per l'insieme di credenziali delle chiavi.

  2. **Generare una chiave asimmetrica nell'insieme di credenziali:**la chiave asimmetrica nell'insieme di credenziali delle chiavi viene usata per proteggere le chiavi di crittografia di SQL Server. Solo la parte pubblica della chiave asimmetrica esce dall'insieme di credenziali, mentre la parte privata non viene mai esportata dall'insieme di credenziali. Tutte le operazioni di crittografia che usano la chiave asimmetrica vengono delegate all'insieme di credenziali delle chiavi di Azure e vengono protette dalla sicurezza dell'insieme di credenziali delle chiavi.

    È possibile generare la chiave asimmetrica e archiviarla nell'insieme di credenziali in molti modi. È possibile generare esternamente una chiave e importarla nell'insieme di credenziali come file con estensione pfx oppure creare la chiave direttamente nell'insieme di credenziali usando le API dell'insieme di credenziali delle chiavi.

    SQL Server Connector richiede che le chiavi asimmetriche siano RSA a 2048 bit e il nome della chiave può usare solo i caratteri compresi tra "a-z", "A-Z", "0-9" e "-". In questo documento il nome della chiave asimmetrica è ContosoMasterKey. Sostituire questo valore con il nome univoco usato per la chiave.

    Nota sulla sicurezzaNota sulla sicurezza

    L'importazione della chiave asimmetrica è consigliata per scenari di produzione, poiché permette all'amministratore di depositare la chiave in un sistema di deposito della chiave. Se la chiave asimmetrica viene creata nell'insieme di credenziali, non sarà possibile depositarla, poiché la chiave privata non può mai lasciare l'insieme di credenziali. È consigliabile depositare le chiavi usate per proteggere i dati critici. La perdita di una chiave asimmetrica renderebbe irrecuperabili in modo permanente i dati.

    Nota sulla sicurezzaNota sulla sicurezza

    L'insieme di credenziali delle chiavi supporta più versioni della stessa chiave denominata. È consigliabile non eseguire il controllo delle versioni né il rollback delle chiavi che vengono usate da SQL Server Connector. Se l'amministratore vuole eseguire il rollback della chiave usata per la crittografia di SQL Server, sarà necessario creare una nuova chiave con un nome diverso nell'insieme di credenziali e usarla per crittografare la chiave DEK.

    Per altre informazioni su come importare una chiave nell'insieme di credenziali delle chiavi o creare una chiave nell'insieme di credenziali delle chiavi (procedura non consigliata per un ambiente di produzione), vedere la sezione Aggiungere una chiave o un segreto all'insieme di credenziali delle chiavi in Introduzione all'insieme di credenziali delle chiavi di Azure..

    Nota importanteImportante

    È necessario che gli utenti abbiano almeno le operazioni wrapKey e unwrapKey per l'insieme di credenziali delle chiavi.

  3. **Ottenere entità servizio di Azure Active Directory da usare per SQL Server:**quando l'organizzazione esegue la registrazione per un servizio cloud Microsoft, ottiene un'istanza di Azure Active Directory. Creare le entità servizio nell'istanza di Azure Active Directory per SQL Server (per l'autenticazione in Azure Active Directory) per l'accesso all'insieme di credenziali delle chiavi.

    • Un'entità servizio sarà necessaria per consentire a un amministratore di SQL Server di accedere all'insieme di credenziali per configurare SQL Server in modo da usare la crittografia.

    • Un'altra entità servizio sarà necessaria per consentire al Motore di database di SQL Server di accedere all'insieme di credenziali per eseguire l'operazione unwrap per le chiavi usate nella crittografia di SQL Server.

    Per altre informazioni su come registrare un'applicazione e generare un'entità servizio, vedere la sezione Registrare un'applicazione con Azure Active Directory in Introduzione all'insieme di credenziali delle chiavi di Azure. Il processo di registrazione restituisce un ID applicazione (noto anche come ID CLIENT) e una Chiave di autenticazione (nota anche come Segreto) per ogni entità servizio di Azure Active Directory. Quando usato nell'istruzione CREATE CREDENTIAL, il trattino deve essere rimosso dall'ID CLIENT. Registrare questi valori da usare negli script seguenti:

    • Entità servizio per un account di accesso sysadmin: CLIENTID_sysadmin_login e SECRET_sysadmin_login

    • Entità servizio per il Motore di database di SQL Server: CLIENTID_DBEngine e SECRET_DBEngine.

  4. **Concedere le autorizzazioni per consentire alle entità servizio di accedere all'insieme di credenziali delle chiavi:**Le entità servizio CLIENTID_sysadmin_login e CLIENTID_DBEngine richiedono le autorizzazioni get, list, wrapKey e unwrapKey nell'insieme di credenziali delle chiavi. Se si intende creare chiavi tramite SQL Server, è necessario concedere anche l'autorizzazione create nell'insieme di credenziali delle chiavi.

    Per altre informazioni sulla concessione delle autorizzazioni all'insieme di credenziali, vedere la sezione Autorizzare l'applicazione a usare la chiave o il segreto in Introduzione all'insieme di credenziali delle chiavi di Azure.

    Collegamenti alla documentazione dell'insieme di credenziali delle chiavi di Azure

Inizio pagina

Passaggio 2: Installare SQL Server Connector

SQL Server Connector viene scaricato e installato dall'amministratore del computer in cui è in esecuzione SQL Server. È possibile scaricare SQL Server Connector dalla pagina Microsoft Download Center. Cercare SQL Server Connector per l'insieme di credenziali delle chiavi di Microsoft Azure, esaminare i dettagli, i requisiti di sistema e le istruzioni di installazione e scegliere di scaricare il connettore e avviare l'installazione con il pulsante Scarica. Esaminare la licenza e accettarne le condizioni, quindi continuare.

Per impostazione predefinita, il connettore viene installato in C:\Program Files\SQL Server Connector for Microsoft Azure Key Vault. Questo percorso può essere modificato durante l'installazione. Se si modifica il percorso, apportare la modifica negli script riportati di seguito.

Dopo aver completato l'installazione, nel computer vengono installati gli elementi seguenti:

  • Microsoft.AzureKeyVaultService.EKM.dll: si tratta della DLL del provider di crittografia EKM che deve essere registrata con SQL Server mediante l'istruzione CREATE CRYPTOGRAPHIC PROVIDER.

  • SQL Server Connector per l'insieme di credenziali delle chiavi di Azure: si tratta di un servizio di Windows che consente al provider di crittografia EKM di comunicare con l'insieme di credenziali delle chiavi.

L'installazione di SQL Server Connector consente anche di scaricare facoltativamente gli script di esempio per la crittografia di SQL Server.

Inizio pagina

Passaggio 3: Configurare SQL Server per l'uso di un provider EKM per l'insieme di credenziali delle chiavi

Autorizzazioni

Per completare l'intero processo è necessaria l'autorizzazione CONTROL SERVER o l'appartenenza al ruolo predefinito del server sysadmin. Le azioni specifiche richiedono le autorizzazioni seguenti:

  • Per creare un provider di crittografia è necessaria l'autorizzazione CONTROL SERVER o l'appartenenza al ruolo predefinito del server sysadmin.

  • Per modificare un'opzione di configurazione ed eseguire l'istruzione RECONFIGURE, è necessario disporre dell'autorizzazione a livello di server ALTER SETTINGS. L'autorizzazione ALTER SETTINGS è assegnata implicitamente ai ruoli predefiniti del server sysadmin e serveradmin.

  • Per creare le credenziali, è necessaria l'autorizzazione ALTER ANY CREDENTIAL.

  • Per aggiungere le credenziali per un account di accesso, è necessaria l'autorizzazione ALTER ANY LOGIN.

  • Per creare una chiave asimmetrica, è necessaria l'autorizzazione CREATE ASYMMETRIC KEY.

Icona freccia usata con il collegamento Torna all'inizio[Top]

Per configurare SQL Server per l'uso di un provider di crittografia

  1. Configurare il Motore di database per usare EKM e registrare (creare) il provider di crittografia con SQL Server.

    -- Enable advanced options.
    USE master;
    GO
    
    sp_configure 'show advanced options', 1 ;
    GO
    RECONFIGURE ;
    GO
    -- Enable EKM provider
    sp_configure 'EKM provider enabled', 1 ;
    GO
    RECONFIGURE ;
    GO
    
    -- Create a cryptographic provider, using the SQL Server Connector
    -- which is an EKM provider for the Azure Key Vault. This example uses 
    -- the name AzureKeyVault_EKM_Prov.
    
    CREATE CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM_Prov 
    FROM FILE = 'C:\Program Files\SQL Server Connector for Microsoft Azure Key Vault\Microsoft.AzureKeyVaultService.EKM.dll';
    GO 
    
  2. Configurare le credenziali di SQL Server per un account di accesso di amministratore di SQL Server per usare l'insieme di credenziali delle chiavi in modo da configurare e gestire gli scenari di crittografia di SQL Server.

    Nota importanteImportante

    L'argomento IDENTITY di CREATE CREDENTIAL richiede il nome dell'insieme di credenziali delle chiavi. L'argomento SECRET di CREATE CREDENTIAL richiede i valori per <ID client> (senza trattini) e <Segreto> da passare insieme senza aggiungere spazi tra di essi.

    Nell'esempio seguente l'ID client (EF5C8E09-4D2A-4A76-9998-D93440D8115D) viene immesso con tutti i trattini rimossi come stringa EF5C8E094D2A4A769998D93440D8115D e il Segreto è rappresentato dalla stringa SECRET_sysadmin_login.

    USE master;
    CREATE CREDENTIAL sysadmin_ekm_cred 
        WITH IDENTITY = 'ContosoKeyVault', 
        SECRET = 'EF5C8E094D2A4A769998D93440D8115DSECRET_sysadmin_login' 
    FOR CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM_Prov ;
    
    -- Add the credential to the SQL Server administrators domain login 
    ALTER LOGIN [<domain>/<login>]
    ADD CREDENTIAL sysadmin_ekm_cred;
    

    Per un esempio dell'uso delle variabili per gli argomenti CREATE CREDENTIAL e della rimozione dei trattini dall'ID client a livello di codice, vedere CREATE CREDENTIAL (Transact-SQL).

  3. Se è stata importata una chiave asimmetrica come descritto in precedenza nella sezione 3 del passaggio 1, aprire la chiave, fornendo il nome della chiave nell'esempio seguente.

    CREATE ASYMMETRIC KEY CONTOSO_KEY 
    FROM PROVIDER [AzureKeyVault_EKM_Prov]
    WITH PROVIDER_KEY_NAME = 'ContosoMasterKey',
    CREATION_DISPOSITION = OPEN_EXISTING;
    

    Sebbene non consigliabile per un ambiente di produzione (perché la chiave non può essere esportata), è possibile creare una chiave asimmetrica direttamente nell'insieme di credenziali da SQL Server. Se in precedenza non è stata importata alcuna chiave, creare una chiave asimmetrica nell'insieme di credenziali delle chiavi ai fini del test usando lo script seguente. Eseguire lo script, usando un account di accesso di cui è stato effettuato il provisioning con le credenziali sysadmin_ekm_cred.

    CREATE ASYMMETRIC KEY CONTOSO_KEY 
    FROM PROVIDER [AzureKeyVault_EKM_Prov]
    WITH ALGORITHM = RSA_2048,
    PROVIDER_KEY_NAME = 'ContosoMasterKey';
    

Per altre informazioni, vedere quanto segue:

Icona freccia usata con il collegamento Torna all'inizio[Top]

Esempi

Esempio A: Crittografia dati trasparente tramite una chiave asimmetrica dell'insieme di credenziali delle chiavi

Dopo aver completato i passaggi precedenti, creare le credenziali e un account di accesso e quindi creare una chiave di crittografia del database protetta dalla chiave asimmetrica nell'insieme di credenziali delle chiavi. Usare la chiave di crittografia del database per crittografare un database con TDE.

Per crittografare un database è necessaria l'autorizzazione CONTROL per il database.

Per abilitare TDE tramite EKM e l'insieme di credenziali delle chiavi

  1. Creare le credenziali di SQL Server per il Motore di database da usare per l'accesso a EKM con l'insieme di credenziali delle chiavi durante il caricamento del database.

    Nota importanteImportante

    L'argomento IDENTITY di CREATE CREDENTIAL richiede il nome dell'insieme di credenziali delle chiavi. L'argomento SECRET di CREATE CREDENTIAL richiede i valori per <ID client> (senza trattini) e <Segreto> da passare insieme senza aggiungere spazi tra di essi.

    Nell'esempio seguente l'ID client (EF5C8E09-4D2A-4A76-9998-D93440D8115D) viene immesso con tutti i trattini rimossi come stringa EF5C8E094D2A4A769998D93440D8115D e il Segreto è rappresentato dalla stringa SECRET_DBEngine.

    USE master;
    CREATE CREDENTIAL Azure_EKM_TDE_cred 
        WITH IDENTITY = 'ContosoKeyVault', 
        SECRET = 'EF5C8E094D2A4A769998D93440D8115DSECRET_DBEngine' 
        FOR CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM_Prov ;
    
  2. Creare un account di accesso di SQL Server che verrà usato dal Motore di database per TDE e aggiungervi le credenziali. Questo esempio usa la chiave asimmetrica CONTOSO_KEY archiviata nell'insieme di credenziali delle chiavi importato o creato in precedenza per il database master, come sopra descritto nella sezione 3 del passaggio 3.

    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
    
  3. Creare la chiave di crittografia del database (DEK) che verrà usata per TDE. La chiave DEK può essere creata usando qualsiasi algoritmo supportato da SQL Server o la lunghezza della chiave. La chiave DEK verrà protetta dalla chiave asimmetrica nell'insieme di credenziali delle chiavi.

    Questo esempio usa la chiave asimmetrica CONTOSO_KEY archiviata nell'insieme di credenziali delle chiavi importato o creato in precedenza, come sopra descritto nella sezione 3 del passaggio 3.

    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
    

    Per altre informazioni, vedere quanto segue:

Inizio pagina

Esempio B: Crittografia dei backup tramite una chiave asimmetrica dell'insieme di credenziali delle chiavi

I backup crittografati sono supportati a partire da . L'esempio seguente crea e ripristina un backup crittografato di una chiave DEK protetta dalla chiave asimmetrica 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

Esempio del codice di ripristino.

RESTORE DATABASE [DATABASE_TO_BACKUP]
FROM DISK = N'[PATH TO BACKUP FILE]' WITH FILE = 1, NOUNLOAD, REPLACE;
GO

Per altre informazioni sulle opzioni di backup, vedere BACKUP (Transact-SQL).

Esempio C: Crittografia a livello di colonna tramite una chiave asimmetrica dell'insieme di credenziali delle chiavi

L'esempio seguente crea una chiave simmetrica protetta dalla chiave asimmetrica nell'insieme di credenziali delle chiavi. La chiave simmetrica viene quindi usata per crittografare i dati nel database.

Questo esempio usa la chiave asimmetrica CONTOSO_KEY archiviata nell'insieme di credenziali delle chiavi importato o creato in precedenza, come sopra descritto nella sezione 3 del passaggio 3. Per usare questa chiave asimmetrica nel database ContosoDatabase, è necessario eseguire nuovamente l'istruzione CREATE ASYMMETRIC KEY in modo da fornire al database ContosoDatabase un riferimento alla chiave.

USE [ContosoDatabase];
GO

-- Create a reference to the key in the key vault
CREATE ASYMMETRIC KEY CONTOSO_KEY 
FROM PROVIDER [AzureKeyVault_EKM_Prov]
WITH PROVIDER_KEY_NAME = 'ContosoMasterKey',
CREATION_DISPOSITION = OPEN_EXISTING;

-- Create the data encryption key.
-- The data encryption key can be created using any SQL Server 
-- supported algorithm or key length.
-- The DEK will be protected by the asymmetric key in the key vault

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;

Vedere anche

Riferimento

CREATE CRYPTOGRAPHIC PROVIDER (Transact-SQL)

CREATE CREDENTIAL (Transact-SQL)

CREATE ASYMMETRIC KEY (Transact-SQL)

CREATE SYMMETRIC KEY (Transact-SQL)

Concetti

Extensible Key Management (EKM)

Abilitare TDE utilizzando EKM

Altre risorse

Backup Encryption

Create an Encrypted Backup