Zelfstudie: Verbinding maken naar SQL Database vanuit .NET App Service zonder geheimen met behulp van een beheerde identiteit

App Servicex biedt een uiterst schaalbare webhostingservice met self-patchfunctie in Azure. De service bevat ook een beheerde identiteit voor uw app. Dit is een gebruiksklare oplossing voor het beveiligen van toegang tot Azure SQL Database en andere Azure-services. Beheerde identiteiten in App Service maken uw app veiliger doordat geheimen in uw app, zoals referenties in de verbindingsreeksen, worden verwijderd. In deze zelfstudie voegt u een beheerde identiteit toe aan de voorbeeldweb-app die u in een van de volgende zelfstudies hebt gemaakt:

Wanneer u klaar bent, maakt uw voorbeeld-app veilig verbinding met SQL Database zonder dat een gebruikersnaam en wachtwoorden zijn vereist.

Architectuurdiagram voor het zelfstudiescenario.

Notitie

De stappen in deze zelfstudie ondersteunen de volgende versies:

  • .NET Framework 4.8 en hoger
  • .NET 6.0 en hoger

Zie voor richtlijnen voor Azure Database for MySQL of Azure Database for PostgreSQL in andere taalframeworks (Node.js, Python en Java) zelfstudie: Verbinding maken naar Azure-databases vanuit App Service zonder geheimen met behulp van een beheerde identiteit.

U leert het volgende:

  • Beheerde identiteiten inschakelen
  • SQL Database toegang verlenen tot de beheerde identiteit
  • Entity Framework configureren voor het gebruik van Microsoft Entra-verificatie met SQL Database
  • Verbinding maken naar SQL Database vanuit Visual Studio met behulp van Microsoft Entra-verificatie

Notitie

Microsoft Entra-verificatie verschilt van Geïntegreerde Windows-verificatie in on-premises Active Directory (AD DS). AD DS en Microsoft Entra ID maken gebruik van volledig verschillende verificatieprotocollen. Zie de documentatie van Microsoft Entra Domain Services voor meer informatie.

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

Vereisten

In dit artikel wordt verdergegaan waar u was gebleven in een van de volgende zelfstudies:

Als u dat nog niet hebt gedaan, volgt u eerst een van de twee zelfstudies. U kunt ook de stappen aanpassen voor uw eigen .NET-app met SQL Database.

Als u fouten wilt opsporen in uw app met SQL Database als de back-end, zorgt u ervoor dat de clientverbinding vanuit uw computer is toegestaan. Als dat niet het geval is, voegt u het IP-adres van de client toe door de stappen te volgen op IP-firewallregels op serverniveau beheren met de Azure-portal.

Bereid uw omgeving voor op Azure CLI.

1. Databasetoegang verlenen aan Microsoft Entra-gebruiker

Schakel eerst Microsoft Entra-verificatie in voor SQL Database door een Microsoft Entra-gebruiker toe te wijzen als beheerder van de server. Deze gebruiker wijkt af van de Microsoft-account die u hebt gebruikt om u aan te melden voor uw Azure-abonnement. Het moet een gebruiker zijn die u hebt gemaakt, geïmporteerd, gesynchroniseerd of uitgenodigd in Microsoft Entra-id. Zie Microsoft Entra-functies en -beperkingen in SQL Database voor meer informatie over toegestane Microsoft Entra-gebruikers.

  1. Als uw Microsoft Entra-tenant nog geen gebruiker heeft, maakt u er een door de stappen te volgen bij Gebruikers toevoegen of verwijderen met behulp van Microsoft Entra-id.

  2. Zoek de object-id van de Microsoft Entra-gebruiker met behulp van de az ad user list user-principal-name> en vervang <deze. Het resultaat wordt opgeslagen in een variabele.

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

    Tip

    Als u de lijst met alle user principal names in Microsoft Entra ID wilt zien, voert u het volgende uit az ad user list --query '[].userPrincipalName'.

  3. Voeg deze Microsoft Entra-gebruiker toe als Active Directory-beheerder met behulp van az sql server ad-admin create de opdracht in Cloud Shell. Vervang <in de volgende opdracht de servernaam> door de servernaam (zonder het .database.windows.net achtervoegsel).

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

