Hitelesítés Azure-erőforrásokba a helyszínen üzemeltetett Python-alkalmazásokból

Az Azure-on kívül (például helyszíni vagy külső adatközpontban) üzemeltetett alkalmazásoknak az Azure-erőforrások elérésekor egy alkalmazásszolgáltatás-egyszerű használatával kell hitelesítést végeznie az Azure-ban. Az alkalmazásszolgáltatás egyszerű objektumai az azure-beli alkalmazásregisztrációs folyamattal jönnek létre. Az alkalmazás-szolgáltatásnév létrehozásakor létrejön egy ügyfélazonosító és egy titkos ügyfélkód az alkalmazáshoz. Az ügyfélazonosítót, az ügyfélkulcsot és a bérlőazonosítót ezután környezeti változók tárolják, így az Azure SDK for Python használhatja őket az alkalmazás futtatókörnyezetben történő hitelesítéséhez az Azure-ban.

Minden olyan környezethez létre kell hozni egy másik alkalmazásregisztrációt, amelyben az alkalmazás üzemel. Ez lehetővé teszi a környezetspecifikus erőforrás-engedélyek konfigurálását minden egyes szolgáltatásnévhez, és biztosítja, hogy az egyik környezetben üzembe helyezett alkalmazás ne beszéljen egy másik környezet részét képező Azure-erőforrással.

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

Egy alkalmazás regisztrálható az Azure-ban az Azure Portal vagy az Azure CLI használatával.

az ad sp create-for-rbac --name <app-name>

A parancs kimenete az alábbihoz hasonló lesz. 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.

{
  "appId": "00000000-0000-0000-0000-000000000000",
  "displayName": "msdocs-python-sdk-auth-prod",
  "password": "abcdefghijklmnopqrstuvwxyz",
  "tenant": "33333333-3333-3333-3333-333333333333"
}

2 – Szerepkörök hozzárendelése az application service principalhez

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. A szerepkörök 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 szerepköröket a szolgáltatásnévhez az erőforráscsoport hatókörében, mivel a legtöbb alkalmazás egyetlen erőforráscsoportba csoportosítja az összes Azure-erőforrást.

A szolgáltatásnév az az szerepkör-hozzárendelés létrehozási parancsával van hozzárendelve egy szerepkörhöz az Azure-ban.

az role assignment create --assignee {appId} \
    --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 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ést tartalmazó appId 00000000-0000-0000-0000-000000000000 azonosítóval 11111111-1111-1111-1111-111111111111szeretné engedélyezni a szolgáltatásnevet, az alábbi paranccsal rendelheti hozzá az alkalmazásszolgáltatásnevet 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.

3 – Környezeti változók konfigurálása az alkalmazáshoz

A Python-alkalmazást futtató folyamathoz be kell állítania a AZURE_CLIENT_ID, AZURE_TENANT_IDés AZURE_CLIENT_SECRET a környezeti változókat, hogy az alkalmazás szolgáltatásnév-hitelesítő adatait futásidőben elérhetővé tegye az alkalmazás számára. Az DefaultAzureCredential objektum ezekben a környezeti változókban keresi a szolgáltatásnév adatait.

Ha a Gunicorn használatával Futtatja a Python-webalkalmazásokat UNIX-kiszolgálói környezetben, az alkalmazás környezeti változói a EnvironmentFile fájlban található irányelv használatával adhatók meg az gunicorn.server alább látható módon.

[Unit]
Description=gunicorn daemon
After=network.target  
  
[Service]  
User=www-user
Group=www-data
WorkingDirectory=/path/to/python-app
EnvironmentFile=/path/to/python-app/py-env/app-environment-variables
ExecStart=/path/to/python-app/py-env/gunicorn --config config.py wsgi:app
            
[Install]  
WantedBy=multi-user.target

Az irányelvben EnvironmentFile megadott fájlnak tartalmaznia kell a környezeti változók listáját az alábbi módon.

AZURE_CLIENT_ID=<value>
AZURE_TENANT_ID=<value>
AZURE_CLIENT_SECRET=<value>

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.

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)

Amikor a fenti kód példányosítja az DefaultAzureCredential objektumot, DefaultAzureCredential beolvassa a környezeti változókat AZURE_TENANT_ID, AZURE_CLIENT_IDés AZURE_CLIENT_SECRET az alkalmazásszolgáltatás egyszerű információit az Azure-hoz való csatlakozáshoz.