Kurz: Připojení k Azure databázím ze služby App Service bez tajných kódů pomocí spravované identity

App Service poskytuje vysoce škálovatelnou službu samoobslužného hostování webů v Azure. Poskytuje také managed identity pro vaši aplikaci, což je řešení pro zabezpečení přístupu k databázím Azure, včetně:

Poznámka:

Tento kurz neobsahuje pokyny pro Azure Cosmos DB, které podporují ověřování Microsoft Entra jinak. Další informace najdete v dokumentaci k Azure Cosmos DB, například 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 Microsoft Entra uživatele 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 ke Azure databázi z kódu (.NET Framework 4.8, .NET 6, Node.js, Python, Java) pomocí spravované identity.
  • Připojte se k Azure databázi z vývojového prostředí pomocí Microsoft Entra uživatele.

Pokud účet Azure nemáte, vytvořte si účet free než začnete.

Požadavky

  • Vytvořte aplikaci ve službě App Service na základě .NET, Node.js, Python nebo Java.
  • Vytvořte databázový server s 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í na Azure CLI.

1. Nainstalujte rozšíření bez hesla pro 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 serviceconnector-passwordless příkazu az versionzkontrolujte, jestli je verze rozšíření 2.0.2 nebo novější. V případě potřeby nejprve upgradujte Azure CLI a pak upgradujte rozšíření.

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

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

Návod

Portál Azure vám může pomoct vytvořit následující příkazy. Na portálu Azure přejděte na prostředek Azure App Service, v nabídce vlevo vyberte Konektor služby a v nabídce vlevo vyberte Create. 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 Shell.

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

  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 následující zástupné symboly 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 dokončí v pozadí 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é Azure App Service.
  • Nastavte správce Microsoft Entra na aktuálního 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_CONNECTIONSTRING nebo 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é Service Connector.

    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í pomocí spravované identity v služba Active Directory.

Další informace najdete v tématu Homepage pro programování klientů pro 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 vaši databázi Azure z Microsoft Entra ID 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í tak, že se přihlásíte pomocí Microsoft Entra uživatele.

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

  2. Pokud chcete nastavit Microsoft Entra uživatele pro ověřování služby Azure, v nabídce vyberte Nástroje>Možnosti, a pak vyberte Azure Ověřování služby>Výběr účtu. Vyberte Microsoft Entra uživatele, 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 Azure Klientská knihovna identit 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 Microsoft Entra uživatele 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 databáze.

  2. Publikujte 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 Azure databázi.

Provedl(a) jsem změny v autentizaci služby App Service nebo přidružené registraci aplikace. Proč stále dostává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.

Jak přidám 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ů:

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ž na portálu Azure vytvoříte zabezpečenou architekturu databáze a aplikace ve výchozím nastavení pomocí šablony Web App + Database, architektura uzamkne síťový přístup k databázi a povolí připojení jenom z virtuální sítě. Platí to i pro Azure Cloud Shell. Můžete nasadit Cloud Shell ve virtuální síti a poté v tomto Cloud Shellu spustit příkaz pro Konektor služby.

Další kroky

Naučili jste se:

  • Nakonfigurujte Microsoft Entra uživatele 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 ke Azure databázi z kódu (.NET Framework 4.8, .NET 6, Node.js, Python, Java) pomocí spravované identity.
  • Připojte se k Azure databázi z vývojového prostředí pomocí Microsoft Entra uživatele.