Azure-beli alkalmazások hitelesítése Azure-erőforrásokba a Pythonhoz készült Azure SDK-val

Ha az Azure-ban olyan szolgáltatásokkal üzemeltet alkalmazásokat, mint a Azure-alkalmazás Service, az Azure Virtual Machines vagy az Azure Container Instances, az alkalmazások Azure-erőforrásokhoz való hitelesítésének ajánlott módszere a felügyelt identitás.

A felügyelt identitás olyan identitást biztosít az alkalmazás számára, amely anélkül tud más Azure-erőforrásokhoz csatlakozni, hogy titkos kulcsot vagy más alkalmazáskulcsot kellene használnia. Az Azure belsőleg ismeri az alkalmazás identitását, és hogy milyen erőforrásokhoz csatlakozhat. Az Azure ezeket az információkat arra használja, hogy automatikusan lekérjük a Microsoft Entra-jogkivonatokat az alkalmazáshoz, hogy más Azure-erőforrásokhoz kapcsolódhasson anélkül, hogy az alkalmazás titkos kulcsait kellene kezelnie.

Felügyelt identitástípusok

A felügyelt identitásoknak két típusa létezik:

  • Rendszer által hozzárendelt felügyelt identitások – Ezt a típusú felügyelt identitást közvetlenül egy Azure-erőforrás biztosítja és köti össze. Ha engedélyezi a felügyelt identitást egy Azure-erőforráson, egy rendszer által hozzárendelt felügyelt identitást kap az adott erőforráshoz. A rendszer által hozzárendelt felügyelt identitás a társított Azure-erőforrás életciklusához van kötve. Az erőforrás törlésekor az Azure automatikusan törli az Identitást. Mivel mindössze annyit kell tennie, hogy engedélyezi a felügyelt identitást a kódot üzemeltető Azure-erőforrás számára, ez a módszer a legegyszerűbben használható felügyelt identitástípus.
  • Felhasználó által hozzárendelt felügyelt identitások – A felügyelt identitásokat önálló Azure-erőforrásként is létrehozhatja. Ezt a módszert leggyakrabban akkor használják, ha a megoldás több olyan számítási feladatokkal rendelkezik, amelyek több Azure-erőforráson futnak, amelyeknek azonos identitással és ugyanazokkal az engedélyekkel kell rendelkeznie. Ha például a megoldás olyan összetevőkkel rendelkezik, amelyek több App Service- és virtuálisgép-példányon futnak, és mindegyiknek ugyanahhoz az Azure-erőforráskészlethez kell hozzáférnie, akkor érdemes lehet egy felhasználó által hozzárendelt felügyelt identitást használni ezeken az erőforrásokon.

Ez a cikk a rendszer által hozzárendelt felügyelt identitás alkalmazáshoz való engedélyezésének és használatának lépéseit ismerteti. Ha felhasználó által hozzárendelt felügyelt identitást kell használnia, olvassa el a Felhasználó által hozzárendelt felügyelt identitások kezelése című cikket , amelyből megtudhatja , hogyan hozhat létre felhasználó által hozzárendelt felügyelt identitást.

1 – Felügyelt identitás engedélyezése az alkalmazást üzemeltető Azure-erőforrásban

Az első lépés a felügyelt identitás engedélyezése az alkalmazást üzemeltető Azure-erőforráson. Ha például egy Django-alkalmazást üzemeltet a Azure-alkalmazás Service használatával, engedélyeznie kell a felügyelt identitást az alkalmazást üzemeltető App Service-webalkalmazáshoz. Ha egy virtuális gépet használ az alkalmazás üzemeltetéséhez, engedélyezheti a virtuális gép számára a felügyelt identitás használatát.

Engedélyezheti a felügyelt identitás azure-erőforrásokhoz való használatát az Azure Portal vagy az Azure CLI használatával.

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

Az Azure-erőforrások felügyelt identitásának engedélyezéséhez használt Azure CLI-parancsok formátuma az <command-group> identity --resource-group <resource-group-name> --name <resource-name>. A népszerű Azure-szolgáltatások egyes parancsai alább láthatók.

az webapp identity assign --resource-group <resource-group-name> -name <web-app-name>

A kimenet az alábbihoz hasonlóan fog kinézni.

{
  "principalId": "99999999-9999-9999-9999-999999999999",
  "tenantId": "33333333-3333-3333-3333-333333333333",
  "type": "SystemAssigned",
  "userAssignedIdentities": null
}

Az principalId érték a felügyelt identitás egyedi azonosítója. Őrizze meg a kimenet másolatát, mivel a következő lépésben szüksége lesz ezekre az értékekre.

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

Ezután meg kell határoznia, hogy az alkalmazásnak milyen szerepkörökre (engedélyekre) van szüksége, és hozzá kell rendelnie a felügyelt identitást ezekhez a szerepkörökhöz az Azure-ban. A felügyelt identitások hozzárendelhetők szerepkörökhöz egy erőforrás, erőforráscsoport vagy előfizetés hatókörében. 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.

A felügyelt identitás szerepkört rendel az Azure-hoz az az role assignment create paranccsal. A hozzárendelt személyhez használja az principalId 1. lépésben másolt értéket.

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

A szolgáltatásnévhez 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-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 azonosítójával 99999999-9999-9999-9999-999999999999 rendelkező felügyelt identitást szeretné engedélyezni, 11111111-1111-1111-1111-111111111111az alkalmazásszolgáltatásnevet az alábbi paranccsal rendelné hozzá a Storage Blob-adatszolgáltató szerepkörhöz.

az role assignment create --assignee 99999999-9999-9999-9999-999999999999 \
    --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 – DefaultAzureCredential implementálása az alkalmazásban

Ha a kód az Azure-ban fut, és a felügyelt identitás engedélyezve van az alkalmazást üzemeltető Azure-erőforráson, a rendszer a DefaultAzureCredential következő sorrendben határozza meg a használni kívánt hitelesítő adatokat:

  1. Ellenőrizze a környezetet, hogy a környezeti változók AZURE_CLIENT_IDAZURE_CLIENT_CERTIFICATE_PATHAZURE_TENANT_IDAZURE_CLIENT_SECRET által definiált szolgáltatásnév vagy (opcionálisan) vagy (opcionálisan) AZURE_CLIENT_CERTIFICATE_PASSWORDvan-e meghatározva.
  2. Ellenőrizze a felhasználó által hozzárendelt felügyelt identitás kulcsszóparamétereit. A felhasználó által hozzárendelt felügyelt identitást úgy adhatja meg, hogy megadja annak ügyfél-azonosítóját a managed_identity_client_id paraméterben.
  3. Ellenőrizze a AZURE_CLIENT_ID környezeti változót a felhasználó által hozzárendelt felügyelt identitás ügyfél-azonosítójával.
  4. Ha engedélyezve van, használja a rendszer által hozzárendelt felügyelt identitást az Azure-erőforráshoz.

A kulcsszóparaméter Truebeállításával kizárhatja a felügyelt identitásokat a exclude_managed_identity_credential hitelesítő adatokból.

Ebben a cikkben a rendszer által hozzárendelt felügyelt identitást használjuk egy Azure-alkalmazás Service-webalkalmazáshoz, így nem kell konfigurálnunk egy felügyelt identitást a környezetben, és nem kell paraméterként átadnunk. Az alábbi lépések bemutatják a használat módját DefaultAzureCredential.

Először adja hozzá a 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)

Az Azure SDK for Python-hitelesítés áttekintési cikkében leírtak szerint több hitelesítési módszert is támogat, DefaultAzureCredential és meghatározza a futtatókörnyezetben használt hitelesítési módszert. Ennek a megközelítésnek az az előnye, hogy az alkalmazás különböző hitelesítési módszereket használhat különböző környezetekben, környezetspecifikus kód implementálása nélkül. Ha az előző kódot a helyi fejlesztés során futtatja a munkaállomáson, DefaultAzureCredential a környezeti beállításoknak megfelelően egy alkalmazásszolgáltatásnevet vagy a fejlesztői eszköz hitelesítő adatait fogja használni a többi Azure-erőforrással való hitelesítéshez. Így ugyanezzel a kóddal hitelesítheti az alkalmazást az Azure-erőforrásokon a helyi fejlesztés és az Azure-ban való üzembe helyezés során.