Självstudie: Säkra Azure SQL Database-anslutningar från App Service med en hanterad identitet

Med App Service får du en automatiskt uppdaterad webbvärdtjänst i Azure med hög skalbarhet. Dessutom får du en hanterad identitet för din app. Det här är en användningsklar lösning som skyddar åtkomsten till Azure SQL Database och andra Azure-tjänster. Med hanterade identiteter i App Service blir dina appar säkrare eftersom du inte har några hemligheter i dina appar. Du har till exempel inga inloggningsuppgifter i anslutningssträngarna. I den här självstudien lägger du till en hanterad identitet i exempelwebbappen som du skapade i någon av följande självstudier:

När du är färdig ansluter exempelappen säkert till SQL Database utan att du behöver använda användarnamn och lösenord.

Arkitekturdiagram för självstudiescenario.

Anteckning

Stegen som tas upp i den här självstudien stöder följande versioner:

  • .NET Framework 4.7.2 och högre
  • .NET Core 2.2 och högre

Det här får du lära dig:

  • Aktivera hanterade identiteter
  • Ge SQL Database åtkomst till den hanterade identiteten
  • Konfigurera Entity Framework att använda Azure AD-autentisering med SQL Database
  • Anslut att SQL Database från Visual Studio azure AD-autentisering

Anteckning

Azure AD-autentisering skiljer sig från integrerad Windows-autentisering i lokal Active Directory (AD DS). AD DS och Azure AD använder helt olika autentiseringsprotokoll. Mer information finns i Azure AD Domain Services-dokumentationen.

Om du inte har en Azure-prenumerationkan du skapa ett kostnads fritt konto innan du börjar.

Förutsättningar

Den här artikeln fortsätter där du slutade i Självstudie: Skapa en ASP.NET-app i Azure med SQL Database eller Självstudie: Skapa en ASP.NET Core- och SQL Database-app i Azure App Service. Om du inte redan har gjort det följer du en av de två självstudierna först. Du kan också anpassa stegen för din egen .NET-app med hjälp av SQL Database.

Om du vill felsöka din app SQL Database som backend kontrollerar du att du har tillåtit klientanslutningen från datorn. Om inte lägger du till klientens IP-adress genom att följa stegen i Hantera IP-brandväggsreglerpå servernivå med hjälp av Azure Portal .

Förbered din miljö för Azure CLI.

  • Använd bash-miljön i Azure Cloud Shell.

    Starta Cloud Shell i ett nytt fönster

  • Om du vill kan du i stället installera Azure CLI för att köra CLI-referenskommandon.

    • Om du använder en lokal installation loggar du in på Azure CLI med hjälp av kommandot az login. Slutför autentiseringsprocessen genom att följa stegen som visas i terminalen. Fler inloggningsalternativ finns i Logga in med Azure CLI.

    • När du uppmanas till det installerar du Azure CLI-tillägg vid första användning. Mer information om tillägg finns i Använda tillägg med Azure CLI.

    • Kör az version om du vill hitta versionen och de beroende bibliotek som är installerade. Om du vill uppgradera till den senaste versionen kör du az upgrade.

Bevilja databasåtkomst till Azure AD-användare

Aktivera först Azure AD-SQL Database genom att tilldela en Azure AD-användare som Active Directory-administratör för servern. Den här användaren skiljer sig från Microsoft-konto du använde för att registrera dig för din Azure-prenumeration. Det måste vara en användare som du har skapat, importerat, synkroniserat eller bjudit in till Azure AD. Mer information om tillåtna Azure AD-användare finns i Azure AD-funktioner och begränsningar i SQL Database.

  1. Om din Azure AD-klientorganisation inte har någon användare än skapar du en genom att följa stegen i Lägga till eller ta bort användare med hjälp av Azure Active Directory.

  2. Hitta objekt-ID:t för Azure AD-användaren med hjälp az ad user list av och ersätt <user-principal-name> . Resultatet sparas i en variabel.

    azureaduser=$(az ad user list --filter "userPrincipalName eq '<user-principal-name>'" --query [].objectId --output tsv)
    

    Tips

    Om du vill se en lista över alla användarens huvudnamn i Azure AD kör du az ad user list --query [].userPrincipalName .

  3. Lägg till den här Azure AD-användaren som Active az sql server ad-admin create Directory-administratör med kommandot i Cloud Shell. I följande kommando ersätter du <server-name> med servernamnet (utan .database.windows.net suffixet ).

    az sql server ad-admin create --resource-group myResourceGroup --server-name <server-name> --display-name ADMIN --object-id $azureaduser
    

Mer information om hur du lägger till en Active Directory-administratör finns i Etablera Azure Active Directory administratör för din server

Konfigurera Visual Studio

  1. Visual Studio för Windows är integrerad med Azure AD-autentisering. Om du vill aktivera utveckling och felsökning i Visual Studio lägger du till Azure AD-användaren i Visual Studio genom att välja Filkonto Inställningar på menyn och klicka på Lägg till > ett konto.

  2. Om du vill ange Azure AD-användaren för Azure-tjänstautentisering väljer du Verktygsalternativ på menyn > och väljer sedan Kontoval för Azure-tjänstautentisering. > Välj den Azure AD-användare som du lade till och klicka på OK.

Nu är du redo att utveckla och felsöka din app med SQL Database server som server, med hjälp av Azure AD-autentisering.

Ändra ditt projekt

Vilka steg du följer för projektet beror på om det är ett ASP.NET projekt eller ett ASP.NET Core projekt.

  1. I Visual Studio öppnar du Package Manager-konsolen och lägger till NuGet-paketet Microsoft.Azure.Services.AppAuthentication:

    Install-Package Microsoft.Azure.Services.AppAuthentication -Version 1.4.0
    
  2. I Web.config, arbetar du överst i filen och gör följande ändringar:

    • I <configSections> lägger du till följande avsnittsdeklaration i den:

      <section name="SqlAuthenticationProviders" type="System.Data.SqlClient.SqlAuthenticationProviderConfigurationSection, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
      
    • under den avslutande </configSections> taggen lägger du till följande XML-kod för <SqlAuthenticationProviders> .

      <SqlAuthenticationProviders>
        <providers>
          <add name="Active Directory Interactive" type="Microsoft.Azure.Services.AppAuthentication.SqlAppAuthenticationProvider, Microsoft.Azure.Services.AppAuthentication" />
        </providers>
      </SqlAuthenticationProviders>
      
    • Leta upp anslutningssträngen MyDbConnection med namnet och ersätt dess värde med connectionString "server=tcp:<server-name>.database.windows.net;database=<db-name>;UID=AnyString;Authentication=Active Directory Interactive" . Ersätt <server-name> och <db-name> med servernamnet och databasnamnet.

    Anteckning

    Den SqlAuthenticationProvider som du precis registrerade baseras på appauthentication-biblioteket som du installerade tidigare. Som standard använder den en system tilldelad identitet. Om du vill använda en användar tilldelad identitet måste du ange ytterligare en konfiguration. Se stöd för anslutningssträngar för AppAuthentication-biblioteket.

    Det är allt du behöver för att ansluta till SQL Database. När du felsöker i Visual Studio koden den Azure AD-användare som du konfigureradei Konfigurera Visual Studio . Du kommer att konfigurera SQL Database senare för att tillåta anslutning från den hanterade identiteten för din App Service app.

  3. Skriv Ctrl+F5 för att köra appen igen. Samma CRUD-app i webbläsaren ansluter nu till Azure SQL Database direkt med hjälp av Azure AD-autentisering. Med den här konfigurationen kan du köra databasmigrering från Visual Studio.

Använda hanterad identitetsanslutning

Därefter konfigurerar du din App Service för att ansluta till SQL Database med en system tilldelad hanterad identitet.

Anteckning

Anvisningarna i det här avsnittet gäller för en system tilldelad identitet, men en användar tilldelad identitet kan lika enkelt användas. För att göra detta. behöver du ändra för att az webapp identity assign command tilldela önskad användar-tilldelad identitet. När du sedan skapar SQL bör du använda namnet på den användar tilldelade identitetsresursen i stället för platsnamnet.

Aktivera hanterad identitet i appen

När du ska aktivera en hanterad identitet för din Azure-app använder du kommandot az webapp identity assign i Cloud Shell. Ersätt i följande kommando <app-name> .

az webapp identity assign --resource-group myResourceGroup --name <app-name>

Anteckning

Om du vill aktivera hanterad identitet för ett distributionsfacklägger --slot <slot-name> du till och använder namnet på platsen i <slot-name> .

Här är ett exempel på utdata:

{
  "additionalProperties": {},
  "principalId": "21dfa71c-9e6f-4d17-9e90-1d28801c9735",
  "tenantId": "72f988bf-86f1-41af-91ab-2d7cd011db47",
  "type": "SystemAssigned"
}

Bevilja behörigheter till hanterad identitet

