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-111111111111
szeretné 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:
- Importálja az osztályt
DefaultAzureCredential
aazure.identity
modulból. - Hozzon létre egy objektumot
DefaultAzureCredential
. - 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.