Zelfstudie: Azure SQL Database-verbinding vanuit App Service beveiligen met 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 het voorbeeld van de web-app dat u hebt gemaakt in één 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.

Notitie

De stappen in deze zelfstudie ondersteunen de volgende versies:

  • .NET Framework 4.7.2 en hoger
  • .NET Core 2.2 en hoger

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 account voordat u begint.

Vereisten

Dit artikel gaat verder waar u bent gebleven in Zelfstudie: Een ASP.NET-app bouwen in Azure met SQL Database of Zelfstudie: Een ASP.NET Core- en SQL Database-app maken in Azure App Service. 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.

  • Gebruik de bash-omgeving in Azure Cloud shell.

    Cloud Shell starten in een nieuw venster

  • Installeer de Azure CLI, indien gewenst, om CLI-referentieopdrachten uit te voeren.

    • Als u een lokale installatie gebruikt, meldt u zich aan bij Azure CLI met behulp van de opdracht AZ login. Volg de stappen die worden weergegeven in de terminal, om het verificatieproces te voltooien. Raadpleeg Aanmelden bij de Azure CLI voor aanvullende aanmeldingsopties.

    • Installeer de Azure CLI-extensie bij het eerste gebruik, wanneer u hierom wordt gevraagd. Raadpleeg Extensies gebruiken met Azure CLI voor meer informatie over extensies.

    • Voer az version uit om de geïnstalleerde versie en afhankelijke bibliotheken te vinden. Voer az upgrade uit om te upgraden naar de nieuwste versie.

Databasetoegang verlenen aan Azure AD-gebruiker

Schakel eerst Azure AD-verificatie in om SQL Database door een Azure AD-gebruiker toe te wijzen als de Active Directory-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 list en vervang <user-principal-name> . 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 <server-name> met de servernaam (zonder het achtervoegsel .database.windows.net).

    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

Visual Studio instellen

  1. Visual Studio voor Windows is geïntegreerd met Azure AD-verificatie. Als u de ontwikkeling en foutopsporing in Visual Studio wilt inschakelen, voegt u uw Azure AD-gebruiker toe in Visual Studio door Bestand > Accountinstellingen te selecteren in het menu en op Een account toevoegen te klikken.

  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 klik op OK.

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

Uw project wijzigen

De stappen die u voor uw project uitvoert, zijn afhankelijk van het feit of het een ASP.NET-project of een ASP.NET Core-project is.

  1. Open Package Manager Console in Visual Studio en voeg het NuGet-pakket Microsoft.Azure.Services.AppAuthentication toe:

    Install-Package Microsoft.Azure.Services.AppAuthentication -Version 1.4.0
    
  2. In Web.config werkt u vanaf de bovenkant van het bestand en brengt u de volgende wijzigingen aan:

    • Voeg in <configSections> de volgende sectiedeclaratie toe:

      <section name="SqlAuthenticationProviders" type="System.Data.SqlClient.SqlAuthenticationProviderConfigurationSection, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
      
    • Voeg onder de tag voor het sluiten van </configSections> de volgende XML-code toe voor <SqlAuthenticationProviders>.

      <SqlAuthenticationProviders>
        <providers>
          <add name="Active Directory Interactive" type="Microsoft.Azure.Services.AppAuthentication.SqlAppAuthenticationProvider, Microsoft.Azure.Services.AppAuthentication" />
        </providers>
      </SqlAuthenticationProviders>
      
    • Zoek de verbindingsreeks met de naam MyDbConnection en vervang de waarde connectionString door "server=tcp:<server-name>.database.windows.net;database=<db-name>;UID=AnyString;Authentication=Active Directory Interactive". Vervang <server-name> en <db-name> met uw servernaam en databasenaam.

    Notitie

    De SqlAuthenticationProvider die u zojuist hebt geregistreerd, is gebaseerd op de AppAuthentication-bibliotheek die u eerder hebt geïnstalleerd. Standaard wordt een door het systeem toegewezen identiteit gebruikt. Als u gebruik wilt maken van een door de gebruiker toegewezen identiteit, moet u een aanvullende configuratie opgeven. Zie ondersteuning voor verbindingsreeks voor de AppAuthentication-bibliotheek.

    Dat is alles wat u nodig hebt om verbinding te maken met SQL Database. Als u fouten opspoort in Visual Studio, gebruikt uw code de Azure AD-gebruiker die u hebt geconfigureerd in Visual Studio instellen. U stelt SQL Database later in om verbinding te maken vanuit de beheerde identiteit van uw App Service-app.

  3. 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.

Connectiviteit met beheerde identiteit 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 <app-name> in de volgende opdracht.

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

Notitie

Als u beheerde identiteit wilt inschakelen voor een implementatiesleuf,voegt u toe en --slot <slot-name> gebruikt u de naam van de sleuf in <slot-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 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 <server-name> door de naam van uw server <db-name> met de naam van de database die uw app gebruikt en <aad-user-name> en <aad-password> met 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 hetzelfde als de naam van uw App Service app. Voor een implementatiesleufis 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 <app-name> door de naam van uw app.

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

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.

    Publiceren vanuit Solution Explorer

  2. Klik op de publicatiepagina op Publiceren.

    Belangrijk

    Zorg ervoor dat de naam van uw app-service niet overeen komt 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 Azure AD-verificatie met SQL Database
  • Verbinding maken met SQL Database vanuit Visual Studio met behulp van Azure AD-verificatie

Ga door naar de volgende zelfstudie om te leren hoe u een aangepaste DNS-naam aan uw web-app kunt toewijzen.