Delen via


Zelfstudie: Beheerde identiteit gebruiken om een Azure-web-app te verbinden met een Azure SQL-database zonder geheimen

Azure App Service biedt een uiterst schaalbare webhostingservice met self-patchfunctie in Azure. App Service biedt ook een beheerde identiteit voor uw app, een kant-en-klare oplossing voor het beveiligen van toegang tot Azure SQL en andere Azure-services. Beheerde identiteiten in App Service maken uw app veiliger door geheimen, zoals referenties in verbindingsreeksen, te elimineren.

In deze zelfstudie leert u hoe u een beheerde identiteit toevoegt aan een .NET-voorbeeld-app met een Azure SQL-back-end. Nadat u klaar bent, kan uw app veilig verbinding maken met de Azure SQL-database zonder dat u een gebruikersnaam en wachtwoord nodig hebt.

Architectuurdiagram voor het zelfstudiescenario.

In deze handleiding leert u:

  • Beheerde identiteiten inschakelen.
  • Ververleent Azure SQL Database toegang tot de beheerde identiteit.
  • Configureer Entity Framework voor het gebruik van Microsoft Entra-verificatie met SQL Database.
  • Maak verbinding met SQL Database vanuit Visual Studio met behulp van Microsoft Entra-verificatie.

Zie zelfstudie: Verbinding maken met Azure-databases vanuit App Service zonder geheimen met behulp van een beheerde identiteit voor hulp bij het gebruik van Azure Database for MySQL of Azure Database for PostgreSQL in Node.js, Python en Java-frameworks.

Notitie

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

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

Vereisten

Toegang tot databasebeheer verlenen aan een Microsoft Entra-gebruiker

Schakel Microsoft Entra-verificatie in voor de Azure SQL-database door een Microsoft Entra-gebruiker toe te wijzen als beheerder van de Azure SQL-server. De Microsoft Entra-beheerder moet een gebruiker zijn die is gemaakt, geïmporteerd, gesynchroniseerd of uitgenodigd in Microsoft Entra-id. Deze gebruiker is mogelijk niet hetzelfde als de Microsoft-accountgebruiker voor uw Azure-abonnement.

Voer de volgende opdrachten uit in de Bash-omgeving van Azure Cloud Shell of nadat u zich lokaal hebt aangemeld bij Azure CLI.

  1. Gebruik az ad user list met de parameter display-name, filter of upn om de object-id op te halen voor de Microsoft Entra ID-gebruiker die u tot beheerder wilt maken. Voer az ad user list zelfstandig uit om informatie voor alle gebruikers in de Microsoft Entra-directory weer te geven.

    De volgende opdracht bevat bijvoorbeeld informatie voor een Microsoft Entra ID-gebruiker met de display-name achternaam voornaam.

    az ad user list --display-name "Firstname Lastname"
    

    Dit is een voorbeeld van output:

     "businessPhones": [],
     "displayName": "Firstname Lastname",
     "givenName": null,
     "id": "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb",
     "jobTitle": null,
     "mail": "firstname@contoso.com",
     "mobilePhone": null,
     "officeLocation": null,
     "preferredLanguage": null,
     "surname": null,
     "userPrincipalName": "firstname@contoso.com"
    
  2. Voeg de Microsoft Entra ID-gebruiker toe als beheerder op de Azure SQL-server met behulp van az sql server ad-admin create de object-id parameter. Vervang in de volgende opdracht <server-name> door je servernaam min het achtervoegsel .database.windows.net, en <entra-id> door de waarde id uit de uitvoer van de voorgaande az ad user list opdracht.

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

Beheerde identiteitconnectiviteit instellen voor de app

Met de volgende stappen configureert u uw app om verbinding te maken met Azure SQL Database met behulp van een door het systeem toegewezen beheerde identiteit. Als u een door de gebruiker toegewezen identiteit wilt gebruiken, raadpleegt u zelfstudie: Verbinding maken met Azure-databases vanuit App Service zonder geheimen met behulp van een beheerde identiteit.

Beheerde identiteit inschakelen voor de app

Als u een beheerde identiteit voor uw Azure-app wilt inschakelen, gebruikt u de opdracht az webapp identity assign , waarbij u <app-name> de naam van uw app vervangt. De naam van een door het systeem toegewezen identiteit is altijd hetzelfde als de app-naam.

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

Hier is een voorbeeld van de uitvoer:

{
  "additionalProperties": {},
  "principalId": "aaaaaaaa-bbbb-cccc-1111-222222222222",
  "tenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
  "type": "SystemAssigned"
}

Als u een beheerde identiteit voor een deploymentslot wilt inschakelen, voegt u --slot <slot-name> toe aan de voorgaande opdracht en gebruikt u de naam van het slot in <slot-name>. De naam van een door het systeem toegewezen identiteit voor een implementatiesleuf is <app-name>/slots/<slot-name>.

U kunt de identiteit ook toevoegen aan een Microsoft Entra-groep en vervolgens SQL Database toegang verlenen tot de Microsoft Entra-groep in plaats van aan de identiteit. Als u machtigingen wilt verlenen voor een Microsoft Entra-groep, gebruikt u de weergavenaam van de groep. Met de volgende opdrachten voegt u de beheerde voorbeeldidentiteit toe 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

Machtigingen verlenen aan de beheerde identiteit

Verleen aan de identiteit de minimale machtigingen die uw app nodig heeft.

  1. Open een PowerShell-opdrachtregel en meld u aan bij SQL Database met behulp van de volgende SQLCMD-opdracht. Vervang <server-name> door de servernaam, <db-name> door de databasenaam en <admin-user> door de gebruiker met beheerdersrechten userPrincipalName uit de uitvoer van de voorgaande az ad user list opdracht.

    sqlcmd -S <servername>.database.windows.net -d <db-name> -U <admin-user> -G -l 30
    

    Volg de aanwijzingen om u aan te melden.

  2. Voer bij de SQL-prompt de volgende opdrachten uit om de app de minimale machtigingen te verlenen die nodig zijn voor de database. Vervang door <identity-name> de naam van de beheerde identiteit in Microsoft Entra ID, die gelijk is aan de naam van de app.

    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
    

Notitie

De services voor beheerde identiteiten van de back-end onderhouden een tokencache waarmee het token voor een doelresource alleen wordt bijgewerkt wanneer het verloopt. Als u uw SQL Database-machtigingen probeert te wijzigen nadat u eerst een token met uw app hebt opgehaald, krijgt u geen nieuw token met bijgewerkte machtigingen totdat het token in de cache verloopt.

De oorspronkelijke verbindingsreeks verwijderen

Wijzigingen die u hebt aangebracht in web.config of appsettings.json werken met de beheerde identiteit. U kunt de oorspronkelijke verbindingsreeks verwijderen die u hebt gebruikt toen u uw app de eerste keer hebt geïmplementeerd. Als u de verbindingsreeks wilt verwijderen, voert u de volgende Azure CLI-opdracht uit, waarbij u <app-name> de naam van uw app vervangt door <connection-string-name> de naam van de verbindingsreeks.

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

Uw ontwikkelomgeving instellen

Stel uw gekozen ontwikkelomgeving in en meld u aan bij Azure. Zie de Azure Identity-clientbibliotheek voor .NET voor meer informatie over het instellen van uw ontwikkelomgeving voor Microsoft Entra-verificatie.

Visual Studio voor Windows is geïntegreerd met Microsoft Entra-verificatie.

  1. Als u ontwikkeling en foutopsporing in Visual Studio wilt inschakelen, voegt u uw Microsoft Entra-gebruiker toe in Visual Studio doorBestandsaccountinstellingen> te selecteren in het bovenste menu en vervolgens Aanmelden of Toevoegen te selecteren.
  2. Als u de Microsoft Entra-gebruiker voor Azure-serviceverificatie wilt instellen, selecteert uExtra-opties> in het bovenste menu en selecteert u vervolgens Azure Service Authentication>Account Selection. Selecteer de Microsoft Entra-gebruiker die u hebt toegevoegd en selecteer OK.

Uw project wijzigen en uw app publiceren

Uw web-app met azure SQL-database maakt gebruik van een databasecontext om verbinding te maken met de database. Als u Microsoft Entra-verificatie wilt gebruiken om met de app te werken, moet u de databasecontext bijwerken om te verwijzen naar de Entity Framework SQL Server-provider, die afhankelijk is van de moderne Microsoft.Data.SqlClient-ADO.NET-provider .

De Entity Framework-provider vervangt de ingebouwde System.Data.SqlClient SQL Server-provider en bevat ondersteuning voor Verificatiemethoden van Microsoft Entra ID. Zie Microsoft.EntityFramework.SqlServer voor meer informatie.

[DbConfigurationType(typeof(MicrosoftSqlDbConfiguration))] werkt lokaal om Microsoft.Data.SqlClient te gebruiken voor de databasecontext, maar omdat System.Data.SqlClient hardcoded is als de provider in Azure App Service, moet u MicrosoftSqlDbConfiguration uitbreiden om verwijzingen van System.Data.SqlClient naar Microsoft.Data.SqlClient om te leiden. De stappen verschillen, afhankelijk van of u een ASP.NET- of ASP.NET Core-app hebt.

Een ASP.NET Core-app maakt standaard gebruik van Entity Framework Core .

  1. Voeg in de Visual Studio Package Manager-console het NuGet-pakket Microsoft.Data.SqlClient toe.

    Install-Package Microsoft.Data.SqlClient
    
  2. Vervang in appsettings.jsonde waarde van de verbindingsreeks door de volgende code, waarbij u de servernaam en databasenaam vervangt<server-name.<database-name>

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

    Notitie

    U kunt active Directory-standaardverificatie zowel op uw lokale computer als in Azure App Service gebruiken. Het stuurprogramma kan op meerdere manieren een token verkrijgen van Microsoft Entra ID.

    Als de app is geïmplementeerd, haalt het stuurprogramma een token op uit de door het systeem toegewezen beheerde identiteit van de app. De driver kan ook worden geverifieerd met een door de gebruiker toegewezen beheerde identiteit als u het User Id=<client-id-of-user-assigned-managed-identity>; opneemt in uw verbindingsreeks.

    De DefaultAzureCredential klasse slaat het token in het geheugen op en haalt het op bij Microsoft Entra ID voordat het verloopt. U hebt geen aangepaste code nodig om het token te vernieuwen.

    U hebt nu alles wat u nodig hebt om verbinding te maken met Azure SQL Database wanneer u debugt in Visual Studio. Uw code maakt gebruik van de Microsoft Entra-gebruiker die u hebt geconfigureerd bij het instellen van uw ontwikkelomgeving.

  3. Voer uw app uit. De CRUD-app in uw browser maakt rechtstreeks verbinding met de Azure SQL-database met behulp van Microsoft Entra-verificatie. Met deze installatie kunt u databasemigraties uitvoeren vanuit Visual Studio.

  4. Publiceer uw wijzigingen met behulp van de volgende Git-opdrachten:

    git commit -am "configure managed identity"
    git push azure main
    

De app testen

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

Schermopname van de Azure-app na Code First-migratie.

U kunt nu de to-do lijst bewerken.

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.