Sdílet prostřednictvím


Kurz: Připojení k databázím Azure ze služby 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í pro zabezpečení přístupu k databázím Azure, včetně následujících:

Poznámka:

Tento kurz neobsahuje pokyny pro službu Azure Cosmos DB, která podporuje jiné ověřování Microsoft Entra. Další informace najdete v dokumentaci ke službě Azure Cosmos DB, jako je použití spravovaných identit přiřazených systémem pro přístup k datům Azure Cosmos DB.

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 se dozvíte, jak se z App Service připojit k výše uvedeným databázím pomocí spravovaných identit.

Co se naučíte:

  • Nakonfigurujte uživatele Microsoft Entra jako správce pro vaši databázi Azure.
  • Připojte se k databázi jako uživatel Microsoft Entra.
  • Nakonfigurujte spravovanou identitu přiřazenou systémem nebo přiřazenou uživatelem pro aplikaci app Service.
  • Udělte spravované identitě přístup k databázi.
  • Připojte se k databázi Azure z kódu (.NET Framework 4.8, .NET 6, Node.js, Python, Java) pomocí spravované identity.
  • Připojte se k databázi Azure z vývojového prostředí pomocí uživatele Microsoft Entra.

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

Požadavky

  • Vytvořte aplikaci ve službě App Service na základě .NET, Node.js, Pythonu nebo Javy.
  • Vytvořte databázový server pomocí Azure SQL Database, Azure Database for MySQL nebo Azure Database for PostgreSQL.
  • Měli byste být obeznámeni se standardním vzorem připojení (s uživatelským jménem a heslem) a úspěšně se připojit z aplikace App Service k databázi podle vašeho výběru.

Připravte prostředí pro Azure CLI.

1. Instalace rozšíření Bez hesla konektoru Service Connector

Nainstalujte nejnovější rozšíření bez hesla konektoru Service Connector pro Azure CLI:

az extension add --name serviceconnector-passwordless --upgrade

Poznámka:

Spuštěním příkazu az version zkontrolujte, jestli je verze serviceconnector-passwordless verze 2.0.2 nebo vyšší. Abyste mohli upgradovat verzi rozšíření, možná budete muset nejprve upgradovat Azure CLI.

2. Vytvoření připojení bez hesla

Dále vytvořte připojení bez hesla pomocí konektoru Service Connector.

Tip

S vytvářením příkazů níže vám může pomoct Azure Portal. Na webu Azure Portal přejděte na prostředek služby Aplikace Azure, v nabídce vlevo vyberte Konektor služby a vyberte Vytvořit. Vyplňte formulář všemi požadovanými parametry. Azure automaticky vygeneruje příkaz pro vytvoření připojení, který můžete zkopírovat do rozhraní příkazového řádku nebo spustit v Azure Cloud Shellu.

Následující příkaz Azure CLI používá --client-type parametr.

  1. Volitelně spusťte příkaz az webapp connection create sql -h pro získání podporovaných typů klientů.

  2. Zvolte typ klienta a spusťte odpovídající příkaz. Nahraďte zástupné symboly níže vlastními informacemi.

    az webapp connection create sql \
        --resource-group <group-name> \
        --name <server-name> \
        --target-resource-group <sql-group-name> \
        --server <sql-name> \
        --database <database-name> \
        --user-identity client-id=<client-id> subs-id=<subscription-id> \
        --client-type <client-type>
    

Tento příkaz konektoru služby na pozadí dokončí následující úlohy:

  • Povolte spravovanou identitu přiřazenou systémem nebo přiřaďte identitu uživatele pro aplikaci <server-name> hostované službou Aplikace Azure Service.
  • Nastavte správce Microsoft Entra na aktuální přihlášeného uživatele.
  • Přidejte uživatele databáze pro spravovanou identitu přiřazenou systémem nebo spravovanou identitu přiřazenou uživatelem. Udělte tomuto uživateli všechna oprávnění databáze <database-name> . Uživatelské jméno najdete v připojovací řetězec v předchozím výstupu příkazu.
  • Nastavte konfigurace s názvem AZURE_MYSQL_CONNECTIONSTRING, AZURE_POSTGRESQL_CONNECTIONSTRINGnebo AZURE_SQL_CONNECTIONSTRING na prostředek Azure na základě typu databáze.
  • V případě služby App Service se konfigurace nastaví v okně Nastavení aplikace.

Pokud při vytváření připojení narazíte na nějaký problém, projděte si nápovědu v části Řešení potíží .

3. Úprava kódu

  1. Nainstalujte závislosti.

    dotnet add package Microsoft.Data.SqlClient
    
  2. Získejte připojovací řetězec Azure SQL Database z proměnné prostředí přidané konektorem služby.

    using Microsoft.Data.SqlClient;
    
    // AZURE_SQL_CONNECTIONSTRING should be one of the following:
    // For system-assigned managed identity:"Server=tcp:<server-name>.database.windows.net;Database=<database-name>;Authentication=Active Directory Default;TrustServerCertificate=True"
    // For user-assigned managed identity: "Server=tcp:<server-name>.database.windows.net;Database=<database-name>;Authentication=Active Directory Default;User Id=<client-id-of-user-assigned-identity>;TrustServerCertificate=True"
    
    string connectionString = 
        Environment.GetEnvironmentVariable("AZURE_SQL_CONNECTIONSTRING")!;
    
    using var connection = new SqlConnection(connectionString);
    connection.Open();
    

    Další informace najdete v tématu Použití ověřování spravované identity služby Active Directory.

Další informace naleznete v tématu Domovská stránka pro programování klientů na Microsoft SQL Server. Další ukázky kódu najdete v tématu Vytvoření připojení bez hesla k databázové službě prostřednictvím konektoru Service Connector.

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

Tento ukázkový kód používá DefaultAzureCredential k získání použitelného tokenu pro databázi Azure z ID Microsoft Entra a pak ho přidá do připojení k databázi. I když můžete přizpůsobit DefaultAzureCredential, je to už ve výchozím nastavení všestranné. Získá token od přihlášeného uživatele Microsoft Entra nebo ze spravované identity v závislosti na tom, jestli ho spouštíte místně ve vývojovém prostředí nebo ve službě App Service.

Bez jakýchkoli dalších změn je váš kód připravený ke spuštění v Azure. K místnímu ladění kódu ale vaše vývojové prostředí potřebuje přihlášeného uživatele Microsoft Entra. V tomto kroku nakonfigurujete své prostředí podle vlastního výběru přihlášením pomocí uživatele Microsoft Entra.

  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í účtu 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.

5. Testování a publikování

  1. Spusťte kód ve vývojovém prostředí. Váš kód používá přihlášeného uživatele Microsoft Entra ve vašem prostředí k připojení k back-endové databázi. Uživatel má přístup k databázi, protože je nakonfigurovaný jako správce Microsoft Entra pro databázi.

  2. Publikujte svůj kód do Azure pomocí upřednostňované metody publikování. Ve službě App Service váš kód používá spravovanou identitu aplikace k připojení k back-endové databázi.

Nejčastější dotazy

Podporuje spravovaná identita SQL Server?

Ano. Další informace naleznete v tématu:

Zobrazuje se mi chyba Login failed for user '<token-identified principal>'.

Spravovaná identita, pro kterou se pokoušíte požádat o token, nemá oprávnění pro přístup k databázi Azure.

Provedl(a) jsem změny ověřování služby App Service nebo přidružené registrace aplikace. Proč stále získám starý token?

Back-endové služby spravovaných identit také udržují mezipaměť tokenů, která aktualizuje token pro cílový prostředek, pouze když vyprší jeho platnost. Pokud konfiguraci upravíte 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. Nejlepší způsob, jak to obejít, je otestovat změny pomocí nového okna InPrivate (Edge)/private (Safari)/Anonymní okno (Chrome). Tímto způsobem určitě začínáte z nové ověřené relace.

Návody přidat spravovanou identitu do skupiny Microsoft Entra?

Pokud chcete, můžete přidat identitu do skupiny Microsoft Entra a pak místo identity udělit přístup ke 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 <group-name> --name <app-name> --query principalId --output tsv)
az ad group member add --group $groupid --member-id $msiobjectid
az ad group member list -g $groupid

Pokud chcete udělit oprávnění k databázi pro skupinu Microsoft Entra, přečtěte si dokumentaci k příslušnému typu databáze.

Zobrazuje se mi chyba SSL connection is required. Please specify SSL options and retry.

Připojení k databázi Azure vyžaduje další nastavení a přesahuje rozsah tohoto kurzu. Další informace najdete na jednom z následujících odkazů:

Konfigurace připojení TLS ve službě Azure Database for PostgreSQL – Jeden server– Konfigurace připojení SSL ve vaší aplikaci pro bezpečné připojení ke službě Azure Database for MySQL

Vytvořil(a) jsem aplikaci pomocí šablony Web App + Database a teď nemůžu nakonfigurovat připojení spravované identity s příkazy konektoru služby.

Service Connector potřebuje síťový přístup k databázi, aby mohl udělit přístup k identitě aplikace. Když vytvoříte na webu Azure Portal zabezpečenou architekturu aplikace a databáze pomocí šablony Web App + Database, architektura uzamkne síťový přístup k databázi a povolí připojení pouze z virtuální sítě. Platí to také pro Azure Cloud Shell. Cloud Shell ale můžete nasadit ve virtuální síti a pak v cloud Shellu spustit příkaz konektoru služby.

Další kroky

Naučili jste se:

  • Nakonfigurujte uživatele Microsoft Entra jako správce pro vaši databázi Azure.
  • Připojte se k databázi jako uživatel Microsoft Entra.
  • Nakonfigurujte spravovanou identitu přiřazenou systémem nebo přiřazenou uživatelem pro aplikaci app Service.
  • Udělte spravované identitě přístup k databázi.
  • Připojte se k databázi Azure z kódu (.NET Framework 4.8, .NET 6, Node.js, Python, Java) pomocí spravované identity.
  • Připojte se k databázi Azure z vývojového prostředí pomocí uživatele Microsoft Entra.