Python-alkalmazások hitelesítése az Azure-szolgáltatásokba a helyi fejlesztés során szolgáltatásnevek használatával

Felhőalkalmazások létrehozásakor a fejlesztőknek hibakeresést és tesztelést kell végezniük az alkalmazások helyi munkaállomásán. Ha egy alkalmazás egy fejlesztői munkaállomáson fut a helyi fejlesztés során, akkor is hitelesítenie kell az alkalmazás által használt Azure-szolgáltatásokban. Ez a cikk bemutatja, hogyan állíthat be dedikált alkalmazásszolgáltatás-egyszerű objektumokat a helyi fejlesztés során.

Egy diagram, amely bemutatja, hogy egy helyi fejlesztőben futó alkalmazás hogyan szerzi be az alkalmazásszolgáltatásnevet egy .env fájlból, majd hogyan használja ezt az identitást az Azure-erőforrásokhoz való csatlakozáshoz.

A helyi fejlesztéshez szükséges dedikált alkalmazásszolgáltatás-tagok lehetővé teszik a minimális jogosultság elvét az alkalmazásfejlesztés során. Mivel az engedélyek hatóköre pontosan az alkalmazáshoz szükséges a fejlesztés során, az alkalmazáskód nem fér hozzá véletlenül egy másik alkalmazás által használni kívánt Azure-erőforráshoz. Ez azt is megakadályozza, hogy hibák lépjenek fel az alkalmazás éles környezetbe való áthelyezésekor, mert az alkalmazás túlterjedt a fejlesztői környezetben.

Amikor az alkalmazás regisztrálva van az Azure-ban, az alkalmazáshoz egy alkalmazás-szolgáltatásnév van beállítva. A helyi fejlesztésre szánt alkalmazások regisztrálásakor a következőket javasoljuk:

  • Hozzon létre külön alkalmazásregisztrációkat az alkalmazáson dolgozó minden fejlesztő számára. Ez külön alkalmazásszolgáltatás-tagokat hoz létre az egyes fejlesztők számára, hogy a helyi fejlesztés során használják, és ne kelljen a fejlesztőknek megosztanak hitelesítő adatokat egyetlen alkalmazás-szolgáltatásnévhez.
  • Alkalmazásonként külön alkalmazásregisztrációkat hozhat létre. Ez csak az alkalmazás által igényelt engedélyekre terjed ki.

A helyi fejlesztés során a környezeti változók az application service principal identitásával vannak beállítva. A Pythonhoz készült Azure SDK beolvassa ezeket a környezeti változókat, és ezeket az információkat felhasználva hitelesíti az alkalmazást a szükséges Azure-erőforrásokon.

1 – Az alkalmazás regisztrálása az Azure-ban

Az alkalmazásszolgáltatás egyszerű objektumai alkalmazásregisztrációval jönnek létre az Azure-ban. Ez az Azure Portal vagy az Azure CLI használatával végezhető el.

Az Azure CLI-parancsok futtathatók az Azure Cloud Shellben vagy egy munkaállomáson, amelyen telepítve van az Azure CLI.

Először az az ad sp create-for-rbac paranccsal hozzon létre egy új szolgáltatásnevet az alkalmazáshoz. A parancs ugyanakkor létrehozza az alkalmazás regisztrációját is az alkalmazáshoz.

az ad sp create-for-rbac --name {service-principal-name}

A parancs kimenete a következőhöz hasonlóan fog kinézni. Jegyezze fel ezeket az értékeket, vagy tartsa nyitva ezt az ablakot, mivel a következő lépésekben szüksége lesz ezekre az értékekre, és nem fogja tudni újra megtekinteni a jelszó (titkos ügyfélkód) értékét. Később azonban hozzáadhat új jelszót anélkül, hogy szükség esetén érvénytelenítenék a szolgáltatásnevet vagy a meglévő jelszavakat.

{
  "appId": "00000000-0000-0000-0000-000000000000",
  "displayName": "{service-principal-name}",
  "password": "abcdefghijklmnopqrstuvwxyz",
  "tenant": "33333333-3333-3333-3333-333333333333"
}

2 – Microsoft Entra biztonsági csoport létrehozása helyi fejlesztéshez

Mivel általában több fejlesztő dolgozik egy alkalmazáson, javasoljuk, hogy hozzon létre egy Microsoft Entra biztonsági csoportot, amely beágyazza az alkalmazáshoz szükséges szerepköröket (engedélyeket) a helyi fejlesztés során, ahelyett, hogy az egyes szolgáltatásnév-objektumokhoz rendelné a szerepköröket. Ez a következő előnyöket kínálja:

  • Minden fejlesztőnek ugyanazok a szerepkörök lesznek hozzárendelve, mivel a szerepkörök csoportszinten vannak hozzárendelve.
  • Ha új szerepkörre van szükség az alkalmazáshoz, azt csak az alkalmazás Microsoft Entra csoportjához kell hozzáadni.
  • Ha egy új fejlesztő csatlakozik a csapathoz, egy új alkalmazásszolgáltatás-tag jön létre a fejlesztő számára, és hozzáadódik a csoporthoz, biztosítva, hogy a fejlesztő megfelelő engedélyekkel rendelkezik az alkalmazás használatához.

Az az ad group create paranccsal biztonsági csoportokat hozhat létre a Microsoft Entra ID-ban. A --display-name és a --main-nickname paraméterek kötelezőek. A csoportnak adott névnek az alkalmazás nevén kell alapulnia. Hasznos lehet egy "local-dev" kifejezést is belefoglalni a csoport nevére, hogy jelezze a csoport célját.

az ad group create \
    --display-name MyDisplay \
    --mail-nickname MyDisplay  \
    --description "<group-description>"

Másolja ki a id tulajdonság értékét a parancs kimenetében. Ez a csoport objektumazonosítója. A későbbi lépésekben szüksége lesz rá. A tulajdonság lekéréséhez használhatja az az ad group show parancsot is.

Ha tagokat szeretne hozzáadni a csoporthoz, szüksége van az alkalmazás-szolgáltatásnév objektumazonosítójára, amely eltér az alkalmazásazonosítótól. Az az ad sp listával listázhatja az elérhető szolgáltatásnevek listáját. A --filter paraméterparancs elfogadja az OData-stílusszűrőket, és a lista szűrésére használható az ábrán látható módon. A --query paraméter csak a fontos oszlopokra korlátozza az oszlopokat.

az ad sp list \
    --filter "startswith(displayName, 'msdocs')" \
    --query "[].{objectId:id, displayName:displayName}" \
    --output table

Az az ad group member add parancs ezután a tagok csoportokhoz való hozzáadására használható.

az ad group member add \
    --group <group-name> \
    --member-id <object-id>

Feljegyzés

Alapértelmezés szerint a Microsoft Entra biztonsági csoportok létrehozása a címtárban lévő bizonyos kiemelt szerepkörökre korlátozódik. Ha nem tud csoportot létrehozni, forduljon a címtár rendszergazdájához. Ha nem tud tagokat felvenni egy meglévő csoportba, forduljon a csoport tulajdonosához vagy egy címtáradminisztrátorhoz. További információ: Microsoft Entra-csoportok és csoporttagság kezelése.

3 – Szerepkörök hozzárendelése az alkalmazáshoz

Ezután meg kell határoznia, hogy az alkalmazásnak milyen szerepkörökre (engedélyekre) van szüksége az adott erőforrásokhoz, és ki kell osztania ezeket a szerepköröket az alkalmazáshoz. Ebben a példában a szerepkörök a 2. lépésben létrehozott Microsoft Entra-csoporthoz vannak rendelve. A szerepkörök erőforrás-, erőforráscsoport- vagy előfizetés-hatókörben rendelhetők hozzá. Ez a példa bemutatja, hogyan rendelhet hozzá szerepköröket az erőforráscsoport hatóköréhez, mivel a legtöbb alkalmazás egyetlen erőforráscsoportba csoportosítja az összes Azure-erőforrást.

Egy felhasználó, csoport vagy alkalmazásszolgáltatás-tag szerepkörhöz van rendelve az Azure-ban az az role assignment create paranccsal. Megadhat egy csoportot az objektumazonosítójával. Megadhat egy alkalmazásszolgáltatásnevet az appId azonosítójával.

az role assignment create --assignee {appId or objectId} \
    --scope /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName} \
    --role "{roleName}" 

A hozzárendelhető szerepkörnevek lekéréséhez használja az az role definition list parancsot.

az role definition list \
    --query "sort_by([].{roleName:roleName, description:description}, &roleName)" \
    --output table

Ha például lehetővé szeretné tenni, hogy az alkalmazásszolgáltatás-tag az előfizetés 00000000-0000-0000-0000-000000000000 msdocs-python-sdk-auth-auth típusú erőforráscsoportjának összes tárfiókjában lévő Azure Storage-blobtárolókhoz és -adatokhoz való olvasási, írási és törlési hozzáféréssel rendelkezik az azonosítóval11111111-1111-1111-1111-111111111111, az alkalmazásszolgáltatásnevet a Következő paranccsal rendelje hozzá a Storage Blob-adatszolgáltató szerepkörhöz.

az role assignment create --assignee 00000000-0000-0000-0000-000000000000 \
    --scope /subscriptions/11111111-1111-1111-1111-111111111111/resourceGroups/msdocs-python-sdk-auth-example \
    --role "Storage Blob Data Contributor"

Az engedélyek erőforrás- vagy előfizetési szinten az Azure CLI-vel való hozzárendeléséről az Azure CLI-vel történő Azure-szerepkörök hozzárendelése című cikk nyújt tájékoztatást.

4 – Helyi fejlesztési környezeti változók beállítása

Az DefaultAzureCredential objektum futásidőben a környezeti változók egy halmazában fogja keresni a szolgáltatásnév adatait. Mivel a legtöbb fejlesztő több alkalmazáson is dolgozik, javasoljuk, hogy a fejlesztés során egy python-dotenv csomaghoz hasonló csomagot használjon a környezet eléréséhez az alkalmazás könyvtárában tárolt fájlból.env. Ez az alkalmazás Azure-beli hitelesítéséhez használt környezeti változókra terjed ki, így csak az alkalmazás használhatja őket.

A .env fájl soha nem kerül be a forrásvezérlőbe, mivel tartalmazza az Azure alkalmazás titkos kulcsát. A Python standard .gitignore fájlja automatikusan kizárja a fájlt a .env bejelentkezésből.

A python-dotenv csomag használatához először telepítse a csomagot az alkalmazásban.

pip install python-dotenv

Ezután hozzon létre egy .env fájlt az alkalmazás gyökérkönyvtárában. Állítsa be a környezeti változó értékeit az alkalmazásregisztrációs folyamatból kapott értékekkel az alábbiak szerint:

  • AZURE_CLIENT_ID → Az alkalmazásazonosító értéke.
  • AZURE_TENANT_ID → a bérlőazonosító értékét.
  • AZURE_CLIENT_SECRET → Az alkalmazáshoz létrehozott jelszó/hitelesítő adatok.
AZURE_CLIENT_ID=00000000-0000-0000-0000-000000000000
AZURE_TENANT_ID=11111111-1111-1111-1111-111111111111
AZURE_CLIENT_SECRET=abcdefghijklmnopqrstuvwxyz

Végül az alkalmazás indítási kódjában a python-dotenv kódtár használatával olvassa be a környezeti változókat a fájlból az .env indításkor.

from dotenv import load_dotenv

if ( os.environ['ENVIRONMENT'] == 'development'):
    print("Loading environment variables from .env file")
    load_dotenv(".env")

5 – DefaultAzureCredential implementálása az alkalmazásban

Az Azure SDK-ügyfélobjektumok Azure-beli hitelesítéséhez az alkalmazásnak a DefaultAzureCredential csomagból származó azure.identity osztályt kell használnia. Ebben a forgatókönyvben DefaultAzureCredential észleli a környezeti változókat AZURE_CLIENT_ID, AZURE_TENANT_IDés AZURE_CLIENT_SECRET be van állítva és beolvassa ezeket a változókat, hogy lekérje az Alkalmazásszolgáltatás fő információit az Azure-hoz való csatlakozáshoz.

Először adja hozzá az azure.identity csomagot az alkalmazáshoz.

pip install azure-identity

Ezután az azure SDK-ügyfélobjektumot létrehozó Python-kódok esetében a következőket kell elvégeznie:

  1. Importálja az osztályt DefaultAzureCredential a azure.identity modulból.
  2. Hozzon létre egy objektumot DefaultAzureCredential .
  3. Adja át az DefaultAzureCredential objektumot az Azure SDK ügyfélobjektum-konstruktorának.

Erre példa a következő kódszakaszban látható.

from azure.identity import DefaultAzureCredential
from azure.storage.blob import BlobServiceClient

# Acquire a credential object
token_credential = DefaultAzureCredential()

blob_service_client = BlobServiceClient(
        account_url="https://<my_account_name>.blob.core.windows.net",
        credential=token_credential)