Kurz: Zabezpečení připojení ke službě Azure SQL Database ze služby App Service s využitím 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 vytvořené 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 uvedené v tomto kurzu podporují následující verze:

  • .NET Framework 4.7.2 a vyšší
  • .NET Core 2.2 a vyšší

Co se naučíte:

  • Povolit spravované identity
  • Udělit přístup ke spravované identitě službě SQL Database
  • Konfigurace Entity Framework ověřování Azure AD s SQL Database
  • Připojení k SQL Database z Visual Studio s využitím ověřování Azure AD

Poznámka

Ověřování Azure AD se liší od integrovaného ověřování Windows v místní Active Directory (AD DS). Služby AD DS a Azure AD používají zcela odlišné ověřovací protokoly. Další informace najdete v Azure AD Domain Services dokumentaci.

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

Požadavky

Tento článek pokračuje tam, kde jste v kurzu: Sestavení aplikace ASP.NET v Azure pomocí SQL Database nebo Kurz:Sestavení aplikace ASP.NET Core a SQL Database v Azure App Service . Pokud jste to ještě neudělali, nejprve postupujte podle jednoho ze dvou kurzů. Případně můžete přizpůsobit kroky pro vlastní aplikaci .NET pomocí SQL Database.

Pokud chcete aplikaci ladit pomocí SQL Database jako back-endu, ujistěte se, že jste z počítače umožnili připojení klienta. Pokud ne, přidejte IP adresu klienta podle postupu v části Správa pravidel brány firewall protokolu IP naúrovni serveru pomocí Azure Portal .

Připravte si prostředí pro Azure CLI.

  • V nástroji použijte prostředí Bash Azure Cloud Shell.

    Spuštění služby Cloud Shell v novém okně

  • Pokud tomu dáváte přednost, můžete nainstalovat Azure CLI a spouštět referenční příkazy CLI.

    • Pokud používáte místní instalaci, přihlaste se k Azure CLI pomocí příkazu az login. Pokud chcete dokončit proces ověřování, postupujte podle kroků zobrazených na terminálu. Další možnosti přihlášení jsou popsané v tématu Přihlášení pomocí Azure CLI.

    • Po zobrazení výzvy nainstalujte rozšíření Azure CLI při prvním použití. Další informace o rozšířeních najdete v tématu Využití rozšíření v Azure CLI.

    • Spuštěním příkazu az version zjistěte verzi a závislé knihovny, které jsou nainstalované. Pokud chcete upgradovat na nejnovější verzi, spusťte az upgrade.

Udělení přístupu k databázi uživateli Azure AD

Nejprve povolte ověřování Azure AD SQL Database přiřazením uživatele Azure AD jako správce Active Directory serveru. Tento uživatel se liší od účet Microsoft které jste použili k přihlášení k předplatnému Azure. Musí to být uživatel, který jste vytvořili, naimportoval, synchronizovali nebo pozvaněli do Azure AD. Další informace o povolených uživatelích Azure AD najdete v tématu Funkce a omezení Azure AD v SQL Database.

  1. Pokud váš tenant Azure AD ještě uživatele nemá, vytvořte si ho podle postupu v tématu Přidání nebo odstranění uživatelů pomocí Azure Active Directory.

  2. Pomocí příkazu vyhledejte ID objektu uživatele Azure AD a az ad user list nahraďte <user-principal-name> . Výsledek se uloží do proměnné.

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

    Tip

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

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

    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 Active Directory najdete v tématu Zřízení správce Azure Active Directory serveru.

Nastavit Visual Studio

  1. Visual Studio pro Windows je integrovaná s ověřováním Azure AD. Pokud chcete povolit vývoj a ladění v Visual Studio, přidejte uživatele Azure AD do Visual Studio tak, že v nabídce vyberete Souborový účet Nastavení a kliknete na Přidat > účet.

  2. Pokud chcete nastavit uživatele Azure AD pro ověřování služeb Azure, vyberte v nabídce Nástroje Možnosti a pak vyberte Výběr účtu ověřování > služby > Azure. Vyberte přidaného uživatele Azure AD a klikněte na OK.

Teď jste připraveni vyvíjet a ladit aplikaci s back-endem SQL Database s využitím ověřování Azure AD.

Úprava projektu

