Migrace aplikace pro použití bez hesel s Využitím služby Azure Database for PostgreSQL

Tento článek vysvětluje, jak migrovat z tradičních metod ověřování na bezpečnější připojení bez hesla pomocí Služby Azure Database for PostgreSQL.

Žádosti o aplikace do služby Azure Database for PostgreSQL musí být ověřeny. Azure Database for PostgreSQL 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 Database for PostgreSQL, poskytne pár uživatelského jména a hesla pro připojení databáze. 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í PostgreSQL.

Ověřování Microsoft Entra

Ověřování Microsoft Entra je mechanismus pro připojení ke službě Azure Database for PostgreSQL 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 PostgreSQL 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 Database for PostgreSQL

Ověřování PostgreSQL

V PostgreSQL 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 user tabulce. Vzhledem k tomu, že tato hesla jsou uložená v PostgreSQL, musíte spravovat rotaci hesel sami.

I když se můžete připojit ke službě Azure Database for PostgreSQL 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.

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 AZ_POSTGRESQL_AD_NON_ADMIN_USERNAME=<YOUR_AZURE_AD_NON_ADMIN_USER_DISPLAY_NAME>
export AZ_LOCAL_IP_ADDRESS=<YOUR_LOCAL_IP_ADDRESS>
export CURRENT_USERNAME=$(az ad signed-in-user show --query userPrincipalName --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 serveru PostgreSQL. Měl by být jedinečný v rámci Azure.
  • <YOUR_AZURE_AD_NON_ADMIN_USER_DISPLAY_NAME>: Zobrazované jméno uživatele Microsoft Entra, který není správcem. Ujistěte se, že je jméno platným uživatelem ve vašem tenantovi Microsoft Entra.
  • <YOUR_LOCAL_IP_ADDRESS>: IP adresa místního počítače, ze kterého spustíte aplikaci Spring Boot. Jedním z pohodlných způsobů, jak ji najít, je otevřít whatismyip.akamai.com.

1) Konfigurace služby Azure Database for PostgreSQL

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

Pokud chcete s Azure Database for PostgreSQL používat přístup k ID Microsoft Entra, 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 chcete po vytvoření serveru nastavit správce Microsoft Entra, postupujte podle pokynů v tématu Správa rolí Microsoft Entra na flexibilním serveru Azure Database for PostgreSQL.

Poznámka:

Flexibilní server PostgreSQL může vytvořit více správců Microsoft Entra.

2) Konfigurace služby Azure Database for PostgreSQL pro místní vývoj

2.1) Konfigurace pravidla brány firewall pro místní IP adresu

Instance Azure Database for PostgreSQL jsou ve výchozím nastavení zabezpečené. Obsahuje bránu firewall, která nepovoluje žádné příchozí připojení. Abyste mohli databázi používat, musíte přidat pravidlo brány firewall, které umožní přístup k databázovému serveru místní IP adresou.

Vzhledem k tomu, že jste na začátku tohoto článku nakonfigurovali místní IP adresu, můžete bránu firewall serveru otevřít spuštěním následujícího příkazu:

az postgres flexible-server firewall-rule create \
    --resource-group $AZ_RESOURCE_GROUP \
    --name $AZ_DATABASE_SERVER_NAME \
    --rule-name $AZ_DATABASE_SERVER_NAME-database-allow-local-ip \
    --start-ip-address $AZ_LOCAL_IP_ADDRESS \
    --end-ip-address $AZ_LOCAL_IP_ADDRESS \
    --output tsv

Pokud se připojujete k serveru PostgreSQL z Subsystém Windows pro Linux (WSL) na počítači s Windows, musíte do brány firewall přidat ID hostitele WSL.

Získejte IP adresu hostitelského počítače spuštěním následujícího příkazu ve WSL:

cat /etc/resolv.conf

Zkopírujte IP adresu za termínem nameservera pak pomocí následujícího příkazu nastavte proměnnou prostředí pro IP adresu WSL:

export AZ_WSL_IP_ADDRESS=<the-copied-IP-address>

Pak pomocí následujícího příkazu otevřete bránu firewall serveru pro vaši aplikaci založenou na WSL:

az postgres flexible-server firewall-rule create \
    --resource-group $AZ_RESOURCE_GROUP \
    --name $AZ_DATABASE_SERVER_NAME \
    --rule-name $AZ_DATABASE_SERVER_NAME-database-allow-local-ip \
    --start-ip-address $AZ_WSL_IP_ADDRESS \
    --end-ip-address $AZ_WSL_IP_ADDRESS \
    --output tsv

