Sdílet prostřednictvím


Ověřování aplikací hostovaných v Azure v prostředcích Azure pomocí sady Azure SDK pro Python

Když hostujete aplikaci v Azure pomocí služeb, jako jsou Aplikace Azure Service, Azure Virtual Machines nebo Azure Container Instances, doporučuje se ověřit aplikaci v prostředcích Azure se spravovanou identitou.

Spravovaná identita poskytuje identitu pro vaši aplikaci, aby se dokázala připojit k jiným prostředkům Azure bez nutnosti používat tajný klíč nebo jiný tajný klíč aplikace. Azure interně zná identitu vaší aplikace a k jakým prostředkům se může připojit. Azure tyto informace používá k automatickému získání tokenů Microsoft Entra pro aplikaci, aby se mohla připojit k dalším prostředkům Azure, aniž byste museli spravovat tajné kódy aplikací.

Poznámka:

Aplikace spuštěné ve službě Azure Kubernetes Service (AKS) můžou k ověřování s prostředky Azure používat identitu úloh. V AKS představuje identita úlohy vztah důvěry mezi řízenou identitou a účtem služby Kubernetes. Pokud je aplikace nasazená do AKS nakonfigurovaná s účtem služby Kubernetes v takové relaci, DefaultAzureCredential ověří aplikaci v Azure pomocí spravované identity. Ověřování pomocí identity úlohy je popsáno v tématu Použití ID úloh Microsoft Entra se službou Azure Kubernetes Service. Postup konfigurace identity úloh najdete v tématu Nasazení a konfigurace identity úloh v clusteru Azure Kubernetes Service (AKS).

Typy spravovaných identit

Existují dva typy spravovaných identit:

  • Spravované identity přiřazené systémem – Tento typ spravované identity je poskytován a svázán přímo s prostředkem Azure. Když povolíte spravovanou identitu u prostředku Azure, získáte spravovanou identitu přiřazenou systémem pro tento prostředek. Spravovaná identita přiřazená systémem je svázaná s životním cyklem přidruženého prostředku Azure. Když se prostředek odstraní, Azure automaticky odstraní identitu za vás. Vzhledem k tomu, že stačí povolit spravovanou identitu pro prostředek Azure hostující váš kód, je tento přístup nejjednodušším typem spravované identity, která se má použít.
  • Spravované identity přiřazené uživatelem – Spravovanou identitu můžete vytvořit také jako samostatný prostředek Azure. Tento přístup se nejčastěji používá, když má vaše řešení více úloh, které běží na několika prostředcích Azure, které potřebují sdílet stejnou identitu a stejná oprávnění. Pokud například vaše řešení obsahovalo komponenty, které běží na několika instancích služby App Service a virtuálních počítačů, které potřebují přístup ke stejné sadě prostředků Azure, pak dává smysl spravovaná identita přiřazená uživatelem, která se v těchto prostředcích používá.

Tento článek popisuje postup povolení a použití spravované identity přiřazené systémem pro aplikaci. Pokud potřebujete použít spravovanou identitu přiřazenou uživatelem, přečtěte si článek Správa spravovaných identit přiřazených uživatelem a zjistěte, jak vytvořit spravovanou identitu přiřazenou uživatelem.

Povolení spravované identity v prostředku Azure hostujícím aplikaci

Prvním krokem je povolení spravované identity na prostředku Azure hostujícím vaši aplikaci. Pokud například hostujete aplikaci Django pomocí Azure App Service, musíte pro webovou aplikaci App Service, která hostuje vaši aplikaci, povolit spravovanou identitu. Pokud k hostování aplikace používáte virtuální počítač, povolili byste virtuálnímu počítači používat spravovanou identitu.

Spravovanou identitu můžete povolit pro prostředek Azure buď v prostředí Azure Portal, nebo pomocí Azure CLI.

Příkazy Azure CLI je možné spouštět v Azure Cloud Shellu nebo na pracovní stanici s nainstalovaným Azure CLI.

Příkazy Azure CLI, které slouží k povolení spravované identity pro prostředek Azure, jsou ve formuláři az <command-group> identity --resource-group <resource-group-name> --name <resource-name>. Pro oblíbené služby Azure se podívejte na následující příkazy.

az webapp identity assign --resource-group <resource-group-name> --name <web-app-name>

Výstup vypadá takto.

{
  "principalId": "aaaaaaaa-bbbb-cccc-1111-222222222222",
  "tenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
  "type": "SystemAssigned",
  "userAssignedIdentities": null
}

