Sdílet prostřednictvím


Kurz: Použití spravované identity k připojení webové aplikace Azure k databázi Azure SQL bez tajných kódů

Azure App Service poskytuje vysoce škálovatelnou samoopravnou službu webového hostingu v Azure. App Service také poskytuje spravovanou identitu pro vaši aplikaci, což je řešení na klíč pro zabezpečení přístupu k Azure SQL a dalším službám Azure. Spravované identity ve službě App Service usnadňují zabezpečení vaší aplikace odstraněním tajných kódů, jako jsou přihlašovací údaje v připojovacích řetězcích.

V tomto kurzu se dozvíte, jak přidat spravovanou identitu do ukázkové aplikace .NET, která má back-end Azure SQL. Po dokončení se vaše aplikace může bezpečně připojit k databázi Azure SQL bez nutnosti uživatelského jména a hesla.

Diagram architektury pro scénář kurzu

V tomto kurzu se naučíte:

  • Povolit spravované identity
  • Udělte službě Azure SQL Database přístup ke spravované identitě.
  • Nakonfigurujte Entity Framework tak, aby používala ověřování Microsoft Entra se službou SQL Database.
  • Připojte se ke službě SQL Database ze sady Visual Studio pomocí ověřování Microsoft Entra.

Pokyny k používání služby Azure Database for MySQL nebo Azure Database for PostgreSQL v architekturách Node.js, Pythonu a Javě najdete v kurzu: Připojení k databázím Azure z App Service bez tajných kódů pomocí spravované identity.

Poznámka:

  • Místní SQL Server nepodporuje ID Microsoft Entra a spravované identity.

  • Ověřování Microsoft Entra se liší od integrovaného ověřování systému Windows v místní službě Active Directory (AD) Domain Services (DS). AD DS a Microsoft Entra ID používají zcela jiné ověřovací protokoly. Další informace naleznete v dokumentaci ke službě Microsoft Entra Domain Services.

Požadavky

  • Pokud nemáte účet Azure, vytvořte si bezplatný účet před tím, než začnete.

  • Máte základní aplikaci Azure App Service ASP.NET MVC nebo ASP.NET Core MVC create-read-update-delete (CRUD), která jako back-end používá azure SQL Database s ověřováním SQL. Kroky v tomto kurzu podporují následující verze .NET:

    • .NET Framework 4.8 a novější
    • .NET 6.0 a novější
  • Povolte připojení klienta z počítače k Azure, abyste mohli ladit aplikaci ve vývojovém prostředí. IP adresu klienta můžete přidat podle kroků uvedených v Správa pravidel IP brány firewall na úrovni serveru pomocí portálu Azure.

  • Přihlaste se ke službě Azure Cloud Shell nebo připravte své prostředí na používání Azure CLI.

Udělení přístupu správce databáze uživateli Microsoft Entra

Povolte ověřování Microsoft Entra do databáze Azure SQL tím, že přiřadíte uživatele Microsoft Entra jako správce serveru Azure SQL. Správce Microsoft Entra musí být uživatel, který je vytvořený, importovaný, synchronizovaný nebo pozvaný do Microsoft Entra ID. Tento uživatel nemusí být stejný jako uživatel účtu Microsoft pro vaše předplatné Azure.

V prostředí Bash služby Azure Cloud Shell nebo po místním přihlášení k Azure CLI spusťte následující příkazy.

  1. Pomocí parametru az ad user list, display-name, filter nebo upn získejte ID objektu pro uživatele Microsoft Entra ID, kterého chcete nastavit jako správce. Spusťte az ad user list samostatně pro zobrazení informací o všech uživatelích v adresáři Microsoft Entra.

    Například následující příkaz uvádí informace pro uživatele Microsoft Entra ID se jménem ve formátu display-name jako Jméno Příjmení.

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

    Tady je příklad výstupu:

     "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. Přidejte uživatele Microsoft Entra ID jako správce na serveru Azure SQL pomocí az sql server ad-admin create parametru object-id . V následujícím příkazu nahraďte <server-name> názvem vašeho serveru mínus příponu .database.windows.net a <entra-id>id hodnotou z výstupu předchozího az ad user list příkazu.

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

Nastavení připojení spravované identity pro aplikaci

Následující kroky nakonfigurují aplikaci tak, aby se připojila ke službě Azure SQL Database pomocí spravované identity přiřazené systémem. Pokud chcete použít identitu přiřazenou uživatelem, přečtěte si kurz: Připojení k databázím Azure ze služby App Service bez tajných kódů pomocí spravované identity.

Povolení spravované identity pro aplikaci

Pokud chcete pro aplikaci Azure povolit spravovanou identitu, použijte příkaz az webapp identity assign a nahraďte <app-name> názvem vaší aplikace. Název identity přiřazené systémem je vždy stejný jako název aplikace.

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

Tady je příklad výstupu:

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

Pokud chcete povolit spravovanou identitu pro slot nasazení, přidejte --slot <slot-name> do předchozího příkazu a použijte název slotu v <slot-name>. Název identity přiřazené systémem pro slot nasazení je <app-name>/slots/<slot-name>.

Identitu můžete přidat také do skupiny Microsoft Entra a pak udělit službě SQL Database přístup ke skupině Microsoft Entra místo této identity. Pokud chcete udělit oprávnění pro skupinu Microsoft Entra, použijte zobrazovaný název skupiny. Následující příkazy přidají ukázkovou spravovanou identitu do nové skupiny s názvem 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

Udělení oprávnění spravované identitě

Udělte identitě minimální oprávnění, která vaše aplikace potřebuje.

  1. Otevřete příkazový řádek PowerShellu a přihlaste se ke službě SQL Database pomocí následujícího příkazu SQLCMD. Nahraďte <server-name> názvem serveru, <db-name> názvem vaší databáze a <admin-user> uživatelem userPrincipalName správce z výstupu předchozího az ad user list příkazu.

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

    Podle pokynů se přihlaste.

  2. Na příkazovém řádku SQL spusťte následující příkazy a udělte aplikaci minimální oprávnění, která potřebuje pro databázi. Nahraďte <identity-name> názvem spravované identity v Microsoft Entra ID, což je stejné jako název aplikace.

    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
    

Poznámka:

Služby identit, které jsou spravované backendem, udržují mezipaměť tokenů, která aktualizuje token pro cílový prostředek pouze tehdy, když vyprší jeho platnost. Pokud se pokusíte upravit oprávnění služby SQL Database po prvním získání tokenu s aplikací, nebudete mít nový token s aktualizovanými oprávněními, dokud nevyprší platnost tokenu uloženého v mezipaměti.

Odeberte původní připojovací řetězec

Všechny změny provedené v web.config nebo appsettings.json fungují se spravovanou identitou. Můžete odebrat původní připojovací řetězec, který jste použili při prvním nasazení aplikace. Pokud chcete připojovací řetězec odstranit, spusťte následující příkaz Azure CLI a nahraďte <app-name> název vaší aplikace a <connection-string-name> názvem připojovacího řetězce.

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

Nastavení vývojového prostředí

Nastavte zvolené vývojové prostředí a přihlaste se k Azure. Další informace o nastavení vývojového prostředí pro ověřování Microsoft Entra najdete v tématu Klientská knihovna identit Azure pro .NET.

Visual Studio pro Windows je integrované s ověřováním Microsoft Entra.

  1. Pokud chcete povolit vývoj a ladění v sadě Visual Studio, přidejte svého uživatele Microsoft Entra do sady Visual Studio tím, že v horní nabídce vyberete Soubor>Nastavení účtu, a pak vyberete Přihlásit se nebo Přidat.
  2. Pokud chcete nastavit uživatele Microsoft Entra pro ověřování služby Azure, v horní nabídce vyberte Možnosti nástrojů> a pak vybertevýběr účtu> služby Azure. Vyberte uživatele Microsoft Entra, který jste přidali, a vyberte OK.

Úprava projektu a publikování aplikace

Webová aplikace zálohovaná databází Azure SQL používá k připojení k databázi kontext databáze. Pokud chcete pro práci s aplikací použít ověřování Microsoft Entra, musíte aktualizovat kontext databáze tak, aby odkazoval na poskytovatele Entity Frameworku pro SQL Server, který závisí na moderním poskytovateli Microsoft.Data.SqlClient ADO.NET.

Zprostředkovatel Entity Framework nahrazuje integrovaného System.Data.SqlClient zprostředkovatele SQL Serveru a zahrnuje podporu metod ověřování Microsoft Entra ID. Další informace naleznete v tématu Microsoft.EntityFramework.SqlServer.

[DbConfigurationType(typeof(MicrosoftSqlDbConfiguration))] funguje lokálně pro použití Microsoft.Data.SqlClient pro kontext databáze, ale protože System.Data.SqlClient je pevně zakódován jako poskytovatel ve službě Azure App Service, musíte rozšířit MicrosoftSqlDbConfiguration, aby přesměroval odkazy System.Data.SqlClient na Microsoft.Data.SqlClient. Postup se liší v závislosti na tom, jestli máte aplikaci ASP.NET nebo ASP.NET Core.

Aplikace ASP.NET Core ve výchozím nastavení používá Entity Framework Core .

  1. V konzole Správce balíčků sady Visual Studio přidejte balíček NuGet Microsoft.Data.SqlClient.

    Install-Package Microsoft.Data.SqlClient
    
  2. V appsettings.jsonnahraďte hodnotu připojovacího řetězce následujícím kódem a nahraďte <server-name název serveru a <database-name> název databáze.

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

    Poznámka:

    Výchozí ověřování služby Active Directory můžete použít na místním počítači i ve službě Azure App Service. Ovladač může získat token z ID Microsoft Entra několika různými způsoby.

    Pokud je aplikace nasazená, ovladač získá token ze spravované identity přiřazené systémem aplikace. Ovladač se také může ověřit pomocí spravované identity přiřazené uživatelem, pokud zahrnete User Id=<client-id-of-user-assigned-managed-identity>; do připojovacího řetězce.

    Třída DefaultAzureCredential ukládá token do mezipaměti v paměti a před vypršením platnosti ho načte z Microsoft Entra ID. K aktualizaci tokenu nepotřebujete žádný vlastní kód.

    Teď máte všechno, co potřebujete pro připojení ke službě Azure SQL Database při ladění v sadě Visual Studio. Váš kód používá uživatele Microsoft Entra, který jste nakonfigurovali při nastavování vývojového prostředí.

  3. Spusťte aplikaci. Aplikace CRUD ve vašem prohlížeči se připojuje přímo k databázi Azure SQL pomocí ověřování Microsoft Entra. Toto nastavení umožňuje spouštět migrace databází ze sady Visual Studio.

  4. Změny publikujte pomocí následujících příkazů Gitu:

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

Otestování aplikace

Pokud se na nové webové stránce zobrazí seznam úkolů, připojuje se vaše aplikace k databázi pomocí spravované identity.

Snímek obrazovky znázorňující aplikaci Azure po migraci Code First

Teď můžete upravit seznam to-do.

Vyčištění prostředků

V předchozích krocích jste vytvořili prostředky Azure ve skupině prostředků. Pokud předpokládáte, že už tyto prostředky nebudete potřebovat, odstraňte skupinu prostředků spuštěním následujícího příkazu ve službě Cloud Shell:

az group delete --name myResourceGroup

Spuštění tohoto příkazu může trvat minutu.