Zelfstudie: Verbinding maken om te 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 hebt gebouwd in een van de volgende zelfstudies:

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

Architecture diagram for tutorial scenario.

Notitie

De stappen in deze zelfstudie ondersteunen de volgende versies:

  • .NET Framework 4,8 en hoger
  • .NET 6.0 en hoger

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

U leert het volgende:

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

Notitie

Azure AD-verificatie verschilt van Geïntegreerde Windows-verificatie in on-premises Active Directory (AD DS). AD DS en Azure AD gebruiken totaal verschillende verificatieprotocollen. Zie Documentatie voor Azure AD Domain Services voor meer informatie.

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

Vereisten

In dit artikel wordt verdergegaan waar u bent 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 Azure AD gebruiker

Schakel eerst Azure Active Directory verificatie in voor SQL Database door een Azure AD 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. Dit moet een gebruiker zijn die u hebt gemaakt, geïmporteerd, gesynchroniseerd of uitgenodigd voor Azure AD. Zie Azure AD-functies en -beperkingen in SQL Database voor meer informatie over de toegestane Azure AD-gebruikers.

  1. Als uw Azure AD-tenant nog geen gebruiker heeft, maakt u er een door de stappen te volgen op Gebruikers toevoegen of verwijderen met behulp van Azure Active Directory.

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

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

    Tip

    Als u de lijst met alle UPN’s in Azure AD wilt zien, voert u az ad user list --query [].userPrincipalName uit.

  3. Voeg deze Azure AD-gebruiker toe als een Active Directory-beheerder met behulp van opdracht az sql server ad-admin create in de 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 Azure Active Directory-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 Azure AD-verificatie. Als u ontwikkeling en foutopsporing in Visual Studio wilt inschakelen, voegt u uw Azure AD gebruiker toe in Visual Studio door FileAccount>Instellingen te selecteren in het menu en aanmelden of Toevoegen te selecteren.

  2. Als u de Azure AD-gebruiker voor Azure-serviceverificatie wilt instellen, selecteert u Hulpprogramma's>Opties in het menu en selecteert u vervolgens Azure-serviceverificatie>Accounts selecteren. Selecteer de Azure AD 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 Azure Active Directory verificatie.

U kunt nu uw app ontwikkelen en fouten opsporen met de SQL Database als back-end, met behulp van Azure AD-verificatie.

3. Uw project wijzigen

Notitie

Microsoft.Azure.Services.AppAuthentication wordt niet meer aanbevolen om te gebruiken 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. Informatie over hoe u kunt migreren, Azure Identityvindt u hier: AppAuthentication naar Azure.Identity Migration Guidance.

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

  1. Open in Visual Studio de Pakketbeheer Console en voeg het NuGet-pakket Azure.Identity toe en werk Entity Framework bij:

    Install-Package Azure.Identity -Version 1.5.0
    Update-Package EntityFramework
    
  2. Voeg in uw DbContext-object (in Models/MyDbContext.cs) de volgende code toe aan de standaardconstructor.

    var conn = (System.Data.SqlClient.SqlConnection)Database.Connection;
    var credential = new Azure.Identity.DefaultAzureCredential();
    var token = credential.GetToken(new Azure.Core.TokenRequestContext(new[] { "https://database.windows.net/.default" }));
    conn.AccessToken = token.Token;
    

    Deze code maakt gebruik van Azure.Identity.DefaultAzureCredential om een bruikbaar token op te halen voor SQL Database van Azure Active Directory en voegt het vervolgens toe aan de databaseverbinding. Hoewel u kunt aanpassen DefaultAzureCredential, is het standaard al erg veelzijdig. Wanneer deze wordt uitgevoerd in App Service, wordt de door het systeem toegewezen beheerde identiteit van de app gebruikt. Wanneer het lokaal wordt uitgevoerd, kan er een token worden opgehaald met behulp van de aangemelde identiteit van Visual Studio, Visual Studio Code, Azure CLI en Azure PowerShell.

  3. Zoek in Web.configde connection string aangeroepen MyDbConnection en vervang de connectionString waarde door "server=tcp:<server-name>.database.windows.net;database=<db-name>;". Vervang <servernaam> en <db-naam> door uw servernaam en databasenaam. Deze connection string wordt gebruikt door de standaardconstructor in Models/MyDbContext.cs.

    Dat is alles wat u nodig hebt om verbinding te maken met SQL Database. Bij foutopsporing in Visual Studio gebruikt uw code de Azure AD 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.

  4. Typ Ctrl+F5 om de app opnieuw uit te voeren. Dezelfde CRUD-app in uw browser is nu rechtstreeks verbonden met de Azure SQL Database, met behulp van Azure AD-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 naam> van de app.<

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

Notitie

Als u een beheerde identiteit voor een implementatiesite wilt inschakelen, voegt u de naam van de site in <sitenaam> toe --slot <slot-name> en gebruikt u deze.

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 Azure AD-groep en vervolgens SQL Database toegang verlenen tot de Azure AD-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 Azure AD gebruiker.

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

    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 Azure AD. Als de identiteit door het systeem is toegewezen, is de naam altijd dezelfde als 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 Azure AD-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

    Azure Active Directory 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 vanuit de -zelfstudie werkt: Bouw een ASP.NET-app in Azure met SQL Database , publiceer uw wijzigingen in Visual Studio. Klik in de Solution Explorer met de rechtermuisknop op uw project DotNetAppSqlDb en selecteer Publiceren.

    Publish from 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 after 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 Azure AD-verificatie met SQL Database
  • Verbinding maken met SQL Database vanuit Visual Studio met behulp van Azure AD-verificatie