2.2) Vytvoření uživatele bez oprávnění správce PostgreSQL a udělení oprávnění

Dále vytvořte uživatele Microsoft Entra, který není správcem, a udělte mu všechna oprávnění k $AZ_DATABASE_NAME databázi. Název $AZ_DATABASE_NAME databáze můžete změnit tak, aby vyhovoval vašim potřebám.

Vytvořte skript SQL s názvem create_ad_user_local.sql pro vytvoření uživatele bez oprávnění správce. Přidejte následující obsah a uložte ho místně:

cat << EOF > create_ad_user_local.sql
select * from pgaadauth_create_principal('$AZ_POSTGRESQL_AD_NON_ADMIN_USERNAME', false, false);
EOF

Potom pomocí následujícího příkazu spusťte skript SQL a vytvořte uživatele Microsoft Entra bez oprávnění správce:

psql "host=$AZ_DATABASE_SERVER_NAME.postgres.database.azure.com user=$CURRENT_USERNAME dbname=postgres port=5432 password=$(az account get-access-token --resource-type oss-rdbms --output tsv --query accessToken) sslmode=require" < create_ad_user_local.sql

Teď pomocí následujícího příkazu odeberte dočasný soubor skriptu SQL:

rm create_ad_user_local.sql

Poznámka:

Podrobnější informace o vytváření uživatelů PostgreSQL najdete v tématu Vytváření uživatelů ve službě Azure Database for PostgreSQL.

3) Přihlaste se a migrujte kód aplikace tak, aby používal připojení bez hesla.

V případě místního vývoje se ujistěte, že jste ověřeni pomocí stejného účtu Microsoft Entra, ke kterému jste přiřadili roli ve službě PostgreSQL. Ověřování můžete provést prostřednictvím Azure CLI, sady Visual Studio, Azure PowerShellu nebo jiných nástrojů, jako je IntelliJ.

Přihlaste se k Azure přes Azure CLI pomocí následujícího příkazu:

az login

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-extensions . Tato knihovna obsahuje všechny entity potřebné k implementaci připojení bez hesla.

    <dependency>
        <groupId>com.azure</groupId>
        <artifactId>azure-identity-extensions</artifactId>
        <version>1.0.0</version>
    </dependency>
    
  2. Povolte ověřovací modul plug-in Azure PostgreSQL v adrese URL JDBC. Identifikujte umístění v kódu, která aktuálně vytvářejí připojení ke službě java.sql.Connection Azure Database for PostgreSQL. Aktualizujte urlsoubor application.properties a user v souboru application.properties tak, aby odpovídaly následujícím hodnotám:

    url=jdbc:postgresql://$AZ_DATABASE_SERVER_NAME.postgres.database.azure.com:5432/$AZ_DATABASE_NAME?sslmode=require&authenticationPluginClassName=com.azure.identity.extensions.jdbc.postgresql.AzurePostgresqlAuthenticationPlugin
    user=$AZ_POSTGRESQL_AD_NON_ADMIN_USERNAME
    
  3. $AZ_POSTGRESQL_AD_NON_ADMIN_USERNAME Nahraďte dvě $AZ_DATABASE_SERVER_NAME proměnné hodnotou, kterou jste nakonfigurovali na začátku tohoto článku.

Místní spuštění aplikace

Po provedení těchto změn kódu spusťte aplikaci místně. Pokud jste přihlášení k kompatibilnímu integrovanému vývojovému prostředí nebo nástroji příkazového řádku, jako je Azure CLI, Visual Studio nebo IntelliJ, měla by nová konfigurace vyzvednout vaše místní přihlašovací údaje. Role, které jste přiřadili místnímu vývojovému uživateli v Azure, umožní vaší aplikaci připojit se ke službě Azure místně.

4) Konfigurace hostitelského prostředí Azure

Jakmile je vaše aplikace nakonfigurovaná tak, aby používala připojení bez hesla a běží místně, 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 PostgreSQL. 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 jiný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 přiřadili pro přístup k vaší instanci PostgreSQL.

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

Před nasazením aplikace do hostitelského prostředí je potřeba provést další změnu kódu, protože se aplikace bude připojovat k PostgreSQL pomocí uživatele vytvořeného pro spravovanou identitu.

Aktualizujte kód tak, aby používal uživatele vytvořeného pro spravovanou identitu:

Poznámka:

Pokud jste použili příkaz Service Připojení or, přeskočte tento krok.

properties.put("user", "$AZ_POSTGRESQL_AD_MI_USERNAME");

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 PostgreSQL. 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í: