Delen via


Zelfstudie: Verbinding maken met 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.
  • Maak verbinding met uw database als de Microsoft Entra-gebruiker.
  • Configureer een door het systeem toegewezen of door de gebruiker toegewezen beheerde identiteit voor een App Service-app.
  • Ververleent databasetoegang tot de beheerde identiteit.
  • Maak verbinding met de Azure-database vanuit uw code (.NET Framework 4.8, .NET 6, Node.js, Python, Java) met behulp van een beheerde identiteit.
  • Maak verbinding met de Azure-database vanuit uw ontwikkelomgeving 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 extensie zonder wachtwoord voor de serviceconnector

Installeer de nieuwste serviceconnector-extensie zonder wachtwoord voor de Azure CLI:

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

Notitie

Controleer of de extensie 'serviceconnector-passwordless' versie '2.0.2' of hoger is door uit te voeren az version. Mogelijk moet u eerst azure CLI upgraden om de extensieversie te upgraden.

2. Een verbinding zonder wachtwoord maken

Maak vervolgens een verbinding zonder wachtwoord met serviceconnector.

Tip

De Azure-portal kan u helpen de onderstaande opdrachten op te stellen. Ga in Azure Portal naar uw Azure-app Service-resource, selecteer Serviceconnector 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 serviceconnectoropdracht 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 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();
    

    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 maken met een databaseservice via Service Connector 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 Bestandsaccountinstellingen> in het menu te selecteren 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?

Ja. Zie voor meer informatie:

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.

Voor het maken van verbinding met 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

Ik heb mijn app gemaakt met de web-app + databasesjabloon en nu kan ik geen beheerde identiteitverbinding configureren met de opdrachten van de Service Connector.

Service Connector heeft netwerktoegang tot de database nodig om toegang te verlenen voor de app-identiteit. Wanneer u een standaard-app- en databasearchitectuur maakt in Azure Portal met de sjabloon Web App + Database, vergrendelt de architectuur netwerktoegang tot de database en staat deze alleen verbindingen toe vanuit het virtuele netwerk. Dit geldt ook voor Azure Cloud Shell. U kunt Cloud Shell echter implementeren in het virtuele netwerk en vervolgens de opdracht Service Connector uitvoeren in die Cloud Shell.

Volgende stappen

Wat u hebt geleerd:

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