Condividi tramite


Archiviare i segreti dell'applicazione in modo sicuro durante lo sviluppo

Suggerimento

Questo contenuto è un estratto dell'eBook, Architettura di microservizi .NET per applicazioni .NET containerizzati, disponibile in documentazione .NET o come PDF scaricabile gratuitamente leggibile offline.

Architettura di Microservizi .NET per Applicazioni .NET Containerizzate miniatura della copertina dell'eBook.

Per connettersi con risorse protette e altri servizi, in genere ASP.NET applicazioni core devono usare stringhe di connessione, password o altre credenziali che contengono informazioni riservate. Queste informazioni riservate sono denominate segreti. È consigliabile non includere segreti nel codice sorgente e assicurarsi di non archiviare segreti nel controllo del codice sorgente. È invece consigliabile usare il modello di configurazione ASP.NET Core per leggere i segreti da posizioni più sicure.

È necessario separare i segreti per accedere alle risorse di sviluppo e gestione temporanea da quelle usate per accedere alle risorse di produzione, perché utenti diversi dovranno accedere a questi diversi set di segreti. Per archiviare i segreti usati durante lo sviluppo, gli approcci comuni riguardano l'archiviazione dei segreti nelle variabili di ambiente o l'uso dello strumento ASP.NET Core Secret Manager. Per un'archiviazione più sicura negli ambienti di produzione, i microservizi possono archiviare i segreti in un insieme di credenziali delle chiavi di Azure.

Archiviare i segreti nelle variabili di ambiente

Un modo per mantenere i segreti fuori dal codice sorgente è consentire agli sviluppatori di impostare segreti basati su stringhe come variabili di ambiente nei computer di sviluppo. Quando si usano variabili di ambiente per archiviare segreti con nomi gerarchici, ad esempio quelli annidati nelle sezioni di configurazione, è necessario assegnare alle variabili il nome per includere la gerarchia completa delle relative sezioni, delimitate da due punti (:).

Ad esempio, l'impostazione di una variabile Logging:LogLevel:Default di ambiente su Debug value equivale a un valore di configurazione del file JSON seguente:

{
    "Logging": {
        "LogLevel": {
            "Default": "Debug"
        }
    }
}

Per accedere a questi valori dalle variabili di ambiente, l'applicazione deve semplicemente chiamare AddEnvironmentVariables sul ConfigurationBuilder durante la costruzione di un IConfigurationRoot.

Annotazioni

Le variabili di ambiente vengono in genere archiviate come testo normale, quindi se il computer o il processo con le variabili di ambiente viene compromesso, i valori delle variabili di ambiente saranno visibili.

Gestisci i segreti con ASP.NET Core Secret Manager

Lo strumento ASP.NET Core Secret Manager fornisce un altro metodo per mantenere i segreti fuori dal codice sorgente durante lo sviluppo. Per usare lo strumento Secret Manager, installare il pacchetto Microsoft.Extensions.Configuration.UserSecrets nel file di progetto. Dopo che la dipendenza è presente ed è stata ripristinata, il dotnet user-secrets comando può essere usato per impostare il valore dei segreti dalla riga di comando. Questi segreti verranno archiviati in un file JSON nella directory del profilo dell'utente (i dettagli variano in base al sistema operativo), lontano dal codice sorgente.

I segreti impostati dallo strumento Secret Manager sono organizzati in base alla UserSecretsId proprietà del progetto che usa i segreti. Pertanto, è necessario assicurarsi di impostare la proprietà UserSecretsId nel file di progetto, come illustrato nel frammento di codice seguente. Il valore predefinito è un GUID assegnato da Visual Studio, ma la stringa effettiva non è importante purché sia univoca nel computer.

<PropertyGroup>
    <UserSecretsId>UniqueIdentifyingString</UserSecretsId>
</PropertyGroup>

L'uso di segreti archiviati con Secret Manager in un'applicazione viene eseguito chiamando AddUserSecrets<T> sull'istanza ConfigurationBuilder di per includere segreti per l'applicazione nella relativa configurazione. Il parametro generico T deve essere un tipo dell'assembly a cui è stato applicato UserSecretId. Di solito, l'uso di AddUserSecrets<Startup> va bene.

AddUserSecrets<Startup>() è incluso nelle opzioni predefinite per l'ambiente di sviluppo quando si usa il CreateDefaultBuilder metodo in Program.cs.