Zie Een Microsoft Entra-beheerder inrichten voor uw server voor meer informatie over het toevoegen van een Active Directory-beheerder

2. Uw ontwikkelomgeving instellen

  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.

3. Uw project wijzigen

Notitie

Microsoft.Azure.Services.AppAuthentication wordt niet meer aanbevolen voor gebruik met de nieuwe Azure SDK. Deze wordt vervangen door een nieuwe Azure Identity-clientbibliotheek die beschikbaar is voor .NET, Java, TypeScript en Python en moet worden gebruikt voor alle nieuwe ontwikkeling. Hier vindt u informatie over het migreren naarAzure Identity: AppAuthentication naar Azure.Identity Migration Guidance.

De stappen die u voor uw project volgt, zijn afhankelijk van of u Entity Framework Core (standaard voor ASP.NET Core) of Entity Framework (standaard voor ASP.NET) gebruikt.

  1. Open in Visual Studio de Pakketbeheer Console en voeg het NuGet-pakket Microsoft.Data.SqlClient toe:

    Install-Package Microsoft.Data.SqlClient -Version 5.1.0
    
  2. In de zelfstudie ASP.NET Core en SQL Database wordt de MyDbConnection verbindingsreeks in appsettings.json nog niet gebruikt. De lokale omgeving en de Azure-omgeving krijgen beide verbindingsreeks s van hun respectieve omgevingsvariabelen om verbindingsgeheimen uit het bronbestand te houden. Maar nu met Active Directory-verificatie zijn er geen geheimen meer. Vervang in appsettings.json de waarde van de MyDbConnection verbindingsreeks door:

    "Server=tcp:<server-name>.database.windows.net;Authentication=Active Directory Default; Database=<database-name>;"
    

    Notitie

    Het standaardverificatietype van Active Directory kan zowel op uw lokale computer als in Azure-app Service worden gebruikt. Het stuurprogramma probeert een token te verkrijgen van Microsoft Entra ID met behulp van verschillende middelen. Als de app is geïmplementeerd, krijgt deze een token van de door het systeem toegewezen beheerde identiteit van de app. Het kan ook worden geverifieerd met een door de gebruiker toegewezen beheerde identiteit als u het volgende User Id=<client-id-of-user-assigned-managed-identity>; in uw verbindingsreeks opneemt. Als de app lokaal wordt uitgevoerd, wordt geprobeerd een token op te halen uit Visual Studio, Visual Studio Code en Azure CLI.

    Dat is alles wat u nodig hebt om verbinding te maken met SQL Database. Wanneer u fouten opssport in Visual Studio, gebruikt uw code de Microsoft Entra-gebruiker die u in 2 hebt geconfigureerd. Uw ontwikkelomgeving instellen. U stelt SQL Database later in om verbinding te maken vanuit de beheerde identiteit van uw App Service-app. De DefaultAzureCredential klasse slaat het token in het geheugen op en haalt het op bij Microsoft Entra-id vlak voordat het verloopt. U hebt geen aangepaste code nodig om het token te vernieuwen.

  3. Typ Ctrl+F5 om de app opnieuw uit te voeren. Dezelfde CRUD-app in uw browser maakt nu rechtstreeks verbinding met de Azure SQL Database met behulp van Microsoft Entra-verificatie. Met deze installatie kunt u databasemigraties uitvoeren vanuit Visual Studio.

4. Beheerde identiteitconnectiviteit gebruiken

Vervolgens configureert u uw App Service-app om verbinding te maken met SQL Database met een door het systeem toegewezen beheerde identiteit.

Notitie

Hoewel de instructies in deze sectie betrekking hebben op een door het systeem toegewezen identiteit, kan een door de gebruiker toegewezen identiteit net zo eenvoudig worden gebruikt. Om dit te doen. u moet de az webapp identity assign command wijzigen om de gewenste door de gebruiker toegewezen identiteit toe te wijzen. Wanneer u de SQL-gebruiker maakt, moet u ervoor zorgen dat u de naam van de door de gebruiker toegewezen identiteitsresource gebruikt in plaats van de naam van de site.

Een beheerde identiteit inschakelen voor een app

