Självstudie: Anslut till Azure-databaser från App Service utan hemligheter med hjälp av en hanterad identitet

Med App Service får du en automatiskt uppdaterad webbvärdtjänst i Azure med hög skalbarhet. Den tillhandahåller också en hanterad identitet för din app, vilket är en nyckelfärdig lösning för att skydda åtkomsten till Azure-databaser, inklusive:

Kommentar

Den här självstudien innehåller inte vägledning för Azure Cosmos DB, som stöder Microsoft Entra-autentisering på olika sätt. Mer information finns i Azure Cosmos DB-dokumentationen, till exempel Använda systemtilldelade hanterade identiteter för att komma åt Azure Cosmos DB-data.

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. Den här självstudien visar hur du ansluter till ovan nämnda databaser från App Service med hjälp av hanterade identiteter.

Vad du kommer att lära dig:

  • Konfigurera en Microsoft Entra-användare som administratör för din Azure-databas.
  • Anslut till databasen som Microsoft Entra-användare.
  • Konfigurera en systemtilldelad eller användartilldelad hanterad identitet för en App Service-app.
  • Bevilja databasåtkomst till den hanterade identiteten.
  • Anslut till Azure-databasen från din kod (.NET Framework 4.8, .NET 6, Node.js, Python, Java) med hjälp av en hanterad identitet.
  • Anslut till Azure-databasen från utvecklingsmiljön med hjälp av Microsoft Entra-användaren.

Om du inte har en Azure-prenumeration skapar du ett kostnadsfritt Azure-konto innan du börjar.

Förutsättningar

  • Skapa en app i App Service baserat på .NET, Node.js, Python eller Java.
  • Skapa en databasserver med Azure SQL Database, Azure Database for MySQL eller Azure Database for PostgreSQL.
  • Du bör känna till standardanslutningsmönstret (med användarnamn och lösenord) och kunna ansluta från din App Service-app till valfri databas.

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

1. Installera tjänsttillägget Anslut eller lösenordslöst tillägg

Installera tillägget Service Anslut eller passwordless för Azure CLI:

az extension add --name serviceconnector-passwordless --upgrade

2. Skapa en lösenordslös anslutning

Skapa sedan en lösenordslös anslutning med Service Anslut or.

Dricks

Azure-portalen kan hjälpa dig att skriva kommandona nedan. I Azure-portalen går du till din Azure App Service-resurs, väljer Tjänst Anslut eller på den vänstra menyn och väljer Skapa. Fyll i formuläret med alla obligatoriska parametrar. Azure genererar automatiskt kommandot för att skapa anslutningar, som du kan kopiera för att använda i CLI eller köra i Azure Cloud Shell.

Följande Azure CLI-kommando använder en --client-type parameter.

  1. Du kan också köra az webapp connection create sql -h för att hämta klienttyper som stöds.

  2. Välj en klienttyp och kör motsvarande kommando. Ersätt platshållarna nedan med din egen information.

    az webapp connection create sql \
        --resource-group <group-name> \
        --name <server-name> \
        --target-resource-group <sql-group-name> \
        --server <sql-name> \
        --database <database-name> \
        --user-identity client-id=<client-id> subs-id=<subscription-id> \
        --client-type <client-type>
    

Det här Anslut eller-kommandot för tjänsten slutför följande uppgifter i bakgrunden:

  • Aktivera systemtilldelad hanterad identitet eller tilldela en användaridentitet för appen <server-name> som hanteras av Azure App Service.
  • Ange Microsoft Entra-administratören till den aktuella inloggade användaren.
  • Lägg till en databasanvändare för den systemtilldelade hanterade identiteten eller den användartilldelade hanterade identiteten. Bevilja alla behörigheter för databasen <database-name> till den här användaren. Användarnamnet finns i anslutningssträng i föregående kommandoutdata.
  • Ange konfigurationer med namnet AZURE_MYSQL_CONNECTIONSTRING, AZURE_POSTGRESQL_CONNECTIONSTRINGeller AZURE_SQL_CONNECTIONSTRING till Azure-resursen baserat på databastypen.
  • För App Service anges konfigurationerna på bladet App Inställningar.

Om du stöter på problem när du skapar en anslutning kan du läsa Felsökning för hjälp.

3. Ändra koden

  1. Installera beroenden.

    dotnet add package Microsoft.Data.SqlClient
    
  2. Hämta Azure SQL Database-anslutningssträng från miljövariabeln som lagts till av Service Anslut eller.

    using Microsoft.Data.SqlClient;
    
    // AZURE_SQL_CONNECTIONSTRING should be one of the following:
    // For system-assigned managed identity:"Server=tcp:<server-name>.database.windows.net;Database=<database-name>;Authentication=Active Directory Default;TrustServerCertificate=True"
    // For user-assigned managed identity: "Server=tcp:<server-name>.database.windows.net;Database=<database-name>;Authentication=Active Directory Default;User Id=<client-id-of-user-assigned-identity>;TrustServerCertificate=True"
    
    string connectionString = 
        Environment.GetEnvironmentVariable("AZURE_SQL_CONNECTIONSTRING")!;
    
    using var connection = new SqlConnection(connectionString);
    connection.Open();
    

    Mer information finns i Använda Active Directory-hanterad identitetsautentisering.

Mer information finns på startsidan för klientprogrammering till Microsoft SQL Server. Fler kodexempel finns i Skapa en lösenordslös anslutning till en databastjänst via Service Anslut or.

4. Konfigurera utvecklingsmiljön

Den här exempelkoden använder DefaultAzureCredential för att hämta en användbar token för din Azure-databas från Microsoft Entra-ID och lägger sedan till den i databasanslutningen. Även om du kan anpassa DefaultAzureCredentialär det redan mångsidigt som standard. Den hämtar en token från den inloggade Microsoft Entra-användaren eller från en hanterad identitet, beroende på om du kör den lokalt i utvecklingsmiljön eller i App Service.

Utan ytterligare ändringar är koden redo att köras i Azure. För att felsöka koden lokalt behöver dock utvecklingsmiljön en inloggad Microsoft Entra-användare. I det här steget konfigurerar du valfri miljö genom att logga in med din Microsoft Entra-användare.

  1. Visual Studio för Windows är integrerat med Microsoft Entra-autentisering. Om du vill aktivera utveckling och felsökning i Visual Studio lägger du till din Microsoft Entra-användare i Visual Studio genom att välja Filkonto>Inställningar på menyn och välja Logga in eller Lägg till.

  2. Om du vill ange Microsoft Entra-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 Microsoft Entra-användare som du lade till och välj OK.

Mer information om hur du konfigurerar utvecklingsmiljön för Microsoft Entra-autentisering finns i Azure Identity-klientbiblioteket för .NET.

Nu är du redo att utveckla och felsöka din app med SQL Database som serverdel med hjälp av Microsoft Entra-autentisering.

5. Testa och publicera

  1. Kör koden i utvecklingsmiljön. Koden använder den inloggade Microsoft Entra-användaren i din miljö för att ansluta till serverdelsdatabasen. Användaren kan komma åt databasen eftersom den är konfigurerad som Microsoft Entra-administratör för databasen.

  2. Publicera din kod till Azure med den föredragna publiceringsmetoden. I App Service använder koden appens hanterade identitet för att ansluta till serverdelsdatabasen.

Vanliga frågor och svar

Stöder hanterad identitet SQL Server?

Microsoft Entra-ID och hanterade identiteter stöds inte för lokal SQL Server.

Jag får felet Login failed for user '<token-identified principal>'.

Den hanterade identitet som du försöker begära en token för har inte behörighet att komma åt Azure-databasen.

Jag har gjort ändringar i App Service-autentiseringen eller den associerade appregistreringen. Varför får jag fortfarande den gamla token?

Serverdelstjä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 ändrar konfigurationen efter att ha försökt hämta en token med din app får du inte någon ny token med de uppdaterade behörigheterna förrän den cachelagrade token upphör att gälla. Det bästa sättet att kringgå detta är att testa dina ändringar med ett nytt InPrivate-fönster (Edge)/privat (Safari)/Incognito (Chrome). På så sätt kommer du säkert att börja från en ny autentiserad session.

Hur gör jag för att lägga till den hanterade identiteten i en Microsoft Entra-grupp?

Om du vill kan du lägga till identiteten i en Microsoft Entra-grupp och sedan bevilja åtkomst till Microsoft Entra-gruppen i stället för identiteten. Följande kommandon lägger till den hanterade identiteten från föregående steg till 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 <group-name> --name <app-name> --query principalId --output tsv)
az ad group member add --group $groupid --member-id $msiobjectid
az ad group member list -g $groupid

Information om hur du beviljar databasbehörigheter för en Microsoft Entra-grupp finns i dokumentationen för respektive databastyp.

Jag får felet SSL connection is required. Please specify SSL options and retry.

Anslut till Azure-databasen kräver ytterligare inställningar och ligger utanför omfånget för den här självstudien. Mer information finns i någon av följande länkar:

Konfigurera TLS-anslutning i Azure Database for PostgreSQL – KonfigureraSSL-anslutning i ditt program för säker anslutning till Azure Database for MySQL

Nästa steg

Vad du lärt dig:

  • Konfigurera en Microsoft Entra-användare som administratör för din Azure-databas.
  • Anslut till databasen som Microsoft Entra-användare.
  • Konfigurera en systemtilldelad eller användartilldelad hanterad identitet för en App Service-app.
  • Bevilja databasåtkomst till den hanterade identiteten.
  • Anslut till Azure-databasen från din kod (.NET Framework 4.8, .NET 6, Node.js, Python, Java) med hjälp av en hanterad identitet.
  • Anslut till Azure-databasen från utvecklingsmiljön med hjälp av Microsoft Entra-användaren.