Autorizace v knihovnách Azure SDK pro Python

Autorizace v Azure určuje, jaké akce můžou ověření uživatelé nebo služby s prostředky provádět. Tento článek popisuje, jak implementovat autorizaci pomocí sady Azure SDK pro Python, která zahrnuje modely, implementaci, řešení potíží a osvědčené postupy. Podrobné nastavení ověřování najdete v tématu Ověřování aplikací Pythonu v Azure.

Úvod

Ověřování (AuthN) ověřuje identitu uživatele nebo služby, zatímco autorizace (AuthZ) definuje, co může dělat. Autorizace v Azure zajišťuje zabezpečený přístup k prostředkům, důležité pro ochranu aplikací a dat. Vývojáři můžou implementovat robustní autorizaci pomocí sady Azure SDK pro Python, která řídí přístup v různých pracovních postupech, od správy prostředků po přístup k datům specifickým pro službu.

Modely autorizace Azure

Azure poskytuje více mechanismů autorizace pro správu přístupu. Pochopení těchto modelů je nezbytné pro efektivní řízení přístupu.

Řízení přístupu na základě rolí v Azure

Azure Role-Based Access Control (RBAC) přiřazuje role identitám v rozsazích, jako jsou předplatná nebo skupiny prostředků. Mezi předdefinované role patří vlastník, Přispěvatel a Čtenář, zatímco vlastní role umožňují přizpůsobená oprávnění. Když přiřadíte roli v určitém oboru, získá identita (například uživatel nebo služba) oprávnění ke všem prostředkům v daném oboru a jeho podřízeným oborům. Například přiřazení role Přispěvatel na úrovni předplatného umožňuje správu všech prostředků v tomto předplatném. Viz Vysvětlení rozsahu pro Azure RBAC.

Mechanismy specifické pro službu

Některé služby Azure nabízejí jedinečné metody autorizace:

  • Azure Storage: Pro přístup k datům používá sdílené přístupové podpisy (SAS) a seznamy řízení přístupu (ACL). Viz poznámky k autorizaciService-Specific pro Azure Storage.
  • Azure Key Vault: Doporučuje použít řízení přístupu na základě role (RBAC) místo zastaralých zásad přístupu. Viz poznámky k autorizaci specifické pro službu pro Azure Key Vault.
  • Microsoft Graph: Využívá obory OAuth 2.0 a oprávnění aplikace. Podívejte se na poznámky k autorizaci specifické pro službu pro Microsoft Graph.

Použití autorizace v sadě Azure SDK pro Python

Sada Azure SDK pro Python poskytuje integrovanou podporu pro zpracování ověřování a autorizace prostřednictvím azure-identity balíčku. Třída DefaultAzureCredential podporuje různé mechanismy ověřování, jako jsou spravované identity a instanční objekty, které se přizpůsobí různým prostředím.

Příklad: Výpis skupin prostředků

Tento příklad ukazuje, jak sada Azure SDK pro Python používá k ověření pověření (prostřednictvím DefaultAzureCredential) a jak autorizace určuje, zda identita může úspěšně vypsat seznam skupin prostředků. Pokud identita nemá u oboru předplatného nebo skupiny prostředků roli Čtenář nebo vyšší, vrátí toto volání chybu 403 Zakázáno.

from azure.identity import DefaultAzureCredential
from azure.mgmt.resource import ResourceManagementClient

credential = DefaultAzureCredential()
client = ResourceManagementClient(credential, "<subscription-id>")
resource_groups = client.resource_groups.list()
for rg in resource_groups:
    print(rg.name)

Nahraďte <subscription-id> ID předplatného Azure, které je obvykle ve formě 00000000-0000-0000-0000-000000000000.

Microsoft Graph s oprávněními

Pokud chcete získat přístup k Microsoft Graphu, použijte oficiální sadu Microsoft Graph SDK pro Python, která podporuje delegovaná i aplikační oprávnění.

Tento příklad ukazuje, jak sada SDK používá přihlašovací údaje k vyžádání přístupového tokenu s požadovaným oborem https://graph.microsoft.com/.default autorizace a přístupem k prostředkům Microsoft Graphu. Identita musí být autorizovaná v Microsoft Entra ID s příslušnými oprávněními aplikace (například User.Read.All) k načtení uživatelských dat. Jinak požadavek selže s chybou 403 Zakázáno.

Důležité

Ujistěte se, že v Microsoft Entra ID má vaše aplikace nebo identita udělená oprávnění User.Read.All nebo jiná požadovaná oprávnění.

from azure.identity import DefaultAzureCredential
from msgraph.core import GraphClient

credential = DefaultAzureCredential()
client = GraphClient(credential=credential, scopes=["https://graph.microsoft.com/.default"])

response = client.get("/users")
users = response.json().get("value", [])
for user in users:
    print(user["displayName"])

Další informace o této sadě SDK najdete v oficiálním kurzu k sestavení aplikací v Pythonu pomocí Microsoft Graphu .

Diagnostika chyb autorizace

Problémy s autorizací často způsobují chyby HTTP 403 Zakázáno, které značí nedostatečná oprávnění. Diagnostika těchto problémů:

  • Zkontrolujte chybové zprávy: V odpovědi najdete podrobnosti o chybějících oprávněních.

  • Povolit protokolování: Ke kontrole požadavků a odpovědí použijte protokolování Python.

    import logging
    logging.basicConfig(level=logging.DEBUG)
    
  • Ověření přístupu: Pomocí Azure CLI nebo portálu Azure zkontrolujte přiřazení rolí.

    az role assignment list --assignee <principal-id> --scope <scope>
    

    Nahraďte <principal-id> ID objektu vašeho uživatele, služebního hlavního prvku nebo spravované identity. Nahraďte <scope> oborem prostředků Azure, jako je ID předplatného, název skupiny prostředků nebo prostředek. Viz Práce s obory.

Práce s obory

Často potřebujete zadat obor, například v následujícím příkladu:

az role assignment list \
    --assignee <principal-id> \
    --scope <scope>

Tady jsou některé běžné formáty rozsahů:

Úroveň oboru Příklad hodnoty
Subscription /subscriptions/<subscription-id>
Skupina prostředků /subscriptions/<subscription-id>/resourceGroups/<resource-group-name>
Název prostředku /subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/<provider-namespace>/<resource-type>/<resource-name>

Pokud například chcete zobrazit seznam všech přiřazení rolí pro spravovanou identitu na úrovni skupiny prostředků:

az role assignment list \
  --assignee 12345678-90ab-cdef-1234-567890abcdef \
  --scope /subscriptions/<subscription-id>/resourceGroups/my-resource-group

Nebo na úrovni předplatného:

az role assignment list \
  --assignee 12345678-90ab-cdef-1234-567890abcdef \
  --scope /subscriptions/<subscription-id>

K načtení ID objektu (<principal-id>) uživatele nebo spravované identity použijte:

az ad user show --id <user-email> --query id
az identity show --name <identity-name> --resource-group <rg-name> --query principalId

Správa přístupu

Správa přístupu prostřednictvím přiřazení rolí pomocí:

  • portál Azure: Přidejte role prostřednictvím nabídky služby Řízení přístupu (IAM).

  • Azure CLI:

    az role assignment create --assignee <principal-id> --role <role-name> --scope <scope>
    

    Nahraďte <principal-id> ID objektu vašeho uživatele, služebního hlavního prvku nebo spravované identity. Nahraďte <scope> oborem prostředků Azure, jako je ID předplatného, název skupiny prostředků nebo název prostředku. Viz Práce s obory.

  • Šablony ARM: Slouží k deklarativní správě.

Pro spravované identity přiřaďte role identitě spojené s prostředky, jako jsou virtuální počítače. Pomocí funkce Kontrola přístupu na portálu Azure nebo Azure CLI ověřte platná oprávnění.

Poznámky k autorizaci specifické pro službu

V části Mechanismy specifické pro službu jste se dozvěděli, že některé Azure služby nabízejí jedinečné metody autorizace. Tato část obsahuje podrobnější informace o každé ze tří zmíněných služeb Azure.

Azure Storage

  • RBAC: Spravuje operace řídicí roviny.
  • SAS a ACL: Řízení přístupu k datové vrstvě s podporou ověřování Microsoft Entra.

Příklad: Přístup k objektům blob pomocí Microsoft Entra ID

from azure.identity import DefaultAzureCredential
from azure.storage.blob import BlobServiceClient

credential = DefaultAzureCredential()
client = BlobServiceClient(account_url="https://<account-name>.blob.core.windows.net", credential=credential)
containers = client.list_containers()
for container in containers:
    print(container.name)

Nahraďte <account-name> názvem svého účtu služby Azure Storage.

Azure Key Vault

Pro konzistenci používejte RBAC místo starších zásad přístupu. Zásady přístupu se stále podporují, ale nejsou upřednostňované.

Příklad: Načtení tajného kódu

from azure.identity import DefaultAzureCredential
from azure.keyvault.secrets import SecretClient

credential = DefaultAzureCredential()
client = SecretClient(vault_url="https://<vault-name>.vault.azure.net", credential=credential)
secret = client.get_secret("my-secret")
print(secret.value)

Nahraďte <vault-name> názvem prostředku služby Key Vault.

Microsoft Graph

Používá obory OAuth 2.0 pro delegovaná oprávnění a aplikační oprávnění pro démonické aplikace. Zadejte obory, jak je znázorněno v předchozím příkladu.

Osvědčené postupy

  • Nejnižší oprávnění: Přiřaďte pouze potřebná oprávnění, například čtenář místo přispěvatele.
  • Preferujte RBAC: Zejména pro Key Vault, pro jednotné řízení přístupu.
  • Použití spravovaných identit: Vyhněte se správě přihlašovacích údajů v kódu.
  • Omezení oprávnění graphu: Pokud chcete minimalizovat rizika, požádejte o konkrétní obory.

Další kroky