Anteckning

Om du vill kan du lägga till identiteten i en Azure AD-gruppoch sedan SQL Database åtkomst till Azure AD-gruppen i stället för identiteten. Följande kommandon lägger till exempel till den hanterade identiteten från föregående steg i en ny grupp med namnet myAzureSQLDBAccessGroup:

groupid=$(az ad group create --display-name myAzureSQLDBAccessGroup --mail-nickname myAzureSQLDBAccessGroup --query objectId --output tsv)
msiobjectid=$(az webapp identity show --resource-group myResourceGroup --name <app-name> --query principalId --output tsv)
az ad group member add --group $groupid --member-id $msiobjectid
az ad group member list -g $groupid
  1. Öppna Cloud Shell och logga in på SQL Database med kommandot SQLCMD. Ersätt <server-name> med ditt servernamn, <db-name> med databasnamnet som din app använder och <aad-user-name> och med din Azure <aad-password> AD-användares autentiseringsuppgifter.

    sqlcmd -S <server-name>.database.windows.net -d <db-name> -U <aad-user-name> -P "<aad-password>" -G -l 30
    
  2. I kommandotolken SQL den databas du vill använda kör du följande kommandon för att bevilja de behörigheter som din app behöver. Exempel:

    CREATE USER [<identity-name>] FROM EXTERNAL PROVIDER;
    ALTER ROLE db_datareader ADD MEMBER [<identity-name>];
    ALTER ROLE db_datawriter ADD MEMBER [<identity-name>];
    ALTER ROLE db_ddladmin ADD MEMBER [<identity-name>];
    GO
    

    <identity-name> är namnet på den hanterade identiteten i Azure AD. Om identiteten är system tilldelad är namnet alltid detsamma som namnet på din App Service appen. För ett distributionsfackär namnet på dess system tilldelade identitet <app-name> /slots/ <slot-name>. Om du vill bevilja behörigheter för en Azure AD-grupp använder du gruppens visningsnamn i stället (till exempel myAzureSQLDBAccessGroup).

  3. Skriv EXIT för att återgå till Cloud Shell-prompten.

    Anteckning

    Backend-tjänsterna för hanterade identiteter har också en tokencache som uppdaterar token för en målresurs endast när den upphör att gälla. Om du gör ett misstag när du konfigurerar dina SQL Database-behörigheter och försöker ändra behörigheterna när du har försökt hämta en token med din app får du inte en ny token med de uppdaterade behörigheterna förrän den cachelagrade token upphör att gälla.

    Anteckning

    Azure Active Directory och hanterade identiteter stöds inte för lokala SQL Server.

Ändra anslutningssträngen

Kom ihåg att samma ändringar som du gjorde i Web.config eller appsettings.json fungerar med den hanterade identiteten, så det enda du behöver göra är att ta bort den befintliga anslutningssträngen i App Service, som Visual Studio skapade när du distribuerade appen första gången. Använd följande kommando, men ersätt <app-name> med namnet på din app.

az webapp config connection-string delete --resource-group myResourceGroup --name <app-name> --setting-names MyDbConnection

Publicera dina ändringar

Nu behöver du bara publicera ändringarna till Azure.

  1. Om du kommer från Självstudie: Skapa en ASP.NET-app i Azure med SQL Database publicerar du ändringarna i Visual Studio. I Solution Explorer: Högerklicka på projektet DotNetAppSqlDb och välj Publicera.

    Publicera från Solution Explorer

  2. Klicka på Publicera på publiceringssidan.

    Viktigt

    Kontrollera att apptjänstnamnet inte matchar befintliga appregistreringar. Detta leder till konflikter mellan huvudnamns-ID:n.

När du ser din att göra-lista på den nya webbsidan ansluter din app till databasen med hjälp av den hanterade identiteten.

Azure-app efter Code First Migration

Du ska nu kunna redigera att göra-listan som innan.

Rensa resurser

I de föregående stegen skapade du Azure-resurser i en resursgrupp. Om du inte tror att du behöver dessa resurser i framtiden tar du bort resursgruppen genom att köra följande kommando i Cloud Shell:

az group delete --name myResourceGroup

Det kan några minuter att köra kommandot.

Nästa steg

Vad du lärt dig:

  • Aktivera hanterade identiteter
  • Ge SQL Database åtkomst till den hanterade identiteten
  • Konfigurera Entity Framework att använda Azure AD-autentisering med SQL Database
  • Anslut att SQL Database från Visual Studio azure AD-autentisering