Postup pro váš projekt závisí na tom, jestli se jedná o ASP.NET projekt nebo ASP.NET Core projekt.

  1. V Visual Studio otevřete konzolu Správce balíčků a přidejte balíček NuGet Microsoft.Azure.Services.AppAuthentication:

    Install-Package Microsoft.Azure.Services.AppAuthentication -Version 1.4.0
    
  2. V Web.config v horní části souboru proveďte následující změny:

    • Do <configSections> souboru přidejte následující deklaraci oddílu:

      <section name="SqlAuthenticationProviders" type="System.Data.SqlClient.SqlAuthenticationProviderConfigurationSection, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
      
    • pod </configSections> ukončovací značku přidejte následující kód XML pro <SqlAuthenticationProviders> .

      <SqlAuthenticationProviders>
        <providers>
          <add name="Active Directory Interactive" type="Microsoft.Azure.Services.AppAuthentication.SqlAppAuthenticationProvider, Microsoft.Azure.Services.AppAuthentication" />
        </providers>
      </SqlAuthenticationProviders>
      
    • Vyhledejte připojovací řetězec s názvem MyDbConnection a nahraďte jeho connectionString hodnotu hodnotou "server=tcp:<server-name>.database.windows.net;database=<db-name>;UID=AnyString;Authentication=Active Directory Interactive" . Nahraďte <server-name> a názvem serveru a názvem <db-name> databáze.

    Poznámka

    Objekt SqlAuthenticationProvider, který jste právě zaregistrovali, je založený na knihovně AppAuthentication, kterou jste nainstalovali dříve. Ve výchozím nastavení používá identitu přiřazenou systémem. Pokud chcete využít identitu přiřazenou uživatelem, budete muset zadat další konfiguraci. Projděte si podporu připojovacích řetězců pro knihovnu AppAuthentication.

    To je všechno, co potřebujete pro připojení k SQL Database. Při ladění v Visual Studio váš kód používá uživatele Azure AD, který jste nakonfigurovali v nastavení Visual Studio. Později nastavíte připojení SQL Database připojení ze spravované identity vaší App Service aplikace.

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

Použití připojení spravované identity

Dále nakonfigurujete svou aplikaci App Service pro připojení k SQL Database spravovanou identitou přiřazenou systémem.

Poznámka

I když pokyny v této části jsou určené pro identitu přiřazenou systémem, je možné jednoduše použít uživatelsky přiřazenou identitu. Postupujte takto. tuto změnu budete potřebovat az webapp identity assign command k přiřazení požadované uživatelem přiřazené identity. pak při vytváření SQLho uživatele nezapomeňte použít název prostředku identity přiřazené uživatelem, nikoli název lokality.

Povolit spravovanou identitu 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 <app-name> .

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 <slot-name> .

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 azure ada potom udělit SQL Database přístup ke skupině azure ad namísto identity. Například následující příkazy přidají spravovanou identitu z předchozího kroku 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
  1. Ve službě Cloud Shell se přihlaste ke službě SQL Database pomocí příkazu SQLCMD. Nahraďte <server-name> názvem vašeho serveru a <db-name> názvem databáze, který vaše aplikace používá, a <aad-user-name> <aad-password> s přihlašovacími údaji uživatele Azure AD.

    sqlcmd -S <server-name>.database.windows.net -d <db-name> -U <aad-user-name> -P "<aad-password>" -G -l 30
    
  2. v SQL výzvy k zadání požadované databáze spusťte následující příkazy, abyste udělili oprávnění, která vaše aplikace potřebuje. Třeba

    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 ve službě Azure AD. Je-li identita přiřazena systémem, název je vždy stejný jako název vaší aplikace App Service. V případě slotu nasazeníje název jeho identity přiřazené systému <app-name> <slot-name> /Slots/. Pokud chcete udělit oprávnění pro skupinu Azure AD, použijte místo toho zobrazované jméno 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é uchovávají mezipaměť tokenů , která aktualizuje token pro cílový prostředek pouze v případě, že jeho platnost vyprší. pokud uděláte omylem konfiguraci oprávnění SQL Database a pokusíte se změnit oprávnění po pokusu o získání tokenu s vaší aplikací, nezískáte ve skutečnosti nový token s aktualizovanými oprávněními, dokud nevyprší platnost tokenu v mezipaměti.

    Poznámka

    Azure Active Directory a spravované identity se pro místní SQL Server nepodporují.

Úprava připojovacího řetězce

pamatujte, že stejné změny, které jste provedli v Web.config nebo appsettings. json , fungují se spravovanou identitou, takže jediným krokem je odebrání stávajícího připojovacího řetězce v App Service, který Visual Studio poprvé nasazovat aplikaci. Použijte následující příkaz, ale nahraďte <app-name> názvem vaší aplikace.

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

Publikování provedených změn

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

  1. pokud jste pocházeli z kurzu: sestavení aplikace ASP.NET v Azure pomocí SQL Database, publikování změn v 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í klikněte na Publikovat.

    Důležité

    Ujistěte se, že název služby App Service neodpovídá žádným existujícím registrům aplikací. To bude mít za následek konflikty ID objektu zabezpečení.

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 Code First migraci

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:

  • Povolit spravované identity
  • Udělit přístup ke spravované identitě službě SQL Database
  • Konfigurace Entity Framework pro použití ověřování Azure AD s SQL Database
  • Připojení SQL Database z Visual Studio pomocí ověřování Azure AD