Configurare Microsoft Azure Key Vault
Azure Key Vault è un sistema di gestione di chiavi crittografiche e relativi segreti adoperati da applicazioni e servizi su Azure.
Con Key Vault è possibile crittografare chiavi di autenticazione, certificati .pfx, password ecc., utilizzando anche HSM.
Questo piccolo articolo è un’introduzione al concetto di sicurezza su Cloud e analizzerà come far comunicare un’applicazione con un’infrastruttura su Azure, attraverso l’utilizzo di una chiave crittografata. Tale configurazione viene effettuata tramite Azure PowerShell.
Per informazioni sui costi: https://azure.microsoft.com/it-it/pricing/details/key-vault/
Per velocizzare le cose utilizzeremo un’applicazione d’esempio che Microsoft mette a disposizione: https://www.microsoft.com/en-us/download/details.aspx?id=45343
Installare Azure PowerShell da PowerShell Gallery
Verifichiamo l’installazione di PowerShellGet:
Get-Module PowerShellGet -list | Select-Object Name,Version,Path
Se il risultato è quanto segue, abbiamo già cosa serve:
In caso contrario, installiamo il seguente update:
https://www.microsoft.com/en-us/download/details.aspx?id=51451
Eseguendo PowerShell come amministratore, lanciamo il comando:
Install-Module AzureRM
Nel caso in cui fosse la prima volta che utilizziamo PowerShell Gallery, ci verrà richiesta una conferma prima di installare il modulo.
Confermiamo quindi l’installazione e, una volta terminata, importiamo i nuovi moduli con il comando:
Import-Module AzureRM
A questo punto siamo pronti per iniziare!
Configurare il Key Vault
Il primo passo consiste nell’effettuare il login alla propria sottoscrizione su Azure:
Login-AzureRmAccount
Selezioniamo la specifica sottoscrizione con i comandi:
Get-AzureRmSubscription
Set-AzureRmContext -SubscriptionId <subscription ID>
Creiamo un nuovo Resource Group, che con molta poca fantasia chiameremo “NewResourceGroup”, nel quale effettuare le nostre configurazioni:
New-AzureRmResourceGroup –Name ‘NewResourceGroup’ –Location ‘West Europe’
A questo punto possiamo creare un nuovo Key Vault associato al resource group:
New-AzureRmKeyVault -VaultName ‘FKeyVault’ -ResourceGroupName ‘NewResourceGroup’ -Location ‘West Europe’
L’output di quest’ultimo comando mostra una delle proprietà più importanti: il Vault URI. Tutte le applicazioni che dovranno utilizzare il nuovo KeyVault attraverso le API Rest lo faranno attraverso questo URI.
Aggiungiamo una key al nostro Key Vault:
$key = Add-AzureKeyVaultKey -VaultName ‘FKeyVault’ -Name ‘NewKey’ -Destination ‘Software’
Per verificare l’URI, utilizziamo il comando:
$Key.key.kid
Per configurare una stringa a questa chiave, ad esempio una password chiamata “Segreto” il cui valore è “123password”, è necessario effettuare due operazioni:
- convertire la stringa in una stringa sicura;
- associare la stringa sicura alla chiave.
$secretval = ConvertTo-SecureString ‘123password’ -AsPlainText –Force
$secret = Set-AzureKeyVaultSecret -VaultName ‘FKeyVault’ -Name ‘Segreto’ -SecretValue $secretval
Per verificarne l’URI:
$secret.Id
Per verificare quanto appena configurato:
Get-AzureKeyVaultKey –VaultName ‘NKeyVault’
Get-AzureKeyVaultSecret –VaultName ‘NKeyVault’
Configurare l’applicazione
Dopo aver scaricato l’applicazione d’esempio, apriamo la solution con Visual Studio
Contestualmente nella directory scripts troveremo lo script GetAppConfigSettings.ps1 da modificare ed eseguire.
È sufficiente modificare le prime righe configurando ciò che abbiamo appena creato:
- Nome del Key Vault
- Nome del Resurce Group
- Nome dell’applicazione
Eseguiamo lo script.
Quando richiesto, inseriamo una password per il certificato.
Al termine dell’esecuzione dello script in output avremo delle chiavi da inserire all’interno del file app.config dell’applicazione.
Caricando lo snap-in dei certificati relativi all’account locale è possibile comprovare l’avvenuta creazione del certificato, senza il quale l’applicazione non sarà in grado di verificare le credenziali su Azure.
Le applicazioni che utilizzano Key Vault devono autenticarsi utilizzando un token generato da Active Directory, nel nostro caso Azure Active Directory.
Per farlo, clicchiamo su “Azure Active Directory”, successivamente su “App registrations” e cerchiamo la nostra applicazione HelloKeyVault.
Abilitiamo l’applicazione all’utilizzo della chiave copiando il clientID (Application ID) e utilizziamo il seguente comando:
Set-AzureRmKeyVaultAccessPolicy -VaultName ‘FKeyVault’ -ServicePrincipalName 341efa38-faf5-459e-903a-05e9a5ad7309 -PermissionsToKeys all
Per verificare che tutto sia andato a buon fine proviamo a eseguire l’applicazione dal sistema in cui è installato il certificato. In questo modo vedremo come questa utilizzi il Key Vault generato e la relativa chiave, con la possibilità di eseguire tutte le operazioni che il Key Vault stesso mette a disposizione:
Conclusioni
La sicurezza è sempre una tematica attuale e, spesso, sottovalutata.
In questo contesto, Azure fornisce delle soluzioni pratiche anche per quei clienti spaventati dall’avere i propri dati sul Cloud.
Fornire agli sviluppatori delle chiavi crittografate, centralizzandone la gestione e mantenendo uno standard di sicurezza adeguato è solo uno dei pregi di questa soluzione, benché sia facilmente intuibile di aver trattato solo scalfito la superficie di quest’ampia tematica.