Spara inställningar för hemliga program på ett säkert sätt för ett webbprogram

Översikt

Den här artikeln beskriver hur du på ett säkert sätt sparar inställningar för hemliga programkonfigurationer för Azure-program.

Traditionellt sparas alla konfigurationsinställningar för webbprogram i konfigurationsfiler som Web.config. Den här metoden leder till att du checkar in hemliga inställningar, till exempel molnautentiseringsuppgifter till offentliga källkontrollsystem som GitHub. Samtidigt kan det vara svårt att följa rekommenderade säkerhetsmetoder på grund av de kostnader som krävs för att ändra källkoden och konfigurera om utvecklingsinställningarna.

För att säkerställa att utvecklingsprocessen är säker skapas verktygs- och ramverksbibliotek för att spara inställningar för programhemligheter på ett säkert sätt med minimal eller ingen ändring av källkoden.

ASP.NET- och .NET Core-program

Spara hemlighetsinställningar i användarhemlighetsarkivet som ligger utanför källkontrollmappen

Om du gör en snabb prototyp eller om du inte har internetåtkomst börjar du med att flytta dina hemliga inställningar utanför källkontrollmappen till user secret store. Användarhemlighetsarkivet är en fil som sparats under användarprofileringsmappen, så hemligheter checkas inte in i källkontrollen. Följande diagram visar hur användarhemlighet fungerar.

Användarhemlighet håller hemliga inställningar utanför källkontrollen

Om du kör .NET Core-konsolprogrammet använder du Key Vault för att spara hemligheten på ett säkert sätt.

Spara inställningar för hemligheter i Azure Key Vault

Om du utvecklar ett projekt och behöver dela källkod på ett säkert sätt använder du Azure Key Vault.

  1. Skapa en Key Vault i din Azure-prenumeration. Fyll i alla obligatoriska fält i användargränssnittet och klicka på Skapa längst ned på bladet

    Skapa Azure Key Vault

  2. Ge dig och dina teammedlemmar åtkomst till Key Vault. Om du har ett stort team kan du skapa en Azure Active Directory-grupp och lägga till den säkerhetsgruppens åtkomst till Key Vault. I listrutan Hemliga behörigheter markerar du Hämta och lista under Hemlighetshanteringsåtgärder. Om du redan har skapat webbappen beviljar du webbappen åtkomst till Key Vault så att den kan komma åt nyckelvalvet utan att lagra den hemliga konfigurationen i Appinställningar eller filer. Sök efter din webbapp med dess namn och lägg till den på samma sätt som du ger användarna åtkomst.

    Lägg till Key Vault åtkomstprincip

  3. Lägg till din hemlighet i Key Vault på Azure Portal. För kapslade konfigurationsinställningar ersätter du ":" med "--" så att det Key Vault hemliga namnet är giltigt. ':' får inte finnas i namnet på en Key Vault hemlighet.

    Lägg till Key Vault hemlighet

    Anteckning

    Före Visual Studio 2017 V15.6 brukade vi rekommendera installation av Azure Services-autentiseringstillägget för Visual Studio. Men den är inaktuell nu eftersom funktionen är integrerad i Visual Studio . Om du har en äldre version av Visual Studio 2017 rekommenderar vi därför att du uppdaterar till minst VS 2017 15.6 eller senare så att du kan använda den här funktionen internt och komma åt Nyckelvalvet från att använda själva Visual Studio-inloggningsidentiteten.

  4. Lägg till följande NuGet-paket i projektet:

    Microsoft.Azure.KeyVault
    Microsoft.Azure.Services.AppAuthentication
    Microsoft.Extensions.Configuration.AzureKeyVault
    
  5. Lägg till följande kod i filen Program.cs:

    public static IHostBuilder CreateHostBuilder(string[] args) =>
             Host.CreateDefaultBuilder(args)
                .ConfigureAppConfiguration((ctx, builder) =>
                {
                    var keyVaultEndpoint = GetKeyVaultEndpoint();
                    if (!string.IsNullOrEmpty(keyVaultEndpoint))
                    {
                        var azureServiceTokenProvider = new AzureServiceTokenProvider();
                        var keyVaultClient = new KeyVaultClient(
                            new KeyVaultClient.AuthenticationCallback(
                                azureServiceTokenProvider.KeyVaultTokenCallback));
                        builder.AddAzureKeyVault(
                        keyVaultEndpoint, keyVaultClient, new DefaultKeyVaultSecretManager());
                    }
                })
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                });
    
        private static string GetKeyVaultEndpoint() => Environment.GetEnvironmentVariable("KEYVAULT_ENDPOINT");
    
  6. Lägg till din Key Vault-URL i filen launchsettings.json. Miljövariabelnamnet KEYVAULT_ENDPOINT definieras i koden som du lade till i steg 6.

    Lägga till Key Vault URL som en projektmiljövariabel

  7. Börja felsöka projektet. Den bör köras korrekt.

ASP.NET- och .NET-program

.NET 4.7.1 stöder Key Vault och hemliga konfigurationsbyggare, vilket säkerställer att hemligheter kan flyttas utanför källkontrollmappen utan kodändringar. Om du vill fortsätta laddar du ned .NET 4.7.1 och migrerar ditt program om det använder en äldre version av .NET Framework.

Spara hemliga inställningar i en hemlig fil som ligger utanför källkontrollmappen

Om du skriver en snabb prototyp och inte vill etablera Azure-resurser går du med det här alternativet.

  1. Högerklicka på projektet och välj Hantera användarhemligheter. Detta installerar nuGet-paketet Microsoft.Configuration.ConfigurationBuilders.UserSecrets , skapar en fil för att spara hemliga inställningar utanför web.config fil och lägger till avsnittet ConfigBuilders i filen web.config.

  2. Placera hemliga inställningar under rotelementet. nedan är ett exempel

    <?xml version="1.0" encoding="utf-8"?>
    <root>
      <secrets ver="1.0">
        <secret name="secret" value="foo"/>
        <secret name="secret1" value="foo_one" />
        <secret name="secret2" value="foo_two" />
      </secrets>
    </root>
    
  3. Ange att avsnittet appSettings använder den hemliga konfigurationsverktyget. Kontrollera att det finns en post för den hemliga inställningen med ett dummy-värde.

        <appSettings configBuilders="Secrets">
            <add key="webpages:Version" value="3.0.0.0" />
            <add key="webpages:Enabled" value="false" />
            <add key="ClientValidationEnabled" value="true" />
            <add key="UnobtrusiveJavaScriptEnabled" value="true" />
            <add key="secret" value="" />
        </appSettings>
    
  4. Felsöka din app. Den bör köras korrekt.

Spara inställningar för hemligheter i en Azure-Key Vault

Följ anvisningarna i ASP.NET core-avsnittet för att konfigurera en Key Vault för projektet.

  1. Installera följande NuGet-paket i projektet

    Microsoft.Configuration.ConfigurationBuilders.Azure
    
  2. Definiera Key Vault konfigurationsverktyget i Web.config. Placera det här avsnittet före appSettings-avsnittet. Ersätt vaultName som Key Vault namn om din Key Vault finns i globala Azure eller fullständig URI om du använder nationellt moln.

     <configBuilders>
        <builders>
            <add name="Secrets" userSecretsId="695823c3-6921-4458-b60b-2b82bbd39b8d" type="Microsoft.Configuration.ConfigurationBuilders.UserSecretsConfigBuilder, Microsoft.Configuration.ConfigurationBuilders.UserSecrets, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
            <add name="AzureKeyVault" vaultName="[VaultName]" type="Microsoft.Configuration.ConfigurationBuilders.AzureKeyVaultConfigBuilder, Microsoft.Configuration.ConfigurationBuilders.Azure, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
        </builders>
      </configBuilders>
    
  3. Ange att avsnittet appSettings använder Key Vault configuration builder. Kontrollera att det finns någon post för den hemliga inställningen med ett dummy-värde.

    <appSettings configBuilders="AzureKeyVault">
        <add key="webpages:Version" value="3.0.0.0" />
        <add key="webpages:Enabled" value="false" />
        <add key="ClientValidationEnabled" value="true" />
        <add key="UnobtrusiveJavaScriptEnabled" value="true" />
        <add key="secret" value="" />
    </appSettings>
    
  4. Börja felsöka projektet. Den bör köras korrekt.