Kurz: Připojení k SQL Database ze služby .NET App Service bez tajných kódů pomocí spravované identity

App Service je vysoce škálovatelná služba s automatickými opravami pro hostování webů v Azure. Poskytuje také spravovanou identitu pro vaši aplikaci, což je řešení na klíč pro zabezpečení přístupu ke službě Azure SQL Database a dalším službám Azure. Spravované identity ve službě App Service zvyšují zabezpečení vaší aplikace tím, že z aplikace odstraňují tajné kódy, jako jsou přihlašovací údaje v připojovacích řetězcích. V tomto kurzu přidáte spravovanou identitu do ukázkové webové aplikace, kterou jste vytvořili v jednom z následujících kurzů:

Až budete hotovi, vaše ukázková aplikace se bezpečně připojí ke službě SQL Database bez potřeby uživatelského jména a hesla.

Diagram architektury pro scénář kurzu

Poznámka:

Kroky popsané v tomto kurzu podporují následující verze:

  • .NET Framework 4.8 a novější
  • .NET 6.0 a novější

Pokyny pro Azure Database for MySQL nebo Azure Database for PostgreSQL v jiných jazykových architekturách (Node.js, Python a Java) najdete v kurzu: Připojení k databázím Azure ze služby App Service bez použití spravovaných identit.

Co se naučíte:

  • Povolení spravovaných identit
  • Udělit přístup ke spravované identitě službě SQL Database
  • Konfigurace entity Framework pro použití ověřování Microsoft Entra se službou SQL Database
  • Připojení k SQL Database ze sady Visual Studio pomocí ověřování Microsoft Entra

Poznámka:

Ověřování Microsoft Entra se liší od integrovaného ověřování systému Windows v místní Active Directory (AD 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.

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

Požadavky

Tento článek pokračuje tam, kde jste skončili v některém z následujících kurzů:

Pokud jste to ještě neudělali, nejprve si projděte jeden ze dvou kurzů. Případně můžete přizpůsobit kroky pro vlastní aplikaci .NET pomocí SLUŽBY SQL Database.

Pokud chcete ladit aplikaci pomocí služby SQL Database jako back-end, ujistěte se, že jste povolili připojení klienta z počítače. Pokud ne, přidejte IP adresu klienta podle kroků na stránce Správa pravidel brány firewall protokolu IP na úrovni serveru pomocí webu Azure Portal.

Připravte prostředí pro Azure CLI.

1. Udělení přístupu k databázi uživateli Microsoft Entra

Nejprve povolte ověřování Microsoft Entra službě SQL Database přiřazením uživatele Microsoft Entra jako správce serveru. Tento uživatel se liší od účtu Microsoft, který jste použili k registraci předplatného Azure. Musí se jednat o uživatele, kterého jste vytvořili, importovali, synchronizovali nebo pozvali do MICROSOFT Entra ID. Další informace o povolených uživatelích Microsoft Entra naleznete v tématu Microsoft Entra funkce a omezení ve službě SQL Database.

  1. Pokud váš tenant Microsoft Entra ještě nemá uživatele, vytvořte ho podle pokynů v tématu Přidání nebo odstranění uživatelů pomocí ID Microsoft Entra.

  2. Vyhledejte ID objektu uživatele Microsoft Entra pomocí az ad user list a nahraďte <hlavní název> uživatele. Výsledek se uloží do proměnné.

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

    Tip

    Pokud chcete zobrazit seznam všech hlavních názvů uživatelů v Microsoft Entra ID, spusťte az ad user list --query '[].userPrincipalName'příkaz .

  3. Přidejte tohoto uživatele Microsoft Entra jako správce služby Active Directory pomocí az sql server ad-admin create příkazu v Cloud Shellu. V následujícím příkazu nahraďte <název> serveru názvem serveru (bez přípony .database.windows.net ).

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

Další informace o přidání správce služby Active Directory najdete v tématu Zřízení správce Microsoft Entra pro váš server.

2. Nastavení vývojového prostředí

  1. Visual Studio pro Windows je integrované s ověřováním Microsoft Entra. Pokud chcete povolit vývoj a ladění v sadě Visual Studio, přidejte uživatele Microsoft Entra v sadě Visual Studio tak, že v nabídce vyberete Nastavení účet souboru>a vyberete Přihlásit se nebo Přidat.

  2. Pokud chcete nastavit uživatele Microsoft Entra pro ověřování služby Azure, v nabídce vyberte Možnosti nástrojů>a pak vyberte Výběr účtu ověřování>služby Azure. Vyberte uživatele Microsoft Entra, který jste přidali, a vyberte OK.

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.

Teď jste připraveni vyvíjet a ladit aplikaci pomocí služby SQL Database jako back-endu pomocí ověřování Microsoft Entra.

3. Úprava projektu

Poznámka:

Microsoft.Azure.Services.AppAuthentication se už nedoporučuje používat s novou sadou Azure SDK. Nahrazuje se novou klientskou knihovnou Azure Identity, která je k dispozici pro .NET, Java, TypeScript a Python a měla by se používat pro veškerý nový vývoj. Informace o tom, jak migrovat, Azure Identitynajdete tady: Pokyny k migraci appAuthentication do Azure.Identity Migration.

Postup, který použijete pro váš projekt, závisí na tom, jestli používáte Entity Framework Core (výchozí pro ASP.NET Core) nebo Entity Framework (výchozí pro ASP.NET).

  1. V sadě Visual Studio otevřete konzolu Správce balíčků a přidejte balíček NuGet Microsoft.Data.SqlClient:

    Install-Package Microsoft.Data.SqlClient -Version 5.1.0
    
  2. V kurzuMyDbConnection ASP.NET Core a SQL Database se zatím připojovací řetězec v appsettings.json nepoužívá. Místní prostředí i prostředí Azure z příslušných proměnných prostředí získají připojovací řetězec, aby se tajné kódy připojení zachovaly mimo zdrojový soubor. Teď ale s ověřováním active directory neexistují žádné další tajné kódy. V appsettings.json nahraďte hodnotu MyDbConnection připojovací řetězec:

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

    Poznámka:

    Výchozí typ ověřování služby Active Directory se dá použít na místním počítači i ve službě Aplikace Azure Service. Ovladač se pokusí získat token z ID Microsoft Entra pomocí různých prostředků. Pokud je aplikace nasazená, získá token ze spravované identity přiřazené systémem aplikace. Může se také ověřit pomocí spravované identity přiřazené uživatelem, pokud do svého připojovací řetězec zahrnete: User Id=<client-id-of-user-assigned-managed-identity>; Pokud je aplikace spuštěná místně, pokusí se získat token ze sady Visual Studio, editoru Visual Studio Code a Azure CLI.

    To je vše, co potřebujete pro připojení ke službě SQL Database. Při ladění v sadě Visual Studio používá váš kód uživatele Microsoft Entra, který jste nakonfigurovali ve verzi 2. Nastavte vývojové prostředí. Později nastavíte SLUŽBU SQL Database tak, aby umožňovala připojení ze spravované identity vaší aplikace App Service. Třída DefaultAzureCredential uloží token do mezipaměti do paměti a načte ho z ID Microsoft Entra těsně před vypršením platnosti. K aktualizaci tokenu nepotřebujete žádný vlastní kód.

  3. Zadejte Ctrl+F5 , aby se aplikace spustila znovu. Stejná aplikace CRUD v prohlížeči se teď připojuje přímo ke službě Azure SQL Database pomocí ověřování Microsoft Entra. Toto nastavení umožňuje spouštět migrace databází ze sady Visual Studio.

4. Použití připojení spravované identity

Dále nakonfigurujete aplikaci App Service tak, aby se připojila ke službě SQL Database pomocí spravované identity přiřazené systémem.

Poznámka:

Pokyny v této části jsou určené pro identitu přiřazenou systémem, ale identitu přiřazenou uživatelem je možné použít stejně snadno. Postupujte takto. Změnu byste potřebovali az webapp identity assign command , aby se přiřadil požadovaná identita přiřazená uživatelem. Při vytváření uživatele SQL pak nezapomeňte místo názvu lokality použít název prostředku identity přiřazeného uživatelem.

Povolení spravované identity v aplikaci

K povolení spravované identity u aplikace Azure použijte příkaz az webapp identity assign v prostředí Cloud Shell. V následujícím příkazu nahraďte <název> aplikace.

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

Poznámka:

Pokud chcete povolit spravovanou identitu pro slot nasazení, přidejte --slot <slot-name> a použijte název slotu v <názvu> slotu.

Tady je příklad výstupu:

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

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

Poznámka:

Pokud chcete, můžete přidat identitu do skupiny Microsoft Entra a pak místo identity udělit přístup ke službě SQL Database skupině Microsoft Entra. Například následující příkazy přidají spravovanou identitu z předchozího kroku do nové skupiny 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. Ve službě Cloud Shell se přihlaste ke službě SQL Database pomocí příkazu SQLCMD. Nahraďte <název> serveru názvem vašeho serveru,< db-name> názvem databáze, který vaše aplikace používá, a< aad-user-name> a aad-password <> přihlašovacími údaji uživatele Microsoft Entra.

    sqlcmd -S <server-name>.database.windows.net -d <db-name> -U <aad-user-name> -P "<aad-password>" -G -l 30
    
  2. Na příkazovém řádku SQL pro požadovanou databázi spusťte následující příkazy, které udělují minimální oprávnění, která vaše aplikace potřebuje. Příklad:

    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> je název spravované identity v Microsoft Entra ID. Pokud je identita přiřazená systémem, název je vždy stejný jako název vaší aplikace App Service. Název identity přiřazené systémem pro slot nasazení je <název app-name>/slots/<slot-name>. Pokud chcete udělit oprávnění pro skupinu Microsoft Entra, použijte místo toho zobrazovaný název skupiny (například myAzureSQLDBAccessGroup).

  3. Zadáním EXIT se vraťte do příkazového řádku služby Cloud Shell.

    Poznámka:

    Back-endové služby spravovaných identit také udržují mezipaměť tokenů, která aktualizuje token pro cílový prostředek pouze v případě, že vyprší jeho platnost. Pokud uděláte chybu při konfiguraci oprávnění služby SQL Database a pokusíte se upravit oprávnění po pokusu o získání tokenu s vaší aplikací, ve skutečnosti nezískáte nový token s aktualizovanými oprávněními, dokud nevyprší platnost tokenu uloženého v mezipaměti.

    Poznámka:

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

Úprava připojovacího řetězce

Mějte na paměti, že stejné změny, které jste provedli ve službě Web.config nebo appsettings.json, fungují se spravovanou identitou, takže jedinou věcí, kterou je potřeba udělat, je odebrat existující připojovací řetězec ve službě App Service, kterou Visual Studio poprvé vytvořilo při nasazování vaší aplikace. Použijte následující příkaz, ale nahraďte <název> aplikace názvem vaší aplikace.

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

5. Publikování změn

Teď už stačí jen publikovat provedené změny do Azure.

  1. Pokud jste přišli z kurzu: Sestavte aplikaci ASP.NET v Azure pomocí SLUŽBY SQL Database, publikujte změny v sadě Visual Studio. V Průzkumníku řešení klikněte pravým tlačítkem na projekt DotNetAppSqlDb a vyberte Publikovat.

    Publikování z Průzkumníka řešení

  2. Na stránce publikování vyberte Publikovat.

    Důležité

    Ujistěte se, že se název vaší služby App Service neshoduje s žádnou existující registrací aplikací. To povede ke konfliktům hlavního ID.

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

Aplikace Azure po migraci Code First

Teď byste měli mít možnost upravovat seznam úkolu stejně jako předtím.

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 přibližně minut.

Další kroky

Naučili jste se:

  • Povolení spravovaných identit
  • Udělit přístup ke spravované identitě službě SQL Database
  • Konfigurace entity Framework pro použití ověřování Microsoft Entra se službou SQL Database
  • Připojení k SQL Database ze sady Visual Studio pomocí ověřování Microsoft Entra