Menu
Menu
Contattaci
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 TeamINTRODUZIONE
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.
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:
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
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.
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
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.
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.
Adesso che abbiamo creato un istanza di Azure Key Vault é possibile aggiungere un nuovo secret che andremo poi a recuperare tramite l’app web.
Adesso é necessario fornire l’autorizzazione all’app per accedere al secret creato in precedenza.
A questo punto l’app sará in grado di accedere a Key Vault per recuperare il secret che abbiamo creato.
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”
Nel nostro caso vogliamo creare un progetto API quindi selezioniamo “API Web ASP .NET Core C#” nella lista dei template.
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.
Per utilizzare AzureKeyVault, è necessario installare i seguenti pacchetti:
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:
In questa sezione esamineremo come leggere i secrets da AzureKeyVault.
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/"
}
}
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");
}
}
}
}
Segui Giuneco sui social