Als u een beheerde identiteit voor uw Azure-app wilt inschakelen, gebruikt u de opdracht az webapp identity assign in de Cloud Shell. Vervang in de volgende opdracht de app-naam>.<

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

Hier is een voorbeeld van de uitvoer:

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

Machtigingen toewijzen aan beheerde identiteit

Notitie

Als u wilt, kunt u de identiteit toevoegen aan een Microsoft Entra-groep en vervolgens SQL Database 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 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. Meld u in de Cloud Shell aan bij SQL Database met behulp van de SQLCMD-opdracht. Vervang de servernaam door uw servernaam>, <db-naam> door de databasenaam die uw app gebruikt, en <aad-gebruikersnaam> en <aad-wachtwoord> door de referenties van uw Microsoft Entra-gebruiker.<

    sqlcmd -S <server-name>.database.windows.net -d <db-name> -U <aad-user-name> -P "<aad-password>" -G -l 30
    
  2. Voer in de SQL-prompt voor de gewenste database de volgende opdrachten uit om de minimale machtigingen te verlenen die uw app nodig heeft. Voorbeeld:

    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> is de naam van de beheerde identiteit in Microsoft Entra ID. Als de identiteit is toegewezen aan het systeem, is de naam altijd gelijk aan de naam van uw App Service-app. Voor een implementatiesite is <de naam van de door het systeem toegewezen identiteit app-name>/slots/<slot-name>. Als u machtigingen wilt verlenen voor een Microsoft Entra-groep, gebruikt u in plaats daarvan de weergavenaam van de groep (bijvoorbeeld myAzureSQLDBAccessGroup).

  3. Typ EXIT om terug te keren naar de Cloud Shell-prompt.

    Notitie

    De back-end-services van beheerde identiteiten onderhoudt ook een tokencache die het token voor een doelresource alleen bijwerkt wanneer het verloopt. Als u een fout maakt bij het configureren van uw SQL Database-machtigingen en de machtigingen probeert te wijzigen nadat u heeft geprobeerd om een token op te halen met uw app, krijgt u geen nieuw token met de bijgewerkte machtigingen totdat het token in de cache verloopt.

    Notitie

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

De verbindingsreeks wijzigen

Houd er rekening mee dat dezelfde wijzigingen die u hebt aangebracht in web.config of appsettings.json werken met de beheerde identiteit, dus het enige wat u moet doen, is het verwijderen van de bestaande verbindingsreeks in App Service, die Visual Studio de eerste keer heeft gemaakt bij het implementeren van uw app. Gebruik de volgende opdracht, maar vervang <de app-naam> door de naam van uw app.

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

5. Uw wijzigingen publiceren

U hoeft nu alleen nog maar uw wijzigingen naar Azure te publiceren.

  1. Als u afkomstig bent uit zelfstudie: bouw een ASP.NET-app in Azure met SQL Database, publiceer dan uw wijzigingen in Visual Studio. Klik in de Solution Explorer met de rechtermuisknop op uw project DotNetAppSqlDb en selecteer Publiceren.

    Publiceren vanuit Solution Explorer

  2. Selecteer Publiceren op de publicatiepagina.

    Belangrijk

    Zorg ervoor dat de naam van uw app-service niet overeenkomt met bestaande app-registraties. Dit leidt tot principal-id-conflicten.

Wanneer de nieuwe webpagina uw takenlijst weergeeft, maakt uw app verbinding met de database met behulp van de beheerde identiteit.

Azure-app na Code First Migration

U zou nu de takenlijst moeten kunnen bewerken als voorheen.

Resources opschonen

In de voorgaande stappen hebt u Azure-resources in een resourcegroep gemaakt. Als u deze resources niet meer nodig denkt te hebben, verwijdert u de resourcegroep door de volgende opdracht in Cloud Shell uit te voeren:

az group delete --name myResourceGroup

Het kan een minuut duren voordat deze opdracht is uitgevoerd.

Volgende stappen

Wat u hebt geleerd:

  • Beheerde identiteiten inschakelen
  • SQL Database toegang verlenen tot de beheerde identiteit
  • Entity Framework configureren voor het gebruik van Microsoft Entra-verificatie met SQL Database
  • Verbinding maken naar SQL Database vanuit Visual Studio met behulp van Microsoft Entra-verificatie