Python-alkalmazások hitelesítése Azure-szolgáltatásokba a helyi fejlesztés során fejlesztői fiókok használatával

Amikor a fejlesztők felhőalkalmazásokat hoznak létre, általában a helyi munkaállomásukon hibakeresést és tesztelést végezhetnek az alkalmazásokon. 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 használhatja egy fejlesztő Azure-beli hitelesítő adatait az alkalmazás azure-beli hitelesítésére a helyi fejlesztés során.

Egy diagram, amely bemutatja, hogy egy Python-alkalmazás a helyi fejlesztés során hogyan használja a fejlesztők hitelesítő adatait az Azure-hoz való csatlakozáshoz azáltal, hogy ezeket a hitelesítő adatokat helyileg telepített fejlesztői eszközökről szerzi be.

Ahhoz, hogy egy alkalmazás a fejlesztő Azure-beli hitelesítő adataival hitelesítse magát az Azure-ban a helyi fejlesztés során, be kell jelentkeznie az Azure-ba az Azure CLI-ből, az Azure PowerShellből vagy az Azure Developer CLI-ből. A Pythonhoz készült Azure SDK képes észlelni, hogy a fejlesztő bejelentkezett az egyik ilyen eszközről, majd beszerezheti a szükséges hitelesítő adatokat a hitelesítő adatok gyorsítótárából, hogy bejelentkezett felhasználóként hitelesítse az alkalmazást az Azure-ban.

Ez a módszer a legegyszerűbben beállítható egy fejlesztői csapat számára, mivel kihasználja a fejlesztők meglévő Azure-fiókjait. A fejlesztői fiók azonban valószínűleg több engedéllyel rendelkezik, mint amennyit az alkalmazás igényel, ezért túllépi azokat az engedélyeket, amelyeket az alkalmazás éles környezetben fog futtatni. Alternatív megoldásként létrehozhat alkalmazásszolgáltatás-tagokat, amelyeket a helyi fejlesztés során használhat, amelyek hatóköre csak az alkalmazás által igényelt hozzáférésre terjedhet ki.

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

Mivel szinte mindig több fejlesztő dolgozik egy alkalmazáson, javasoljuk, hogy először hozzon létre egy Microsoft Entra biztonsági csoportot, amely magában foglalja az alkalmazáshoz szükséges szerepköröket (engedélyeket) a helyi fejlesztés során. Ez a megközelítés a következő előnyöket nyújtja.

  • 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, egyszerűen hozzá kell adni őket a megfelelő Microsoft Entra-csoporthoz, hogy megkapják a megfelelő engedélyeket az alkalmazás használatához.

Ha már rendelkezik Microsoft Entra biztonsági csoporttal a fejlesztői csapathoz, használhatja ezt a csoportot. Ellenkező esetben hajtsa végre a következő lépéseket a Microsoft Entra biztonsági csoport létrehozásához.

Az az ad group create paranccsal 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 Azure-felhasználó objektumazonosítójára. Az az ad felhasználói lista használatá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 felhasználó megjelenítendő nevére szűrheti a listát az ábrán látható módon. A --query paraméter a kimenetet érdekes oszlopokra korlátozza.

az ad user list \
    --filter "startswith(displayName, 'Bob')" \
    --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.

2 – Szerepkörök hozzárendelése a Microsoft Entra-csoporthoz

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 az 1. lépésben létrehozott Microsoft Entra-csoporthoz lesznek hozzá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.

az role assignment create --assignee {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 az előfizetés msdocs-python-sdk-auth-példa 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és objektumazonosítóval 00000000-0000-0000-0000-000000000000 rendelkező tagjai számára engedélyezi az azonosítót11111111-1111-1111-1111-111111111111, a Következő paranccsal rendelje hozzá a storage blobadat-közreműködő szerepkört a csoporthoz.

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.

3 – Bejelentkezés az Azure-ba az Azure CLI, az Azure PowerShell, az Azure Developer CLI vagy egy böngésző használatával

Nyisson meg egy terminált a fejlesztői munkaállomáson, és jelentkezzen be az Azure-ba az Azure CLI-ből.

az login

4 – 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 egymás után ellenőrzi, DefaultAzureCredential hogy a fejlesztő bejelentkezett-e az Azure-ba az Azure CLI, az Azure PowerShell vagy az Azure fejlesztői parancssori felületének használatával. Ha a fejlesztő ezen eszközök bármelyikével jelentkezik be az Azure-ba, akkor az alkalmazás az eszközbe való bejelentkezéshez használt hitelesítő adatokat fogja használni az Azure-ba való hitelesítéshez.

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.

Ezekre a lépésekre az alábbi kódszakaszban látható példa.

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)