Hodnota principalId je jedinečné ID spravované identity. Ponechte kopii tohoto výstupu, protože tyto hodnoty budete potřebovat v dalším kroku.

Přiřazení rolí ke spravované identitě

Dále musíte určit, jaké role (oprávnění) vaše aplikace potřebuje, a přiřadit spravovanou identitu těmto rolím v Azure. Spravovanou identitu je možné přiřadit role v rámci prostředku, skupiny prostředků a předplatného. Tento příklad ukazuje, jak přiřadit role v oboru skupiny prostředků, protože většina aplikací seskupuje všechny prostředky Azure do jedné skupiny prostředků.

Příkaz az role assignment create přiřadí roli spravované identitě. Pro přiřazeného použijte hodnotu principalId zkopírovanou v kroku 1.

az role assignment create --assignee <managedIdentityprincipalId> \
    --scope /subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName> \
    --role "<roleName>" 

Pokud chcete získat názvy rolí, ke kterým je možné služební hlavní název přiřadit, použijte příkaz az role definition list.

az role definition list \
    --query "sort_by([].{roleName:roleName, description:description}, &roleName)" \
    --output table

Pokud chcete například povolit spravované identitě s ID aaaaaaaa-bbbb-cccc-1111-222222222222 přístup pro čtení, zápis a odstranění ke kontejnerům objektů blob služby Azure Storage a datům 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 instanční objekt aplikace k roli Přispěvatel dat objektů blob služby Storage pomocí následujícího příkazu.

az role assignment create --assignee aaaaaaaa-bbbb-cccc-1111-222222222222 \
    --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.

Implementace DefaultAzureCredential ve vaší aplikaci

Pokud je váš kód spuštěný v Azure a spravovaná identita je povolená na prostředku Azure hostujícím vaši aplikaci, určuje přihlašovací údaje, DefaultAzureCredential které se mají použít v následujícím pořadí:

  1. Zkontrolujte prostředí pro služební principál, jak je definováno proměnnými prostředí AZURE_CLIENT_ID, AZURE_TENANT_ID a buď AZURE_CLIENT_SECRET nebo AZURE_CLIENT_CERTIFICATE_PATH a volitelně AZURE_CLIENT_CERTIFICATE_PASSWORD.
  2. Zkontrolujte parametry klíčových slov pro spravovanou identitu přiřazenou uživatelem. Můžete předat spravovanou identitu přiřazenou uživatelem zadáním ID klienta v parametru managed_identity_client_id.
  3. Zkontrolujte proměnnou AZURE_CLIENT_ID prostředí pro ID klienta přiřazené uživatelem spravované identity.
  4. Pokud je u prostředku Azure povolená spravovaná identita, použijte spravovanou identitu přiřazenou systémem.

Spravované identity můžete vyloučit z přihlašovacích údajů nastavením klíčového parametru exclude_managed_identity_credentialTrue.

Tento článek používá spravovanou identitu přiřazenou systémem pro webovou aplikaci Azure App Service. Pomocí tohoto přístupu nemusíte konfigurovat spravovanou identitu v prostředí ani ji předávat jako parametr. Následující kroky ukazují, jak používat DefaultAzureCredential.

Nejprve přidejte azure.identity balíček do aplikace.

pip install azure-identity

Dále pro libovolný kód Pythonu, který ve vaší aplikaci vytvoří objekt klienta sady Azure SDK:

  1. Naimportujte třídu DefaultAzureCredential z azure.identity modulu.
  2. Vytvoření objektu DefaultAzureCredential
  3. DefaultAzureCredential Předejte objekt konstruktoru klientského objektu sady Azure SDK.

Příklad těchto kroků 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)

Jak je diskutováno v článku s názvem přehled ověřování pro Azure SDK pro Python, DefaultAzureCredential podporuje několik metod ověřování a určuje, která metoda je použita během běhu programu. Výhodou tohoto přístupu je, že vaše aplikace může používat různé metody ověřování v různých prostředích bez implementace kódu specifického pro prostředí. Když se předchozí kód spustí na vaší pracovní stanici během místního vývoje, DefaultAzureCredential použije buď aplikačního servisního představitele, jak je určeno nastavením prostředí, nebo přihlašovací údaje vývojářských nástrojů k ověření s jinými prostředky Azure. Stejný kód se tedy dá použít k ověření aplikace v prostředcích Azure během místního vývoje i při nasazení do Azure.