Share via


Alkalmazás migrálása jelszó nélküli kapcsolatok használatára az Azure Database for PostgreSQL-lel

Ez a cikk bemutatja, hogyan migrálhat a hagyományos hitelesítési módszerekről az Azure Database for PostgreSQL biztonságosabb, jelszó nélküli kapcsolataira.

Az Azure Database for PostgreSQL-hez irányuló alkalmazáskéréseket hitelesíteni kell. Az Azure Database for PostgreSQL számos különböző módszert kínál az alkalmazások biztonságos csatlakoztatására. Az egyik módszer a jelszavak használata. Lehetőség szerint azonban fontossági sorrendbe kell helyeznie a jelszó nélküli kapcsolatokat az alkalmazásokban.

Hitelesítési beállítások összehasonlítása

Amikor az alkalmazás az Azure Database for PostgreSQL-lel hitelesít, egy felhasználónév- és jelszópárt biztosít az adatbázis csatlakoztatásához. Az identitások tárolási helyétől függően kétféle hitelesítés létezik: Microsoft Entra-hitelesítés és PostgreSQL-hitelesítés.

Microsoft Entra authentication

A Microsoft Entra-hitelesítés az Azure Database for PostgreSQL-hez való csatlakozás mechanizmusa a Microsoft Entra ID-ban meghatározott identitások használatával. A Microsoft Entra-hitelesítéssel központi helyen kezelheti az adatbázis felhasználói identitásait és más Microsoft-szolgáltatások, ami leegyszerűsíti az engedélykezelést.

A Microsoft Entra ID hitelesítéshez való használata a következő előnyöket nyújtja:

  • A felhasználók hitelesítése az Azure Servicesben egységes módon.
  • Jelszószabályzatok és jelszóváltás kezelése egyetlen helyen.
  • A Microsoft Entra ID által támogatott hitelesítés több formája, amelyek szükségtelenné tehetik a jelszavak tárolását.
  • Az ügyfelek külső (Microsoft Entra ID) csoportokkal kezelhetik az adatbázis-engedélyeket.
  • A Microsoft Entra-hitelesítés a PostgreSQL-adatbázis felhasználóival hitelesíti az identitásokat az adatbázis szintjén.
  • Az Azure Database for PostgreSQL-hez csatlakozó alkalmazások jogkivonatalapú hitelesítésének támogatása.

PostgreSQL-hitelesítés

A PostgreSQL-ben létrehozhat fiókokat. Ha jelszavakat használ a fiókok hitelesítő adataiként, ezeket a hitelesítő adatokat a rendszer a user táblában tárolja. Mivel ezek a jelszavak a PostgreSQL-ben vannak tárolva, saját maga kell kezelnie a jelszavak rotálását.

Bár jelszóval is csatlakozhat az Azure Database for PostgreSQL-hez, körültekintően kell használnia őket. Szorgalmasnak kell lennie, hogy soha ne tegye elérhetővé a jelszavakat nem biztonságos helyen. Bárki, aki hozzáfér a jelszavakhoz, hitelesítheti magát. Fennáll például annak a veszélye, hogy egy rosszindulatú felhasználó hozzáférhet az alkalmazáshoz, ha egy kapcsolati sztring véletlenül be van jelentkezve a forrásvezérlőbe, nem biztonságos e-mailben küldi el, nem megfelelő csevegésbe illeszti be, vagy olyan személy tekinti meg, akinek nem kellene engedéllyel rendelkeznie. Ehelyett fontolja meg az alkalmazás jelszó nélküli kapcsolatok használatára való frissítését.

Jelszó nélküli kapcsolatok bemutatása

Jelszó nélküli kapcsolattal anélkül csatlakozhat az Azure-szolgáltatásokhoz, hogy az alkalmazáskódban, annak konfigurációs fájljaiban vagy környezeti változóiban bármilyen hitelesítő adatot tárol.

Számos Azure-szolgáltatás támogatja a jelszó nélküli kapcsolatokat, például az Azure Managed Identity használatával. Ezek a technikák robusztus biztonsági funkciókat biztosítanak, amelyeket az Azure Identity-ügyfélkódtárak DefaultAzureCredential használatával valósíthat meg. Ebben az oktatóanyagban megtanulhatja, hogyan frissíthet egy meglévő alkalmazást, hogy alternatív megoldások, például kapcsolati sztring helyett használjonDefaultAzureCredential.

DefaultAzureCredential több hitelesítési módszert támogat, és automatikusan meghatározza, hogy melyiket érdemes futtatókörnyezetben használni. Ez a megközelítés lehetővé teszi, hogy az alkalmazás különböző hitelesítési módszereket használjon különböző környezetekben (helyi fejlesztés és éles környezet) környezetspecifikus kód implementálása nélkül.

A hitelesítő adatok keresésének sorrendje és helyei DefaultAzureCredential megtalálhatók az Azure Identity Library áttekintésében. Ha például helyileg dolgozik, általában azzal a fiókkal hitelesít, DefaultAzureCredential amellyel a fejlesztő bejelentkezett a Visual Studióba. Az alkalmazás Azure-ban DefaultAzureCredential való üzembe helyezésekor automatikusan átvált felügyelt identitás használatára. Ehhez az áttűnéshez nincs szükség kódmódosításra.

Annak érdekében, hogy a kapcsolatok jelszó nélküliek legyenek, figyelembe kell vennie a helyi fejlesztést és az éles környezetet is. Ha mindkét helyen szükség van egy kapcsolati sztring, akkor az alkalmazás nem jelszó nélküli.

A helyi fejlesztési környezetben hitelesítheti magát az Azure CLI, az Azure PowerShell, a Visual Studio vagy a Visual Studio Code vagy az IntelliJ Azure beépülő moduljaival. Ebben az esetben ezt a hitelesítő adatot használhatja az alkalmazásban a tulajdonságok konfigurálása helyett.

Amikor alkalmazásokat helyez üzembe egy Azure-beli üzemeltetési környezetben, például egy virtuális gépen, hozzárendelhet felügyelt identitást ebben a környezetben. Ezután nem kell hitelesítő adatokat megadnia az Azure-szolgáltatásokhoz való csatlakozáshoz.

Megjegyzés:

A felügyelt identitás biztonsági identitást biztosít egy alkalmazás vagy szolgáltatás megjelenítéséhez. Az identitás kezelését az Azure-platform végzi, és nem szükséges hozzá semmilyen titkos kulcs kiosztása vagy rotálása. A felügyelt identitásokról az áttekintési dokumentációban olvashat bővebben.

Meglévő alkalmazás migrálása jelszó nélküli kapcsolatok használatára

Az alábbi lépések azt ismertetik, hogyan migrálhat egy meglévő alkalmazást jelszó nélküli kapcsolatok használatára jelszóalapú megoldás helyett.

0) A munkakörnyezet előkészítése

Először a következő paranccsal állítson be néhány környezeti változót.

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)

A helyőrzőket írja felül a következő értékekkel, amelyeket a cikk teljes további részében használni fogunk:

  • <YOUR_RESOURCE_GROUP>: Annak az erőforráscsoportnak a neve, amelyben az erőforrások találhatók.
  • <YOUR_DATABASE_SERVER_NAME>: A PostgreSQL-kiszolgáló neve. Az Azure-on belül egyedinek kell lennie.
  • <YOUR_AZURE_AD_NON_ADMIN_USER_DISPLAY_NAME>: A Microsoft Entra nem rendszergazdai felhasználójának megjelenített neve. Győződjön meg arról, hogy a név érvényes felhasználó a Microsoft Entra-bérlőben.
  • <YOUR_LOCAL_IP_ADDRESS>: A helyi számítógép IP-címe, amelyről a Spring Boot-alkalmazást fogja futtatni. Az egyik kényelmes módja annak, hogy megtalálja, hogy nyissa meg whatismyip.akamai.com.

1) Az Azure Database for PostgreSQL konfigurálása

1.1) A Microsoft Entra ID-alapú hitelesítésének engedélyezése

A Microsoft Entra ID-hozzáférésnek az Azure Database for PostgreSQL-hez való használatához először a Microsoft Entra rendszergazda felhasználóját kell beállítania. Csak egy Microsoft Entra Rendszergazda felhasználó hozhat létre/engedélyezhet felhasználókat a Microsoft Entra ID-alapú hitelesítéshez.

Ha a kiszolgáló létrehozása után microsoft entra-rendszergazdat szeretne beállítani, kövesse a Microsoft Entra-szerepkörök kezelése a rugalmas Azure Database for PostgreSQL-kiszolgálón című témakörben leírt lépéseket.

Megjegyzés:

A rugalmas PostgreSQL-kiszolgáló több Microsoft Entra-rendszergazdát is létrehozhat.

2) Az Azure Database for PostgreSQL konfigurálása helyi fejlesztéshez

2.1) Tűzfalszabály konfigurálása helyi IP-címhez

Az Azure Database for PostgreSQL-példányok alapértelmezés szerint védettek. Tűzfallal rendelkezik, amely semmilyen bejövő kapcsolatot sem engedélyez. Az adatbázis használatához hozzá kell adnia egy tűzfalszabályt, amely lehetővé teszi, hogy a helyi IP-cím hozzáférjen az adatbázis-kiszolgálóhoz.

Mivel a cikk elején konfigurálta a helyi IP-címet, az alábbi parancs futtatásával megnyithatja a kiszolgáló tűzfalát:

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

Ha windowsos számítógépen Linuxos Windows-alrendszer (WSL) keresztül csatlakozik a PostgreSQL-kiszolgálóhoz, hozzá kell adnia a WSL-gazdagép azonosítóját a tűzfalhoz.

Szerezze be a gazdagép IP-címét a következő parancs WSL-ben való futtatásával:

cat /etc/resolv.conf

Másolja ki az IP-címet a kifejezés nameserverután, majd az alábbi paranccsal állítson be környezeti változót a WSL IP-címéhez:

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

Ezután a következő paranccsal nyissa meg a kiszolgáló tűzfalát a WSL-alapú alkalmazás számára:

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) Hozzon létre egy nem rendszergazdai PostgreSQL-felhasználót, és adjon engedélyt

Ezután hozzon létre egy nem rendszergazdai Microsoft Entra-felhasználót, és adjon meg neki minden engedélyt az $AZ_DATABASE_NAME adatbázishoz. Az adatbázis nevét $AZ_DATABASE_NAME az igényeinek megfelelően módosíthatja.

Hozzon létre egy create_ad_user_local.sql nevű SQL-szkriptet nem rendszergazdai felhasználó létrehozásához. Adja hozzá a következő tartalmat, és mentse helyileg:

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

Ezután az alábbi paranccsal futtassa az SQL-szkriptet a Microsoft Entra nem rendszergazdai felhasználójának létrehozásához:

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

Most az alábbi paranccsal távolítsa el az ideiglenes SQL-szkriptfájlt:

rm create_ad_user_local.sql

Megjegyzés:

A PostgreSQL-felhasználók létrehozásáról az Azure Database for PostgreSQL-ben a Felhasználók létrehozása szolgáltatásban olvashat részletesebben.

3) Jelentkezzen be, és migrálja az alkalmazáskódot jelszó nélküli kapcsolatok használatára

A helyi fejlesztéshez győződjön meg arról, hogy ugyanazzal a Microsoft Entra-fiókkal van hitelesítve, amelyhez a szerepkört hozzárendelte a PostgreSQL-en. Hitelesítést az Azure CLI, a Visual Studio, az Azure PowerShell vagy más eszközök, például az IntelliJ használatával végezhet.

Jelentkezzen be az Azure-ba az Azure CLI-vel az alábbi paranccsal:

az login

Ezután a következő lépésekkel frissítse a kódot jelszó nélküli kapcsolatok használatára. Bár elméletileg hasonló, minden nyelv különböző megvalósítási részleteket használ.

  1. A projekten belül adja hozzá a következő hivatkozást a azure-identity-extensions csomaghoz. Ez a kódtár tartalmazza a jelszó nélküli kapcsolatok megvalósításához szükséges összes entitást.

    <dependency>
        <groupId>com.azure</groupId>
        <artifactId>azure-identity-extensions</artifactId>
        <version>1.0.0</version>
    </dependency>
    
  2. Engedélyezze az Azure PostgreSQL hitelesítési beépülő modult A JDBC URL-címében. Azonosítsa a kód azon helyeit, amelyek jelenleg létrehoznak egy java.sql.Connection , az Azure Database for PostgreSQL-hez való csatlakozáshoz szükséges helyet. Frissítse url és user az application.properties fájlban az alábbi értékeket:

    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. Cserélje le a $AZ_POSTGRESQL_AD_NON_ADMIN_USERNAME két $AZ_DATABASE_SERVER_NAME változót a cikk elején konfigurált értékre.

Az alkalmazás futtatása helyben

A kódmódosítások elvégzése után futtassa az alkalmazást helyileg. Az új konfigurációnak át kell vennie a helyi hitelesítő adatokat, ha egy kompatibilis IDE-be vagy parancssori eszközbe, például az Azure CLI-be, a Visual Studióba vagy az IntelliJ-be van bejelentkezve. A helyi fejlesztői felhasználóhoz az Azure-ban hozzárendelt szerepkörök lehetővé teszik, hogy az alkalmazás helyileg csatlakozzon az Azure-szolgáltatáshoz.

4) Az Azure-beli üzemeltetési környezet konfigurálása

Miután az alkalmazás jelszó nélküli kapcsolatok használatára lett konfigurálva, és helyileg fut, ugyanaz a kód hitelesíthető az Azure-szolgáltatásokban az Azure-szolgáltatásokban az Azure-ban való üzembe helyezés után. Egy felügyelt identitással rendelkező Azure-alkalmazás szolgáltatáspéldányon üzembe helyezett alkalmazás például csatlakozhat az Azure Storage-hoz.

Ebben a szakaszban két lépést kell végrehajtania, hogy az alkalmazás jelszó nélküli azure-beli üzemeltetési környezetben fusson:

  • Rendelje hozzá a felügyelt identitást az Azure-beli üzemeltetési környezethez.
  • Szerepkörök hozzárendelése a felügyelt identitáshoz.

Megjegyzés:

Az Azure szolgáltatás Csatlakozás or szolgáltatást is biztosít, amely segíthet csatlakoztatni az üzemeltetési szolgáltatást a PostgreSQL-hez. Ha a Service Csatlakozás or konfigurálja az üzemeltetési környezetet, kihagyhatja a szerepkörök felügyelt identitáshoz való hozzárendelésének lépését, mert a Service Csatlakozás or ezt megteszi Ön helyett. A következő szakasz azt ismerteti, hogyan konfigurálhatja az Azure-beli üzemeltetési környezetet kétféleképpen: az egyiket a Service Csatlakozás oron keresztül, a másikat pedig az egyes üzemeltetési környezetek közvetlen konfigurálásával.

Fontos

A szolgáltatás Csatlakozás or parancsaihoz az Azure CLI 2.41.0-s vagy újabb verziója szükséges.

Felügyelt identitás hozzárendelése az Azure Portalon

Az alábbi lépések bemutatják, hogyan rendelhet hozzá rendszer által hozzárendelt felügyelt identitást a különböző web hosting szolgáltatásokhoz. A felügyelt identitás biztonságosan csatlakozhat más Azure-szolgáltatásokhoz a korábban beállított alkalmazáskonfigurációk használatával.

  1. A Azure-alkalmazás szolgáltatáspéldány fő áttekintő lapján válassza az Identitás lehetőséget a navigációs panelen.

  2. A Rendszerhez rendelt lapon állítsa be az Állapot mezőt. A rendszer által hozzárendelt identitásokat az Azure belsőleg kezeli, és rendszergazdai feladatokat kezel Önnek. Az identitás részletei és azonosítói soha nem jelennek meg a kódban.

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

Felügyelt identitást is hozzárendelhet egy Azure-beli üzemeltetési környezethez az Azure CLI használatával.

Felügyelt identitást rendelhet egy Azure-alkalmazás szolgáltatáspéldányhoz az az webapp identity assign paranccsal, ahogyan az az alábbi példában látható:

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

Szerepkörök hozzárendelése a felügyelt identitáshoz

Ezután adjon engedélyeket a PostgreSQL-példány eléréséhez hozzárendelt felügyelt identitásnak.

Ha a Szolgáltatás Csatlakozás or használatával kapcsolta össze a szolgáltatásokat, az előző lépés parancsai már hozzárendelték a szerepkört, így kihagyhatja ezt a lépést.

Az alkalmazás tesztelése

Mielőtt üzembe helyezené az alkalmazást az üzemeltetési környezetben, még egy módosítást kell végeznie a kódon, mert az alkalmazás a felügyelt identitáshoz létrehozott felhasználóval fog csatlakozni a PostgreSQL-hez.

Frissítse a kódot a felügyelt identitáshoz létrehozott felhasználó használatára:

Megjegyzés:

Ha a Service Csatlakozás or parancsot használta, hagyja ki ezt a lépést.

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

A kódmódosítások elvégzése után létrehozhatja és újra üzembe helyezheti az alkalmazást. Ezután keresse meg az üzemeltetett alkalmazást a böngészőben. Az alkalmazásnak sikeresen csatlakoznia kell a PostgreSQL-adatbázishoz. Ne feledje, hogy eltarthat néhány percig, amíg a szerepkör-hozzárendelések propagálása az Azure-környezetben történik. Az alkalmazás mostantól úgy van konfigurálva, hogy helyileg és éles környezetben is fusson anélkül, hogy a fejlesztőknek titkos kulcsokat kellene kezelnie az alkalmazásban.

További lépések

Ebben az oktatóanyagban megtanulta, hogyan migrálhat egy alkalmazást jelszó nélküli kapcsolatokba.

A cikkben tárgyalt fogalmak részletesebb megismeréséhez olvassa el az alábbi forrásokat: