Migrace aplikace v Javě pro použití bez hesel s Azure SQL Database

Tento článek vysvětluje, jak migrovat z tradičních metod ověřování na bezpečnější připojení bez hesel pomocí Azure SQL Database.

Žádosti o aplikace do služby Azure SQL Database musí být ověřeny. Azure SQL Database nabízí několik různých způsobů, jak se aplikace bezpečně připojit. Jedním ze způsobů je použití hesel. Pokud je to však možné, měli byste upřednostnit připojení bez hesla ve vašich aplikacích.

Porovnání možností ověřování

Když se aplikace ověří ve službě Azure SQL Database, poskytne pár uživatelského jména a hesla pro připojení k databázi. V závislosti na tom, kde jsou identity uložené, existují dva typy ověřování: ověřování Microsoft Entra a ověřování Azure SQL Database.

Ověřování Microsoft Entra

Ověřování Microsoft Entra je mechanismus pro připojení ke službě Azure SQL Database pomocí identit definovaných v MICROSOFT Entra ID. Pomocí ověřování Microsoft Entra můžete spravovat identity uživatelů databáze a další služby Microsoft v centrálním umístění, což zjednodušuje správu oprávnění.

Použití ID Microsoft Entra pro ověřování poskytuje následující výhody:

  • Jednotné ověřování uživatelů ve službách Azure
  • Správa zásad hesel a obměně hesel na jednom místě
  • Více forem ověřování, které podporuje ID Microsoft Entra, což může eliminovat potřebu ukládat hesla.
  • Zákazníci můžou spravovat oprávnění k databázi pomocí externích skupin (Microsoft Entra ID).
  • Ověřování Microsoft Entra používá uživatele databáze Azure SQL k ověřování identit na úrovni databáze.
  • Podpora ověřování na základě tokenů pro aplikace připojující se ke službě Azure SQL Database

Ověřování azure SQL Database

V Azure SQL Database můžete vytvářet účty. Pokud se rozhodnete používat hesla jako přihlašovací údaje pro účty, budou tyto přihlašovací údaje uloženy v sys.database_principals tabulce. Vzhledem k tomu, že tato hesla jsou uložená ve službě Azure SQL Database, je potřeba spravovat rotaci hesel sami.

I když se můžete připojit ke službě Azure SQL Database pomocí hesel, měli byste je používat opatrně. Musíte být usilovní, abyste nikdy nezpřístupnili hesla v nezabezpečeném umístění. Každý, kdo získá přístup k heslům, se může ověřit. Existuje například riziko, že uživatel se zlými úmysly může získat přístup k aplikaci, pokud se připojovací řetězec omylem přihlásí ke správě zdrojového kódu, odešle se prostřednictvím nezabezpečeného e-mailu, vloží do nesprávného chatu nebo ho někdo, kdo by neměl mít oprávnění. Místo toho zvažte aktualizaci aplikace tak, aby používala připojení bez hesla.

Představujeme připojení bez hesla

S připojením bez hesla se můžete připojit ke službám Azure, aniž byste museli ukládat přihlašovací údaje v kódu aplikace, jeho konfiguračních souborech nebo v proměnných prostředí.

Mnoho služeb Azure podporuje připojení bez hesla, například prostřednictvím spravované identity Azure. Tyto techniky poskytují robustní funkce zabezpečení, které můžete implementovat pomocí DefaultAzureCredential z klientských knihoven identit Azure. V tomto kurzu se dozvíte, jak aktualizovat existující aplikaci tak, aby používala DefaultAzureCredential místo alternativ, jako jsou připojovací řetězec.

DefaultAzureCredential podporuje více metod ověřování a automaticky určuje, které metody by se měly používat za běhu. Tento přístup umožňuje vaší aplikaci používat různé metody ověřování v různých prostředích (místní vývoj a produkční prostředí) bez implementace kódu specifického pro prostředí.

Pořadí a umístění, ve kterých DefaultAzureCredential se hledají přihlašovací údaje, najdete v přehledu knihovny identit Azure. Pokud například pracujete místně, bude se obecně ověřovat pomocí účtu, DefaultAzureCredential který vývojář použil k přihlášení k sadě Visual Studio. Po nasazení aplikace do Azure DefaultAzureCredential se automaticky přepne na použití spravované identity. Pro tento přechod nejsou vyžadovány žádné změny kódu.

Pokud chcete zajistit, aby připojení byla bez hesla, musíte vzít v úvahu místní vývoj i produkční prostředí. Pokud se připojovací řetězec vyžaduje na jiném místě, aplikace není bez hesla.

V místním vývojovém prostředí se můžete ověřit pomocí Azure CLI, Azure PowerShellu, sady Visual Studio nebo modulů plug-in Azure pro Visual Studio Code nebo IntelliJ. V takovém případě můžete místo konfigurace vlastností použít tyto přihlašovací údaje ve vaší aplikaci.

Když nasadíte aplikace do hostitelského prostředí Azure, jako je virtuální počítač, můžete v tomto prostředí přiřadit spravovanou identitu. Pak nebudete muset zadávat přihlašovací údaje pro připojení ke službám Azure.

Poznámka:

Spravovaná identita poskytuje identitu zabezpečení, která představuje aplikaci nebo službu. Identitu spravuje platforma Azure a nevyžaduje, abyste zřizovali nebo rotovali tajné kódy. Další informace o spravovaných identitách najdete v přehledové dokumentaci.

Poznámka:

Vzhledem k tomu, že ovladač JDBC pro Azure SQL Database zatím nepodporuje připojení bez hesla z místních prostředí, tento článek se zaměří jenom na aplikace nasazené do hostitelských prostředí Azure a na to, jak je migrovat na používání bez hesel.

Migrace existující aplikace pro použití připojení bez hesla

Následující postup vysvětluje, jak migrovat existující aplikaci tak, aby místo řešení založeného na heslech používala připojení bez hesla.

0) Příprava pracovního prostředí

Nejprve pomocí následujícího příkazu nastavte některé proměnné prostředí.

export AZ_RESOURCE_GROUP=<YOUR_RESOURCE_GROUP>
export AZ_DATABASE_SERVER_NAME=<YOUR_DATABASE_SERVER_NAME>
export AZ_DATABASE_NAME=demo
export CURRENT_USERNAME=$(az ad signed-in-user show --query userPrincipalName --output tsv)
export CURRENT_USER_OBJECTID=$(az ad signed-in-user show --query id --output tsv)

Zástupné symboly nahraďte následujícími hodnotami, které se používají v tomto článku:

  • <YOUR_RESOURCE_GROUP>: Název skupiny prostředků, ve které jsou vaše prostředky.
  • <YOUR_DATABASE_SERVER_NAME>: Název vašeho serveru Azure SQL Database. Měl by být jedinečný v rámci Azure.

1) Konfigurace služby Azure SQL Database

1.1) Povolení ověřování založeného na ID microsoftu Entra

Pokud chcete používat přístup k MICROSOFT Entra ID se službou Azure SQL Database, měli byste nejprve nastavit uživatele správce Microsoft Entra. Pouze uživatel Microsoft Entra Správa může vytvářet nebo povolovat uživatele pro ověřování založené na ID Microsoft Entra.

Pokud používáte Azure CLI, spusťte následující příkaz, abyste měli jistotu, že má dostatečná oprávnění:

az login --scope https://graph.microsoft.com/.default

Potom spuštěním následujícího příkazu nastavte správce Microsoft Entra:

az sql server ad-admin create \
    --resource-group $AZ_RESOURCE_GROUP \
    --server $AZ_DATABASE_SERVER_NAME \
    --display-name $CURRENT_USERNAME \
    --object-id $CURRENT_USER_OBJECTID

Tento příkaz nastaví správce Microsoft Entra na aktuální přihlášeného uživatele.

Poznámka:

Na server Azure SQL Database můžete vytvořit pouze jednoho správce Microsoft Entra. Výběr jiného přepíše stávající správce Microsoft Entra nakonfigurovaný pro server.

2) Migrace kódu aplikace pro použití připojení bez hesla

Dále pomocí následujících kroků aktualizujte kód tak, aby používal připojení bez hesla. I když jsou koncepčně podobné, každý jazyk používá různé podrobnosti implementace.

  1. Do projektu přidejte do balíčku následující odkaz azure-identity . Tato knihovna obsahuje všechny entity potřebné k implementaci připojení bez hesla.

    <dependency>
         <groupId>com.azure</groupId>
         <artifactId>azure-identity</artifactId>
         <version>1.5.4</version>
    </dependency>
    
  2. Povolte ověřování spravované identity Microsoft Entra v adrese URL.v JDBC.v Identifikujte umístění v kódu, která aktuálně vytvářejí připojení java.sql.Connection k Azure SQL Database. Aktualizujte kód tak, aby odpovídal následujícímu příkladu:

    String url = "jdbc:sqlserver://$AZ_DATABASE_SERVER_NAME.database.windows.net:1433;databaseName=$AZ_DATABASE_NAME;authentication=ActiveDirectoryMSI;"   
    Connection con = DriverManager.getConnection(url);
    
  3. Nahraďte dvě $AZ_DATABASE_SERVER_NAME proměnné a jednu $AZ_DATABASE_NAME proměnnou hodnotami, které jste nakonfigurovali na začátku tohoto článku.

  4. user Odeberte adresu URL JDBC a password z adresy URL.

3) Konfigurace hostitelského prostředí Azure

Jakmile je vaše aplikace nakonfigurovaná tak, aby používala připojení bez hesla, může se stejný kód po nasazení do Azure ověřit ve službách Azure. Například aplikace nasazená do instance služby Aplikace Azure, která má přiřazenou spravovanou identitu, se může připojit ke službě Azure Storage.

V této části provedete dva kroky, které vaší aplikaci umožní spouštět v hostitelském prostředí Azure bez hesla:

  • Přiřaďte spravovanou identitu pro hostitelské prostředí Azure.
  • Přiřaďte spravované identitě role.

Poznámka:

Azure také poskytuje service Připojení or, který vám může pomoct s propojením hostitelské služby s SQL Serverem. Pomocí nástroje Service Připojení or pro konfiguraci hostitelského prostředí můžete vynechat krok přiřazování rolí spravované identitě, protože služba Připojení or to udělá za vás. Následující část popisuje, jak nakonfigurovat hostitelské prostředí Azure dvěma způsoby: jedno prostřednictvím služby Připojení or a druhé konfigurací každého hostitelského prostředí přímo.

Důležité

Příkazy služby Připojení or vyžadují Azure CLI 2.41.0 nebo vyšší.

Přiřazení spravované identity pomocí webu Azure Portal

Následující kroky ukazují, jak přiřadit spravovanou identitu přiřazenou systémem pro různé služby hostování webů. Spravovaná identita se může bezpečně připojit k dalším službám Azure pomocí konfigurací aplikací, které jste nastavili dříve.

  1. Na hlavní stránce přehledu vaší instance služby Aplikace Azure vyberte v navigačním podokně identitu.

  2. Na kartě Přiřazený systém nezapomeňte nastavit pole Stav na zapnuto. Identitu přiřazenou systémem spravuje Azure interně a zpracovává úlohy správy za vás. Podrobnosti a ID identity se ve vašem kódu nikdy nezpřístupní.

    Screenshot of Azure portal Identity page of App Service resource with System assigned tab showing and Status field highlighted.

Spravovanou identitu můžete také přiřadit v hostitelském prostředí Azure pomocí Azure CLI.

Spravovanou identitu můžete přiřadit instanci služby Aplikace Azure pomocí příkazu az webapp identity assign, jak je znázorněno v následujícím příkladu:

export AZ_MI_OBJECT_ID=$(az webapp identity assign \
    --resource-group $AZ_RESOURCE_GROUP \
    --name <service-instance-name> \
    --query principalId \
    --output tsv)

Přiřazení rolí ke spravované identitě

Dále udělte oprávnění spravované identitě, kterou jste vytvořili pro přístup k vaší databázi SQL.

Pokud jste služby připojili pomocí service Připojení or, příkazy předchozího kroku už roli přiřadily, takže tento krok můžete přeskočit.

Otestování aplikace

Po provedení těchto změn kódu můžete aplikaci sestavit a znovu nasadit. Pak přejděte do hostované aplikace v prohlížeči. Vaše aplikace by se měla úspěšně připojit k databázi Azure SQL. Mějte na paměti, že rozšíření přiřazení rolí v prostředí Azure může trvat několik minut. Vaše aplikace je teď nakonfigurovaná tak, aby běžela místně i v produkčním prostředí, aniž by vývojáři museli spravovat tajné kódy v samotné aplikaci.

Další kroky

V tomto kurzu jste zjistili, jak migrovat aplikaci na připojení bez hesla.

Podrobnější informace o konceptech probíraných v tomto článku najdete v následujících zdrojích informací: