Zelfstudie: Verbinding maken naar Azure-databases vanuit App Service zonder geheimen met behulp van een beheerde identiteit

App Servicex biedt een uiterst schaalbare webhostingservice met self-patchfunctie in Azure. Het biedt ook een beheerde identiteit voor uw app, een kant-en-klare oplossing voor het beveiligen van toegang tot Azure-databases, waaronder:

Notitie

Deze zelfstudie bevat geen richtlijnen voor Azure Cosmos DB, die Microsoft Entra-verificatie op een andere manier ondersteunt. Zie de Documentatie van Azure Cosmos DB voor meer informatie, zoals door het systeem toegewezen beheerde identiteiten gebruiken voor toegang tot Azure Cosmos DB-gegevens.

Beheerde identiteiten in App Service maken uw app veiliger doordat geheimen in uw app, zoals referenties in de verbindingsreeksen, worden verwijderd. In deze zelfstudie leert u hoe u verbinding maakt met de hierboven genoemde databases vanuit App Service met behulp van beheerde identiteiten.

U leert het volgende:

  • Configureer een Microsoft Entra-gebruiker als beheerder voor uw Azure-database.
  • Verbinding maken als Microsoft Entra-gebruiker naar uw database.
  • Configureer een door het systeem toegewezen of door de gebruiker toegewezen beheerde identiteit voor een App Service-app.
  • Ververleent databasetoegang tot de beheerde identiteit.
  • Verbinding maken vanuit uw code (.NET Framework 4.8, .NET 6, Node.js, Python, Java) naar de Azure-database met behulp van een beheerde identiteit.
  • Verbinding maken vanuit uw ontwikkelomgeving naar de Azure-database met behulp van de Microsoft Entra-gebruiker.

Als u geen Azure-abonnement hebt, kunt u een gratis Azure-account maken voordat u begint.

Vereisten

  • Maak een app in App Service op basis van .NET, Node.js, Python of Java.
  • Maak een databaseserver met Azure SQL Database, Azure Database for MySQL of Azure Database for PostgreSQL.
  • U moet bekend zijn met het standaardverbindingspatroon (met gebruikersnaam en wachtwoord) en verbinding kunnen maken vanuit uw App Service-app naar uw gewenste database.

Bereid uw omgeving voor op Azure CLI.

1. Installeer de service-Verbinding maken of extensie zonder wachtwoord

Installeer de service-Verbinding maken of extensie zonder wachtwoord voor de Azure CLI:

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

2. Een verbinding zonder wachtwoord maken

Maak vervolgens een verbinding zonder wachtwoord met Service Verbinding maken or.

Tip

De Azure-portal kan u helpen de onderstaande opdrachten op te stellen. Ga in Azure Portal naar uw Azure-app Service-resource, selecteer Service Verbinding maken or in het linkermenu en selecteer Maken. Vul het formulier in met alle vereiste parameters. Azure genereert automatisch de opdracht voor het maken van verbindingen, die u kunt kopiëren om in de CLI te gebruiken of uit te voeren in Azure Cloud Shell.

De volgende Azure CLI-opdracht maakt gebruik van een --client-type parameter.

  1. U kunt desgewenst de az webapp connection create sql -h ondersteunde clienttypen ophalen.

  2. Kies een clienttype en voer de bijbehorende opdracht uit. Vervang de onderstaande tijdelijke aanduidingen door uw eigen gegevens.

    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>
    

Met deze service Verbinding maken oropdracht worden de volgende taken op de achtergrond uitgevoerd:

  • Schakel door het systeem toegewezen beheerde identiteit in of wijs een gebruikersidentiteit toe voor de app <server-name> die wordt gehost door Azure-app Service.
  • Stel de Microsoft Entra-beheerder in op de huidige aangemelde gebruiker.
  • Voeg een databasegebruiker toe voor de door het systeem toegewezen beheerde identiteit of door de gebruiker toegewezen beheerde identiteit. Verdeel alle bevoegdheden van de database <database-name> aan deze gebruiker. De gebruikersnaam vindt u in de verbindingsreeks in de voorgaande opdrachtuitvoer.
  • Stel configuraties met de naam AZURE_MYSQL_CONNECTIONSTRING, AZURE_POSTGRESQL_CONNECTIONSTRINGof AZURE_SQL_CONNECTIONSTRING op de Azure-resource in op basis van het databasetype.
  • Voor App Service worden de configuraties ingesteld op de blade App Instellingen.

Als u een probleem ondervindt bij het maken van een verbinding, raadpleegt u Probleemoplossing voor hulp.

3. Uw code wijzigen

  1. Installeer afhankelijkheden.

    dotnet add package Microsoft.Data.SqlClient
    
  2. Haal de Azure SQL Database-verbindingsreeks op uit de omgevingsvariabele die is toegevoegd door Service Verbinding maken or.

    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();
    

    Zie Active Directory Managed Identity-verificatie gebruiken voor meer informatie.

Zie Startpagina voor clientprogrammering naar Microsoft SQL Server voor meer informatie. Zie Een wachtwoordloze verbinding met een databaseservice maken via Service Verbinding maken or voor meer codevoorbeelden.

4. Uw ontwikkelomgeving instellen

Deze voorbeeldcode maakt gebruik DefaultAzureCredential van een bruikbaar token voor uw Azure-database van Microsoft Entra ID en voegt deze vervolgens toe aan de databaseverbinding. Hoewel u kunt aanpassen DefaultAzureCredential, is deze standaard al veelzijdig. Er wordt een token opgehaald van de aangemelde Microsoft Entra-gebruiker of van een beheerde identiteit, afhankelijk van of u het lokaal uitvoert in uw ontwikkelomgeving of in App Service.

Zonder verdere wijzigingen kunt u uw code uitvoeren in Azure. Om lokaal fouten in uw code op te sporen, heeft uw ontwikkelomgeving echter een aangemelde Microsoft Entra-gebruiker nodig. In deze stap configureert u uw gewenste omgeving door u aan te melden met uw Microsoft Entra-gebruiker.

  1. Visual Studio voor Windows is geïntegreerd met Microsoft Entra-verificatie. Als u ontwikkeling en foutopsporing in Visual Studio wilt inschakelen, voegt u uw Microsoft Entra-gebruiker toe in Visual Studio door bestandsaccount Instellingen te selecteren in het menu en aanmelden of toevoegen te selecteren.>

  2. Als u de Microsoft Entra-gebruiker voor Azure-serviceverificatie wilt instellen, selecteert u Extra>opties in het menu en selecteert u vervolgens Azure Service Authentication>Account Selection. Selecteer de Microsoft Entra-gebruiker die u hebt toegevoegd en selecteer OK.

Zie de Azure Identity-clientbibliotheek voor .NET voor meer informatie over het instellen van uw ontwikkelomgeving voor Microsoft Entra-verificatie.

U bent nu klaar om uw app te ontwikkelen en fouten op te sporen met de SQL Database als back-end, met behulp van Microsoft Entra-verificatie.

5. Testen en publiceren

  1. Voer uw code uit in uw ontwikkelomgeving. Uw code maakt gebruik van de aangemelde Microsoft Entra-gebruiker in uw omgeving om verbinding te maken met de back-enddatabase. De gebruiker heeft toegang tot de database omdat deze is geconfigureerd als Microsoft Entra-beheerder voor de database.

  2. Publiceer uw code naar Azure met behulp van de voorkeurspublicatiemethode. In App Service gebruikt uw code de beheerde identiteit van de app om verbinding te maken met de back-enddatabase.

Veelgestelde vragen

Biedt beheerde identiteit ondersteuning voor SQL Server?

Microsoft Entra ID en beheerde identiteiten worden niet ondersteund voor on-premises SQL Server.

Ik krijg de foutmelding Login failed for user '<token-identified principal>'.

De beheerde identiteit waarvoor u een token wilt aanvragen, is niet gemachtigd voor toegang tot de Azure-database.

Ik heb wijzigingen aangebracht in App Service-verificatie of de bijbehorende app-registratie. Waarom krijg ik nog steeds het oude token?

De back-endservices van beheerde identiteiten onderhouden ook een tokencache waarmee het token voor een doelresource alleen wordt bijgewerkt wanneer het verloopt. Als u de configuratie wijzigt nadat u een token met uw app probeert op te halen, krijgt u pas daadwerkelijk een nieuw token met de bijgewerkte machtigingen als het token in de cache verloopt. De beste manier om dit te omzeilen is door uw wijzigingen te testen met een nieuw InPrivate-venster (Edge)/privévenster (Safari)/Incognito (Chrome). Op die manier begint u zeker vanaf een nieuwe geverifieerde sessie.

Hoe kan ik de beheerde identiteit toevoegen aan een Microsoft Entra-groep?

Als u wilt, kunt u de identiteit toevoegen aan een Microsoft Entra-groep en vervolgens toegang verlenen tot de Microsoft Entra-groep in plaats van de identiteit. Bijvoorbeeld, met de volgende opdrachten wordt de beheerde identiteit uit de vorige stap toegevoegd aan een nieuwe groep met de naam 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

Als u databasemachtigingen wilt verlenen voor een Microsoft Entra-groep, raadpleegt u de documentatie voor het respectieve databasetype.

Ik krijg de foutmelding SSL connection is required. Please specify SSL options and retry.

Verbinding maken voor de Azure-database zijn aanvullende instellingen vereist en valt buiten het bereik van deze zelfstudie. Zie een van de volgende koppelingen voor meer informatie:

TLS-connectiviteit configureren in Azure Database for PostgreSQL - Enkele serverSSL-connectiviteit configureren in uw toepassing om veilig verbinding te maken met Azure Database for MySQL

Volgende stappen

Wat u hebt geleerd:

  • Configureer een Microsoft Entra-gebruiker als beheerder voor uw Azure-database.
  • Verbinding maken als Microsoft Entra-gebruiker naar uw database.
  • Configureer een door het systeem toegewezen of door de gebruiker toegewezen beheerde identiteit voor een App Service-app.
  • Ververleent databasetoegang tot de beheerde identiteit.
  • Verbinding maken vanuit uw code (.NET Framework 4.8, .NET 6, Node.js, Python, Java) naar de Azure-database met behulp van een beheerde identiteit.
  • Verbinding maken vanuit uw ontwikkelomgeving naar de Azure-database met behulp van de Microsoft Entra-gebruiker.