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. Vytvoření nového aplikačního servisního hlavního objektu vygeneruje ID klienta a klientské tajemství pro vaši aplikaci. ID klienta, tajný klíč klienta a ID tenanta uložíte do proměnných prostředí, které bude sada Azure SDK pro Python používat 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. Vytvoření jiné registrace aplikace umožňuje nakonfigurovat pro každý instanční objekt oprávnění specifická pro prostředí a zajistit, aby aplikace nasazená do jednoho prostředí nemluvila s prostředky Azure, které jsou součástí jiného prostředí.
Registrace aplikace v Azure
Aplikaci je možné zaregistrovat v Azure pomocí webu Azure Portal nebo Azure CLI.
APP_NAME=<app-name>
az ad sp create-for-rbac --name $APP_NAME
Výstup příkazu je 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"
}
Dále potřebujete získat appID hodnotu a uložit ji do proměnné. Tato hodnota slouží k nastavení proměnných prostředí ve vašem místním vývojovém prostředí, aby se Azure SDK pro Python mohlo ověřit v Azure pomocí služebního účtu.
APP_ID=$(az ad sp create-for-rbac \
--name $APP_NAME --query appId --output tsv)
Přiřazení rolí k instančnímu objektu 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.
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"
![!POZNÁMKA] Pokud nechcete, aby Git Bash nezacházel s /subscriptions/... jako s cestou k souboru, přidejte před řetězec parametru
scope"./" a použijte dvojité uvozovky kolem celého řetězce.
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.
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í Gunicorn ke spouštění webových aplikací v Pythonu v prostředí serveru UNIX lze proměnné prostředí pro aplikaci zadat pomocí direktivy EnvironmentFile v gunicorn.server. Podívejte se na následující příklad.
[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 následujícím způsobem.
AZURE_CLIENT_ID=<value>
AZURE_TENANT_ID=<value>
AZURE_CLIENT_SECRET=<value>
Použití 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
Dále byste v případě kódu Pythonu, který ve vaší aplikaci vytvoří objekt klienta sady Azure SDK, měli byste:
- Naimportujte třídu
DefaultAzureCredentialzazure.identitymodulu. - Vytvoření objektu
DefaultAzureCredential -
DefaultAzureCredentialPředejte objekt konstruktoru klientského objektu sady Azure SDK.
Příklad tohoto přístupu 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)
V tomto příkladu, když kód vytvoří instanci objektu DefaultAzureCredential, DefaultAzureCredential přečte proměnné prostředí AZURE_TENANT_ID, AZURE_CLIENT_ID a AZURE_CLIENT_SECRET pro získání informací o aplikačním servisním účtu pro připojení k Azure.