Dela via


Självstudie: Ansluta 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 det lösenordslösa tillägget för Service Connector

Installera det senaste lösenordslösa tillägget för Service Connector för Azure CLI:

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

Kommentar

Kontrollera att tillägget "serviceconnector-passwordless" är "2.0.2" eller senare genom att köra az version. Du kan behöva uppgradera Azure CLI först för att uppgradera tilläggsversionen.

2. Skapa en lösenordslös anslutning

Skapa sedan en lösenordslös anslutning med Service Connector.

Dricks

Azure Portal kan hjälpa dig att skriva kommandona nedan. I Azure Portal går du till din Azure App Service-resurs, väljer Service Connector 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 service connector-kommandot 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 Appinstä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 Connector.

    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 Connector.

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 Inställningar för filkonto>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?

Ja. Mer information finns i:

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.

Anslutning 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

Jag har skapat min app med mallen Web App + Database och nu kan jag inte konfigurera en hanterad identitetsanslutning med kommandona för Service Connector.

Service Connector behöver nätverksåtkomst till databasen för att bevilja åtkomst för appidentiteten. När du skapar en säker app- och databasarkitektur i Azure Portal med mallen Webbapp + Databas låser arkitekturen nätverksåtkomsten till databasen och tillåter endast anslutningar inifrån det virtuella nätverket. Det gäller även för Azure Cloud Shell. Du kan dock distribuera Cloud Shell i det virtuella nätverket och sedan köra kommandot Service Connector i cloud shell.

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.