Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Aplikace hostované mimo Azure (například místně nebo v datovém centru třetí strany) by měly při přístupu k prostředkům Azure používat aplikačního služebního principála pro ověřování v Azure. Objekty služby hlavního prvku aplikace se vytvářejí pomocí procesu registrace aplikace v Azure. Když je vytvořen služební principál aplikace, vygeneruje se pro vaši aplikaci ID klienta a klientské tajemství. ID klienta, tajný klíč klienta a ID vašeho tenanta se pak ukládají do proměnných prostředí, aby je sada Azure SDK pro Python mohli použít k ověření aplikace v Azure za běhu.
Pro každé prostředí, ve které je aplikace hostovaná, by se měla vytvořit jiná registrace aplikace. To umožňuje nakonfigurovat pro každý instanční objekt oprávnění pro konkrétní prostředí a zajistit, aby aplikace nasazená do jednoho prostředí nemluvila s prostředky Azure, které jsou součástí jiného prostředí.
1. Registrace aplikace v Azure
Aplikaci je možné zaregistrovat v Azure pomocí webu Azure Portal nebo Azure CLI.
az ad sp create-for-rbac --name <app-name>
Výstup příkazu bude podobný následujícímu. Poznamenejte si tyto hodnoty nebo nechte toto okno otevřené, protože je budete potřebovat v dalších krocích a nebudete moct znovu zobrazit hodnotu hesla (tajný klíč klienta).
{
"appId": "00001111-aaaa-2222-bbbb-3333cccc4444",
"displayName": "msdocs-python-sdk-auth-prod",
"password": "Ee5Ff~6Gg7.-Hh8Ii9Jj0Kk1Ll2Mm3_Nn4Oo5Pp6",
"tenant": "aaaabbbb-0000-cccc-1111-dddd2222eeee"
}
2. Přiřazení rolí ke služebnímu účelu aplikace
Dále musíte určit, jaké role (oprávnění) vaše aplikace potřebuje k jakým prostředkům, a přiřadit tyto role k aplikaci. Role lze přiřadit na úrovni prostředku, skupiny prostředků nebo předplatného. Tento příklad ukazuje, jak přiřadit role služebního principu v rámci skupiny prostředků, protože většina aplikací seskupí všechny prostředky Azure do jedné skupiny prostředků.
Aplikačnímu objektu se přiřadí role v Azure pomocí příkazu az role assignment create.
az role assignment create --assignee {appId} \
--scope /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName} \
--role "{roleName}"
Pokud chcete získat názvy rolí, ke kterým lze přiřadit aplikační objekt, použijte příkaz az role definition list.
az role definition list \
--query "sort_by([].{roleName:roleName, description:description}, &roleName)" \
--output table
Pokud například chcete službě principal s appId 00001111-aaaa-2222-bbbb-3333cccc4444
povolit čtení, zápis a odstranění přístupu ke kontejnerům a datům objemů Azure Storage ve všech účtech úložiště ve skupině prostředků msdocs-python-sdk-auth-example v předplatném s ID aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e
, přiřadili byste službu principal aplikace k roli Přispěvatel dat úložiště blob pomocí následujícího příkazu.
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"
Informace o přiřazování oprávnění na úrovni prostředku nebo předplatného pomocí Azure CLI najdete v článku Přiřazení rolí Azure pomocí Azure CLI.
3. Konfigurace proměnných prostředí pro aplikaci
Musíte nastavit proměnné prostředí AZURE_CLIENT_ID
, AZURE_TENANT_ID
a AZURE_CLIENT_SECRET
pro proces, který spouští vaši aplikaci Python, aby byly přihlašovací údaje instančního objektu aplikační služby dostupné vaší aplikaci během běhu. Objekt DefaultAzureCredential
vyhledá informace hlavní služby v těchto proměnných prostředí.
Při použití Gunicornu ke spouštění webových aplikací Pythonu v prostředí serveru UNIX je možné pomocí direktivy EnvironmentFile
v gunicorn.server
souboru zadat proměnné prostředí pro aplikaci, jak je znázorněno níže.
[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
Soubor zadaný v direktivě EnvironmentFile
by měl obsahovat seznam proměnných prostředí s jejich hodnotami, jak je znázorněno níže.
AZURE_CLIENT_ID=<value>
AZURE_TENANT_ID=<value>
AZURE_CLIENT_SECRET=<value>
4. Implementace DefaultAzureCredential v aplikaci
K ověřování klientských objektů sady Azure SDK v Azure by vaše aplikace měla používat DefaultAzureCredential
třídu z azure.identity
balíčku.
Začněte tím, že do aplikace přidáte azure.identity balíček.
pip install azure-identity
V dalším kroku pro libovolný kód Pythonu, který ve vaší aplikaci vytvoří objekt klienta sady Azure SDK, budete chtít:
- Naimportujte třídu
DefaultAzureCredential
zazure.identity
modulu. - Vytvoření objektu
DefaultAzureCredential
-
DefaultAzureCredential
Předejte objekt konstruktoru klientského objektu sady Azure SDK.
Příklad je znázorněn v následujícím segmentu kódu.
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)
Když výše uvedený kód vytvoří instanci objektu DefaultAzureCredential
, DefaultAzureCredential
přečte z prostředí proměnné AZURE_TENANT_ID
, AZURE_CLIENT_ID
a AZURE_CLIENT_SECRET
obsahující informace o hlavním objektu služby aplikace, aby se připojil k Azure.