Share via


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

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

Az Azure Database for MySQL-hez irányuló alkalmazáskéréseket hitelesíteni kell. Az Azure Database for MySQL számos különböző módszert kínál az alkalmazások biztonságos csatlakozá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 hitelesíti magát az Azure Database for MySQL-ben, egy felhasználónevet és egy jelszópárt biztosít az adatbázishoz való csatlakozáshoz. 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 MySQL-hitelesítés.

Microsoft Entra authentication

A Microsoft Entra-hitelesítés az Azure Database for MySQL-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 MySQL-adatbázis felhasználóival hitelesíti az identitásokat az adatbázis szintjén.
  • Az Azure Database for MySQL-hez csatlakozó alkalmazások jogkivonatalapú hitelesítésének támogatása.

MySQL-hitelesítés

A MySQL-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 MySQL-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 MySQL-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_MYSQL_AD_NON_ADMIN_USERNAME=<YOUR_AZURE_AD_NON_ADMIN_USER_DISPLAY_NAME>
export AZ_MYSQL_AD_MI_USERNAME=<YOUR_AZURE_AD_MI_DISPLAY_NAME>
export AZ_USER_IDENTITY_NAME=<YOUR_USER_ASSIGNED_MANAGEMED_IDENTITY_NAME>
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)

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 MySQL-kiszolgáló neve, amelynek egyedinek kell lennie az Azure-ban.
  • <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_AZURE_AD_MI_DISPLAY_NAME>: A Microsoft Entra-felhasználó megjelenített neve a felügyelt identitáshoz. Győződjön meg arról, hogy a név érvényes felhasználó a Microsoft Entra-bérlőben.
  • <YOUR_USER_ASSIGNED_MANAGEMED_IDENTITY_NAME>: A felhasználó által hozzárendelt felügyelt identitáskiszolgáló neve, amelynek egyedinek kell lennie az Azure-ban.

1) Az Azure Database for MySQL 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 MySQL-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 Azure CLI-t használ, futtassa a következő parancsot, hogy meggyőződjön arról, hogy rendelkezik-e megfelelő engedéllyel:

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

Futtassa a következő parancsot a felhasználói identitás létrehozásához a hozzárendeléshez:

az identity create \
    --resource-group $AZ_RESOURCE_GROUP \
    --name $AZ_USER_IDENTITY_NAME

Fontos

A felhasználó által hozzárendelt identitás létrehozása után kérje meg a globális Rendszergazda istratort vagy a Privileged Role Rendszergazda istratort, hogy adja meg az alábbi engedélyeket ehhez az identitáshoz: User.Read.All, GroupMember.Read.Allés Application.Read.ALL. További információ: Az Active Directory-hitelesítés Engedélyek szakasza.

Futtassa a következő parancsot az identitás hozzárendeléséhez a MySQL-kiszolgálóhoz a Microsoft Entra-rendszergazda létrehozásához:

az mysql flexible-server identity assign \
    --resource-group $AZ_RESOURCE_GROUP \
    --server-name $AZ_DATABASE_SERVER_NAME \
    --identity $AZ_USER_IDENTITY_NAME

Ezután futtassa a következő parancsot a Microsoft Entra rendszergazdájának beállításához:

az mysql flexible-server ad-admin create \
    --resource-group $AZ_RESOURCE_GROUP \
    --server-name $AZ_DATABASE_SERVER_NAME \
    --display-name $CURRENT_USERNAME \
    --object-id $CURRENT_USER_OBJECTID \
    --identity $AZ_USER_IDENTITY_NAME

Ez a parancs a Microsoft Entra rendszergazdát az aktuális bejelentkezett felhasználóra állítja.

Megjegyzés:

MySQL-kiszolgálónként csak egy Microsoft Entra-rendszergazda hozható létre. Ha kiválaszt egy másikat, felülírja a kiszolgálóhoz konfigurált Meglévő Microsoft Entra-rendszergazdat.

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

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

Az Azure Database for MySQL-példányok alapértelmezés szerint védettek. Tűzfallal rendelkezik, amely semmilyen bejövő kapcsolatot sem engedélyez.

Ezt a lépést kihagyhatja, ha Basht használ, mert a flexible-server create parancs már észlelte a helyi IP-címet, és beállította a MySQL-kiszolgálón.

Ha windowsos számítógépen Linuxos Windows-alrendszer (WSL) keresztül csatlakozik a MySQL-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 mysql server firewall-rule create \
    --resource-group $AZ_RESOURCE_GROUP \
    --name $AZ_DATABASE_SERVER_NAME-database-allow-local-ip-wsl \
    --server $AZ_DATABASE_SERVER_NAME \
    --start-ip-address $AZ_WSL_IP_ADDRESS \
    --end-ip-address $AZ_WSL_IP_ADDRESS \
    --output tsv

