Azure Key Vault: Gestione sicura di password, chiavi crittografiche e certificati

La gestione sicura delle chiavi di cifratura è un aspetto fondamentale della protezione dei dati nel cloud. Con Azure Key Vault è possibile crittografare chiavi e password e successivamente gestirne la distribuzione, in modo tale che non vengano accidentalmente perse. Utilizzando Azure Key Vault gli sviluppatori non hanno più bisogno di inserire le informazioni relative alla sicurezza all’interno delle proprie applicazioni e nel codice. Ad esempio, se un’applicazione necessita di connettersi ad un database non è necessario mettere le stringhe di connessione nel codice ed è possibile conservarle in maniera sicura in Azure Key Vault.

L’utente o l’applicazione devono prima autenticarsi per poter accedere alle informazioni contenute in Azure Key Vault e successivamente devono essere autorizzate ad effettuare specifiche operazioni. L’autenticazione può essere efffettuata tramite Azure Active Directory, mentre l’autorizzazione può essere effettuata sia tramite role-based access control (RBAC) che con le Azure Key Vault access policy

Creazione di un Azure Key Vault

Per creare un Azure Key Vault è sufficiente effettuare una ricerca nel portale di Azure ed effettuare la creazione di una nuova risorsa .

Figura 1: Risorsa Key Vault del portale di Azure

Procedete alla creazione della risorsa inserendo la sottoscrizione, il resource group, la region ed il key vault name. Azure Key Vault viene offerto in base a due livelli: Standard e Premium. Alla pagina https://azure.microsoft.com/it-it/pricing/details/key-vault/ trovate maggiori informazioni relative ai prezzi e alle differenze tra i diversi modelli.

Figura 2: Creazione dell’Azure Key Vault

Nella pagina delle Access Policy è possibile definire quali servizi potranno accedere ad Azure Key Vault e quali utenti. Ci occuperemo della modifica di queste informazioni dopo la creazione del vault.

Figura 3: Access Policy di Azure Key Vault

È possibile decidere se la connessione ad Azure Key Vault deve avvenire da qualsiasi indirizzo oppure deve essere consentita soltanto da alcune reti.

Figura 4: Scelta delle reti da cui sarà possibile accedere ad Azure Key Vault

Figura 5: Configurazione di Azure Key Vault completata

La creazione di Azure Key Vault dura pochi secondi. Dal portale di Azure è possibile visualizzare le informazioni principali relative al vault creato.

Figura 6: Overview di Azure Key Vault

Dalla scheda Access Policy, come già detto, è possibile aggiungere delle policy di accesso per consentire ad utenti e applicazioni di accedere al vault.

Figura 7: Gestione delle access policy all’Azure Key Vault

Per modificare i permessi di accesso è sufficiente aprire il menu a tendina relativo alla Key, al Secret o al Certificate e scegliere quello che volete consentire. Consentite, ad esempio, all’utente amministrazione di utilizzare tutti i permessi.

Figura 8: Modifica delle operazioni consentite ad un utente

Per poter aggiungere una nuova access policy al nostro vault è sufficiente cliccare su Add Access Policy e configurare le opzioni di accesso. Nella figura sotto sono mostrati i dettagli di configurazione, i permessi su le chiavi sui segreti e sui certificati che vengono consentiti ad uno specifico utente od una particolare applicazione di Azure AD.

Figura 9: Creazione di una nuova access policy all’Azure Key Vault

Per poter creare una nuova chiave sarà sufficiente cliccare su nodo Keys e dalla scheda che si aprirà scegliere il tipo di chiave che vi interessa, generandola oppure importandola nel vault.

Figura 10: Creazione di una nuova chiave di crittografia in Azure Key Vault

Figura 11: Chiavi di crittografia create in Azure Key Vault

Per creare una nuova password è sufficiente cliccare sul nodo Secrets e digitare il nome e il valore della password. È anche possibile definire una data di scadenza per la password.

Figura 12: Creazione di un nuovo segreto in Azure Key Vault

Figura 13: Segreti disponibili in Azure Key Vault

Come abbiamo visto, la creazione e la configurazione di Azure Key Vault sono veramente semplici. Vediamo ora come testare l’utilizzo di Azure Key Vault.

Registrazione di un’applicazione che utilizzerà Azure Key Vault

Configuriamo un’applicazione che deve accedere a un Azure SQL Database. Quello che faremo sarà configurare l’autenticazione necessaria all’applicazione ad accedere al vault. Per farlo registriamo una nuova applicazione in Azure Active Directory.

Dal portale di Azure andate in Azure Active Directory e nella sezione Manage cliccate su App Registration. Date un nome all’applicazione e inserite un valore nel campo Redirect URI, come mostrato nella figura sotto:

Figura 14: Registrazione di una nuova applicazione in Azure Active Directory

Segnatevi il valore del campo Application (client) ID, perché lo riutilizzeremo in seguito.

Figura 15: Registrazione dell’applicazione completata

Nella sezione Certificates & secrets cliccate su + New client secret ed inserite un nome per la password di accesso dell’applicazione. È anche possibile definire una scadenza per la password

Figura 16: Creazione di una password di accesso per l’applicazione

Segnatevi il valore della chiave, perché lo riutilizzeremo in seguito.

Figura 17: Password di accesso dell’applicazione

Creazione di una access policy per permettere ad un’applicazione di accedere all’Azure Key Vault

Per permettere ad un’applicazione di accedere all’Azure Key Vault è necessario aggiungere una Access Policy. Dal portale di Azure selezionate il vostro Azure Key Vault e dal nodo Access Policy scegliete +Add Access Policy. Scegliete dal menu a tendina il tipo di connettore (nel mio caso SQL Server Connector) e i permessi per l’accesso alla chiave. Concedete i permessi di get,wrapKey,unwrapKey,sign,verify,list

Figura 18: Creazione dei permessi di accesso alle chiavi di Azure Key Vault

Come utente autorizzato scegliete l’app che avete registrato prima. Nel mio caso l’app si chiama SQLApp.

Figura 19: Autorizzazione per la Azure AD registered Application

Come si può vedere dalla figura sotto, adesso ci sono due Access Policy definite.

Figura 20: Access Policy dell’Azure Key Vault

Utilizzo del Key Vault per cifrare i dati di Azure SQL Database

Obiettivo di questo esercizio è creare un nuovo Azure SQL Database ed una tabella che conterrà dei dati crittografati. In questa tabella, dove verranno inseriti dei dati medici, voglio che alcune colonne siano crittografate utilizzando una chiave autogenerata che verrà memorizzata in Azure Key Vault. Successivamente verrà creata un’applicazione che si occuperà di caricare i dati nelle colonne crittografate e successivamente effettuare l’accesso ai dati in maniera sicura utilizzando una stringa di connessione che utilizzerà la chiave contenuta in Azure Key Vault.

Per creare un nuovo Azure SQL Database dal portale di Azure cliccate su + Create a resource> Databases > SQL Database

Figura 21: Creazione di un nuovo Azure SQL Database

Inserite tutte le informazioni richieste per la creazione del database. Nella figura sotto sono riassunti tutti i parametri che ho inserito. Utilizzate la stessa location dove avete creato l’Azure Key Vault.

Figura 22: Parametri per la creazione di un nuovo Azure SQL Database

Figura 23: Configurazioni scelte per la creazione del nuovo SQL Azure Database

Modificate la configurazione del firewall per poter permettere l’accesso all’Azure SQL Database. Cliccate su Set Server firewall e nella nuova scheda cliccate su + Add client IP per aggiungere l’indirizzo IP pubblico da cui state navigando.

Figura 24: Creazione del nuovo Azure SQL Database completata

Figura 25: Aggiunto della regola di firewall per permettere la connessione ad Azure SQL Database

Segnatevi anche i parametri di connessione perché verranno successivamente riutilizzati. Utilizzate il parametro ADO.NET e ricordatevi di sostituire {your_password} con la password scelta al momento della creazione

Figura 26: Parametri di connessione al database

Creazione e cifratura della tabella

Per poter creare e cifrare la tabella appena creata nel nostro Azure SQL Database, collegatevi con SQL Server Management Studio, espandete Databases e cliccando col tasto destro sul database medical scegliete New Query.

Digitate ed eseguite la seguente query SQL per generare la nuova tabella Patients

 

