Megosztás a következőn keresztül:


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. Egy új alkalmazásszolgáltatás-tag létrehozása létrehoz egy ügyfél-azonosítót és egy titkos ügyfélkulcsot az alkalmazáshoz. Az ügyfélazonosítót, az ügyfélkulcsot és a bérlőazonosítót olyan környezeti változókban tárolja, amelyeket az Azure SDK for Python használ 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. Egy másik alkalmazásregisztráció létrehozása 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ások ne beszéljenek egy másik környezet részét képező Azure-erőforrásokkal.

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.

APP_NAME=<app-name>
az ad sp create-for-rbac --name $APP_NAME

A parancs kimenete a következőhöz hasonló. 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": "00001111-aaaa-2222-bbbb-3333cccc4444",
  "displayName": "msdocs-python-sdk-auth-prod",
  "password": "Ee5Ff~6Gg7.-Hh8Ii9Jj0Kk1Ll2Mm3_Nn4Oo5Pp6",
  "tenant": "aaaabbbb-0000-cccc-1111-dddd2222eeee"
}

Ezután le kell kérnie az appID értéket, és egy változóban kell tárolnia. Ez az érték környezeti változók beállítására szolgál a helyi fejlesztési környezetben, hogy a Pythonhoz készült Azure SDK hitelesítést végezzen az Azure-ban a szolgáltatásnév használatával.

APP_ID=$(az ad sp create-for-rbac \
  --name $APP_NAME --query appId --output tsv)

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. Szerepkörök hozzárendelhetők egy erőforrás, erőforráscsoport vagy előfizetés hatóköréhez. 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-objektum az Azure-ban egy szerepkörhöz van rendelve a az role assignment create parancs használatával.

RESOURCE_GROUP_NAME=<resource-group-name>
SUBSCRIPTION_ID=$(az account show --query id --output tsv)
ROLE_NAME=<role-name>

az role assignment create \
  --assignee "$APP_ID" \
  --scope "./subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP_NAME" \
  --role "$ROLE_NAME"

![!MEGJEGYZÉS] Annak érdekében, hogy a Git Bash ne kezelje az /subscriptions/...-t fájlelőttútként, helyezze a "./" karaktereket a scope paraméter sztringje elé, és helyezze a teljes sztringet dupla idézőjelbe.

A szolgáltatás-azonosítóhoz 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

Az alábbi parancs segítségével az alkalmazásszolgáltatásközpontot a Blobtároló adat-közreműködője szerepkörhöz rendelheti hozzá. Például ahhoz, hogy a 00001111-aaaa-2222-bbbb-3333cccc4444 appId-val rendelkező szolgáltatásközpontnak engedélyezze az olvasási, írási és törlési hozzáférést az előfizetés msdocs-python-sdk-auth-example erőforráscsoportjában található összes tárfiók Azure Storage-blobtárolóihoz és adataihoz, a következő parancsot használja.

az role assignment create --assignee 00001111-aaaa-2222-bbbb-3333cccc4444 \
    --scope "./subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/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.

Környezeti változók konfigurálása 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 irányelv használatával a gunicorn.server fájlban határozhatók meg. Tekintse meg a következő példát.

[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 értékekkel.

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

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 az alkalmazásban létrehozó Bármely Python-kód esetében a következőket kell tenni:

  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 a megközelítésre az alábbi kódszegmensben mutatunk be példát.

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)

Ebből a példából, amikor a 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 fő információit az Azure-hoz való csatlakozáshoz.