2.2) Hozzon létre egy nem rendszergazdai MySQL-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.sql nevű SQL-szkriptet nem rendszergazdai felhasználó létrehozásához. Adja hozzá a következő tartalmat, és mentse helyileg:

export AZ_MYSQL_AD_NON_ADMIN_USERID=$(az ad signed-in-user show --query id --output tsv)

cat << EOF > create_ad_user.sql
SET aad_auth_validate_oids_in_tenant = OFF;
CREATE AADUSER '$AZ_MYSQL_AD_NON_ADMIN_USERNAME' IDENTIFIED BY '$AZ_MYSQL_AD_NON_ADMIN_USERID';
GRANT ALL PRIVILEGES ON $AZ_DATABASE_NAME.* TO '$AZ_MYSQL_AD_NON_ADMIN_USERNAME'@'%';
FLUSH privileges;
EOF

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

mysql -h $AZ_DATABASE_SERVER_NAME.mysql.database.azure.com --user $CURRENT_USERNAME --enable-cleartext-plugin --password=$(az account get-access-token --resource-type oss-rdbms --output tsv --query accessToken) < create_ad_user.sql

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

rm create_ad_user.sql

Megjegyzés:

A MySQL-felhasználók létrehozásáról az Azure Database for MySQL-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 MySQL-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 MySQL 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 MySQL-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:mysql://$AZ_DATABASE_SERVER_NAME.mysql.database.azure.com:3306/$AZ_DATABASE_NAME?serverTimezone=UTC&sslMode=REQUIRED&defaultAuthenticationPlugin=com.azure.identity.extensions.jdbc.mysql.AzureMysqlAuthenticationPlugin&authenticationPlugins=com.azure.identity.extensions.jdbc.mysql.AzureMysqlAuthenticationPlugin
    user=$AZ_MYSQL_AD_NON_ADMIN_USERNAME
    

    Megjegyzés:

    Ha az osztályt MysqlConnectionPoolDataSource használja adatforrásként az alkalmazásban, mindenképpen távolítsa el defaultAuthenticationPlugin=com.azure.identity.extensions.jdbc.mysql.AzureMysqlAuthenticationPlugin az URL-címet.

    url=jdbc:mysql://$AZ_DATABASE_SERVER_NAME.mysql.database.azure.com:3306/$AZ_DATABASE_NAME?serverTimezone=UTC&sslMode=REQUIRED&authenticationPlugins=com.azure.identity.extensions.jdbc.mysql.AzureMysqlAuthenticationPlugin
    user=$AZ_MYSQL_AD_NON_ADMIN_USERNAME
    
  3. Cserélje le az egy $AZ_DATABASE_SERVER_NAME változót, egy változót $AZ_DATABASE_NAME és egy változót $AZ_MYSQL_AD_NON_ADMIN_USERNAME a cikk elején konfigurált értékekre.

  4. Távolítsa el a password JDBC URL-címét.

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 MySQL-példány eléréséhez hozzárendelt felügyelt identitásnak.

Ezek a lépések létrehoznak egy Microsoft Entra-felhasználót a felügyelt identitáshoz, és minden engedélyt megadnak az adatbázis $AZ_DATABASE_NAME számára. Az adatbázis nevét $AZ_DATABASE_NAME az igényeinek megfelelően módosíthatja.

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

export AZ_MYSQL_AD_MI_USERID=$(az ad sp show --id $AZ_MI_OBJECT_ID --query appId --output tsv)

cat << EOF > create_ad_user.sql
SET aad_auth_validate_oids_in_tenant = OFF;
CREATE AADUSER '$AZ_MYSQL_AD_MI_USERNAME' IDENTIFIED BY '$AZ_MYSQL_AD_MI_USERID';
GRANT ALL PRIVILEGES ON $AZ_DATABASE_NAME.* TO '$AZ_MYSQL_AD_MI_USERNAME'@'%';
FLUSH privileges;
EOF

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

mysql -h $AZ_DATABASE_SERVER_NAME.mysql.database.azure.com --user $CURRENT_USERNAME --enable-cleartext-plugin --password=$(az account get-access-token --resource-type oss-rdbms --output tsv --query accessToken) < create_ad_user.sql

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

rm create_ad_user.sql

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 MySQL-hez.

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

properties.put("user", "$AZ_MYSQL_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 MySQL-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: