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.
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.