Contattaci

AZURE KEY VAULT

AZURE KEY VAULT
  • Data: 30 Giugno 2022
  • Autore: Nicola Donati
  • Categorie

  • Giuneco Tech

    Il nostro settore richiede uno studio continuo e una forte attenzione all’innovazione. Incentiviamo quindi dei programmi formativi annuali per tutti i componenti del team, con ore dedicate (durante l’orario di lavoro) e serate formative sia online che in presenza. Sponsorizziamo eventi, sia come partner che semplicemente come partecipanti, e scriviamo articoli su quello che abbiamo imparato per essere, a nostra volta, dei divulgatori.

    Vai alla sezione Team
  • INTRODUZIONE

    Sempre piú spesso nel mondo digitale si sente parlare di sicurezza, password e informazioni sensibili che devono o almeno dovrebbero essere memorizzate in modo sicuro, permettendo all’utente un esperienza serena e sicura quando naviga nel web o utilizza servizi digitali. 

    Memorizzare le informazioni in maniera sicura peró non é cosa da poco, ed é qui che entra in gioco Azure Key Vault. 

    Azure Key Vault é sostanzialmente un servizio cloud che permette di archiviare, gestire e distribuire informazioni sensibili in maniera sicura e completamente gestita. 

    security

    Perché Azure Key Vault 

    Key Vault riduce notevolmente le possibilità che i secret possano trapelare accidentalmente. Ci sono anche alcuni vantaggi aggiuntivi come: 

    1. I secret sono separati dal codice 

    Gli sviluppatori non hanno più bisogno di archiviare le informazioni di sicurezza all’interno delle applicazioni. 

    2. Accesso tramite URI 

    Le applicazioni possono accedere in modo sicuro alle informazioni di cui hanno bisogno utilizzando gli URI. Questi URI consentono alle applicazioni di recuperare versioni specifiche di un secret. 

    3. Non c’è bisogno di codice personalizzato 

    Non è necessario scrivere un codice personalizzato per proteggere le informazioni archiviate in Key Vault. 

    4. Monitoraggio: 

    É possibile abilitare la registrazione delle azioni. Key Vault puó essere configurato per: 

    • Loggare le azioni in un account di archiviazione. 
    • Trasmettere i log in un hub eventi (streaming). 
    • Inviare i log al servizio di monitoraggio di Azure 

    5. Autenticazione tramite AAD, Azure Active Directory 

    L’accesso a un Key Vault richiede autenticazione e autorizzazione adeguate. L’autenticazione viene eseguita tramite Azure Active Directory. 

    6. Due modi per autorizzare 

    É possibile essere autorizzati tramite le policy di accesso basate sul ruolo (RBAC di Azure) o tramite i criteri di accesso di Key Vault 

     

    Managed identity 

    L’identità gestita è un concetto che elimina la necessità di archiviare le credenziali una volta che un’applicazione è stata distribuita nel cloud. Usando l’identità gestita, possiamo accedere in modo sicuro a una vasta gamma di servizi di Azure senza dover archiviare credenziali come stringhe di connessione o password.  

    digital identity

    Le identità gestite sono di due tipi: 

    Assegnata dal sistema 

    Viene attivata direttamente sul servizio cloud di Azure. Ad esempio, possiamo creare un’identità gestita per la nostra app Web che verrà eliminata automaticamente una volta eliminata l’istanza dell’app Web 

    Assegnata dall’utente 

    Si tratta di una risorsa di Azure autonoma creata indipendentemente dall’istanza del servizio effettiva. È possibile assegnare questo identificatore a una o più risorse di Azure contemporaneamente. Ad esempio, è possibile impostare questa identità sia su un’app Web di Azure che su una funzione di Azure contemporaneamente 

    ESEMPIO

    Creazione di un app web che utilizza Azure Key Vault per il recupero di un secret 

    Per prima cosa é necessario avere un account Azure; é possibile registrarsi all’indirizzo https://portal.azure.com. 

    Una volta creato l’account é necessario creare una Web App e anche una istanza di Azure Key Vault dal portale Azure. 

    Creare un app web in Azure 

    1. Dal portale Azure premere il pulsante “crea una risorsa” nella pagina principale 
    2. Selezionare App Web 
    3. Selezionare le opzioni in base al proprio piano  
    4. Scegliere “Codice” nella sezione “Pubblica” 
    5. Scegliere “.NET 6” e come runtime e “Windows” come sistema operativo 
    6. Premere “Verifica+Crea” per creare l’istanza 

     

    crea app web

    A questo punto l’app è disponibile anche dalla schermata principale.

    L’ultimo punto fondamentale sarà abilitare l’identità gestita del servizio dal menu “identità” disponibile dalla pagina di configurazione dell’app.

    Creazione di una istanza di Azure Key Vault

    1. Come per l’app dalla pagina principale del portale selezionare “Crea una risorsa” e selezionare “Azure Key Vault”
    2. Inserire il nome da assegnare all’istanza e premere “Verifica e crea”

    crea insieme credenziali

    Creare un secret in Azure Key Vault

    Adesso che abbiamo creato un istanza di Azure Key Vault é possibile aggiungere un nuovo secret che andremo poi a recuperare tramite l’app web.

    1. Dal menu dispobibile sulla pagina di configurazione di Key Vault selezionare “Segreti” e poi cliccare su “Genera/Importa”
    2. Inserire i dati e premere “Crea”

    crea segreto

    Autorizzare l’app per l’accesso

    Adesso é necessario fornire l’autorizzazione all’app per accedere al secret creato in precedenza.

    1. Dal menu di configurazione di Key Vault selezionare “Criteri di accesso” e poi premere “Aggiungi criterio”
    2. Selezionare dal menu a tendina (“Autorizzazioni segrete”) i permessi “Recupera” ed “Elenca”
    3. Selezionare un’entitá di accesso, ovvero é necessario selezionare l’app web creata in precedenza per assegnare i criteri di accesso appena scelti
    4. Premere “Aggiungi” e poi “Salva” per completare l’operazione

    A questo punto l’app sará in grado di accedere a Key Vault per recuperare il secret che abbiamo creato.

    Azure Key Vault e ASP .NET Core application

    Utilizzeremo Azure Key Vault per centralizzare l’archiviazione e la gestione delle impostazioni dell’applicazione per un’applicativo .NET 6.0 (e versioni successive)/ASP.NET Core.

    Iniziamo creando un’applicativo ASP .NET Core Web, quindi apriamo Visual Studio 2022 e selezioniamo “Crea un nuovo progetto”

    visual studio

    Nel nostro caso vogliamo creare un progetto API quindi selezioniamo “API Web ASP .NET Core C#” nella lista dei template.

    nuovo progetto

    Impostiamo .NET 6.0 come versione del framework e poiché non utilizzeremo l’autenticazione, HTTPS, Docker o OpenAPI, assicuriamoci che tutte queste caselle di controllo siano disabilitate.

    info aggiuntive

    Installazione dei pacchetti NuGet

    Per utilizzare AzureKeyVault, è necessario installare i seguenti pacchetti:

    • Extensions.Azure
    • Security.KeyVault.Secrets.
    • Extensions.AspNetCore.Configuration.Secrets
    • Identity (ci servirá per configurare correttamente la pubblicazione)

    Mentre possiamo usare il primo per inserire le dipendenze per l’accesso ai servizi di Azure, possiamo usare il secondo per accedere ai segreti tramite un’istanza di SecretClient.

    È possibile installare questi pacchetti in uno dei due modi seguenti: tramite NuGet Package Manager integrato nell’IDE di Visual Studio 2022 o eseguendo questi comandi nella Package Manager Console:

    • Install-Package Microsoft.Extensions.Azure
    • Install-Package Azure.Security.KeyVault.Secrets
    • Install-Package Azure.Extensions.AspNetCore.Configuration.Secrets
    • Install-Package Azure.Identity

     

     

    Come leggere i secrets di Azure Key Vault in .NET Core

    In questa sezione esamineremo come leggere i secrets da AzureKeyVault.

    Specificare l’URI del Vault in AppSettings

    Creiamo una sezione denominata “KeyVault” nel file appsettings.json e specifichiamo una chiave denominata “VaultUri” come mostrato di seguito:

    {
      "Logging": {
        "LogLevel": {
          "Default": "Information",
          "Microsoft.AspNetCore": "Warning"
        }
      },
      "AllowedHosts": "*",
      "KeyVault": {
        "VaultUri": "https://{your-KeyVault-instance-name}.vault.azure.net/"
      }
    }
    

    La classe KeyValueController

    Il “KeyValueController” sfrutta la límplementazione di base di Iconfiguration che é possibile iniettare come dipendenza nel costruttore del controller.

    Per ottenere il valore del secret basta recuperarlo, tramite il nome del secret stesso, dall’oggetto _configuration cosi come mostrato sotto.

    using Microsoft.AspNetCore.Mvc;
    
    namespace KeyVaultTutorial.Controllers
    {
        [ApiController]
        [Route("[controller]")]
        public class KeyVaultController : ControllerBase
        {
    
            private readonly IConfiguration _configuration;
    
            public KeyVaultController(IConfiguration configuration)
            {
                _configuration = configuration;
            }
    
            [HttpGet]
            public IActionResult Get([FromQuery] string secretName)
            {
                try
                {
    
                    if (string.IsNullOrEmpty(secretName)) return BadRequest();
                    
                    string secretValue = _configuration[secretName];
    
                    if (!string.IsNullOrEmpty(secretValue))
                    {
                        return Ok(secretValue);
                    }
                    else
                    {
                        return NotFound("Secret key not found.");
                    }
                }
                catch
                {
                    return BadRequest("Error: Unable to read secret");
                }
            }
        }
    }