Figura 27: Creazione della tabella Patients in SQL Server Management Studio

Terminata la creazione della nuova tabella , fate click con il tasto destro su dbo.Patients e scegliete Encrypt Columns

Figura 28: Cifratura delle colonne

Seguite il wizard per la cifratura delle colonne. Modificate la cifratura delle colonne SSN e Birthdate e configurate l’Encryption Type per SSN a Deterministic e per Birthdate a Randomized.

Figura 29: Wizard per la cifratura delle colonne della tabella

Figura 30: Scelta delle colonne da crittografare e relativo Encryption Type

Nella pagina Master Key Configuration scegliete Azure Key Vault ed autenticatevi. Selezionate l’Azure Key Vault che volete utilizzare

Figura 31: Scelta dell’Azure Key Vault per la Master Key Configuration

Figura 32: Pagina finale del wizard di crittografia

Figura 33: Pagina di verifica finale

Figura 34: Crittografia delle colonne terminate

Una volta che il processo di crittografia sarà terminato, potrete visualizzare da SQL Server Management Studio che da medical > security > Always Encrypted Key saranno visibili le due chiavi create.

Figura 35: Le chiavi di crittografia sono state create

La Master Key Configuration è visibile nel portale di Azure all’interno delle chiavi dell’Azure Key Vault che avete utilizzato.

Figura 36: La Master Key Configuration è visibile tra le chiavi di Azure Key Vault

Creazione di una Console Application che funzioni con le Encrypted Columns

Per creare una Console Application che funzioni con le Encrypted Columns mi servirò di Visual Studio 2019.

Aprite un nuovo progetto e selezionate Visual C# > Console App (.NET Framework). Date un nome al progetto e scegliete .NET Framework 4.7.2.

Figura 37: Creazione di un nuovo progetto in Visual Studio 2019

Figura 38: Configurazione del nuovo progetto Console App (.NET Framework)

Installate due pacchetti Nuget all’interno del progetto utilizzando Tools > NuGet Package Manager > Package Manager Console

Figura 39: Apertura del Package Manager per l’installazione di due pacchetti Nuget

Nella Package Manager Console lanciate I comandi:

 

Figura 40: Installazione dei package completata

Visualizzate la scheda program.cs e incollate all’interno il seguente codice:

Sostituite I valori Connection string, clientId e clientSecret con quelli che vi avevo detto di memorizzare precedentemente. Connection String è la stringa ADO.NET per la connessione all’Azure SQL database, mentre clientId e clientSecret sono i valori della App che avete registrato in Azure AD.

Figura 41: Applicazione che utilizzerà la Encrypted Columns

A questo punto lanciate il programma cliccando su Start. La Console Application effettuerà prima il Build e successivamente verrà eseguita. Come prima operazione aggiungerà dei dati all’applicazione e dopo vi verrà chiesta qual è la password per potervi connettere al server. Inserite quindi la password richiesta.

Figura 42: Esecuzione dell’appllicazione e connessione al server

Lasciate l’applicazione in Running e spostatevi in SQL Management Studio. Cliccate col tasto destro sul database medical e selezionate New Query.

Eseguite la query

 

per visualizzare che i dati che sono stati inseriti nelle colonne crittografate. Noterete che i dati non sono in chiaro ma sono visualizzati in maniera crittografata.

Figura 43: I dati inseriti dall’applicazione sono crittografati

Ritornate nell’applicazione e nel prompt Enter a Valid SSN inserite il valore 999-99-0003. Verrà effettuata una query che riporterà i dati da una colonna crittografata. Poiché l’applicazione ha accesso alla chiave contenuta nell’Azure Key Vault, i dati sono visualizzati in chiaro.

Figura 44: L’applicazione è in grado di visualizzare i dati in chiaro perché ha accesso alla chiave contenuta nell’Azure Key Vault

Conclusioni

Abbiamo bisogno di proteggere le nostre password, i nostri certificati e le nostre chiavi di crittografia. Azure Key Vault permette di poterle gestire in maniera sicura e permette di aumentare considerevolmente la sicurezza dei dati e delle applicazioni.

Per maggiori informazioni vi rimando alla lettura della documentazione ufficiale https://docs.microsoft.com/en-us/azure/key-vault/