Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Авторизация в Azure определяет, какие действия могут выполнять пользователи или службы, прошедшие проверку подлинности, в ресурсах. В этой статье описывается, как реализовать авторизацию с помощью пакета SDK Azure для Python, охватывающих модели, реализацию, устранение неполадок и рекомендации. Подробные сведения о настройке проверки подлинности см. в статье "Проверка подлинности приложений Python в Azure".
Введение
Проверка подлинности (AuthN) проверяет удостоверение пользователя или службы, а авторизация (AuthZ) определяет, что они могут сделать. В Azure авторизация обеспечивает безопасный доступ к ресурсам, критически важный для защиты приложений и данных. Разработчики могут реализовать надежную авторизацию с помощью пакета SDK Azure для Python для управления доступом в различных рабочих процессах, от управления ресурсами до доступа к данным конкретной службы.
Модели авторизации Azure
Azure предоставляет несколько механизмов авторизации для управления доступом. Понимание этих моделей важно для эффективного управления доступом.
Управление доступом на основе ролей в Azure
Azure управление доступом на основе ролей (RBAC) назначает роли идентификациям в таких областях, как подписки или группы ресурсов. Предопределенные роли включают владельца, соавтора и читателя, а пользовательские роли разрешают настраиваемые разрешения. При назначении роли в определенной области, идентификатор (например, пользователь или служба) получает права доступа ко всем ресурсам этой области и её дочерних областей. Например, назначение роли участника на уровне подписки позволяет управлять всеми ресурсами в этой подписке. Ознакомьтесь с областью действия Azure RBAC.
Механизмы для конкретной службы
Некоторые службы Azure предлагают уникальные методы авторизации:
- Служба хранилища Azure: использует подписанные URL-адреса (SAS) и списки управления доступом (ACL) для доступа к данным. См заметки об авторизации для определённых служб для служба хранилища Azure.
- Azure Key Vault. Рекомендуется использовать RBAC для устаревших политик доступа. См. заметки об авторизации, относящиеся к конкретным сервисам для Azure Key Vault.
- Microsoft Graph: использует права доступа OAuth 2.0 и разрешения приложения. См. специальные примечания по авторизации для Microsoft Graph.
Использование авторизации в пакете SDK Azure для Python
Пакет SDK Azure для Python обеспечивает встроенную поддержку обработки проверки подлинности и авторизации с помощью azure-identity пакета. Класс DefaultAzureCredential поддерживает различные механизмы проверки подлинности, такие как управляемые идентификации и служебные принципы, адаптируясь к различным средам.
Пример. Перечисление групп ресурсов
В этом примере показано, как пакет SDK Azure для Python использует учетные данные (через DefaultAzureCredential) для проверки подлинности и как авторизация определяет, может ли удостоверение успешно перечислять группы ресурсов. Если учетная запись не имеет роли Читателя или более высокой роли в рамках подписки или группы ресурсов, этот вызов вызывает ошибку "403 Запрещено".
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)
Замените <subscription-id> идентификатором подписки Azure, который обычно находится в форме 00000000-0000-0000-0000-000000000000.
Microsoft Graph с областями
Чтобы получить доступ к Microsoft Graph, используйте официальный пакет SDK Microsoft Graph для Python, который поддерживает как делегированные, так и разрешения приложения.
В этом примере показано, как SDK использует учетные данные для запроса токена доступа с требуемой областью авторизации https://graph.microsoft.com/.default и получения доступа к ресурсам Microsoft Graph. Удостоверение должно быть авторизовано в идентификаторе Microsoft Entra с соответствующими разрешениями приложения (например User.Read.All, для получения данных пользователя; в противном случае запрос завершается ошибкой 403 Запрещено).
Это важно
Убедитесь, что ваше приложение или удостоверение имеет User.Read.All или другие требуемые разрешения, предоставленные в Microsoft Entra ID.
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"])
Дополнительные сведения об этом пакете SDK см. в официальном руководстве по созданию приложений Python с помощью Microsoft Graph .
Диагностика ошибок авторизации
Проблемы с авторизацией часто вызывают ошибки HTTP 403 "Запрещено", которые указывают на недостаточно разрешений. Чтобы диагностировать эти проблемы, выполните следующие действия.
Проверьте сообщения об ошибках: просмотрите ответ на сведения о отсутствующих разрешениях.
Включение ведения журнала: используйте Python ведение журнала для проверки запросов и ответов.
import logging logging.basicConfig(level=logging.DEBUG)Проверка доступа. Используйте Azure CLI или портал Azure для проверки назначений ролей.
az role assignment list --assignee <principal-id> --scope <scope>Замените
<principal-id>объектным идентификатором пользователя, служебного принципала или управляемого удостоверения. Замените<scope>областью ресурсов Azure, например идентификатор подписки, имя группы ресурсов или ресурс. См. статью "Работа с областями".
Работа с областями
Часто необходимо указать область, например в следующем примере:
az role assignment list \
--assignee <principal-id> \
--scope <scope>
Ниже приведены некоторые распространенные форматы области применения:
| Уровень области | Пример значения |
|---|---|
| Subscription | /subscriptions/<subscription-id> |
| Группа ресурсов | /subscriptions/<subscription-id>/resourceGroups/<resource-group-name> |
| Имя ресурса | /subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/<provider-namespace>/<resource-type>/<resource-name> |
Например, чтобы перечислить все назначения ролей для управляемого удостоверения на уровне группы ресурсов:
az role assignment list \
--assignee 12345678-90ab-cdef-1234-567890abcdef \
--scope /subscriptions/<subscription-id>/resourceGroups/my-resource-group
Или на уровне подписки:
az role assignment list \
--assignee 12345678-90ab-cdef-1234-567890abcdef \
--scope /subscriptions/<subscription-id>
Чтобы получить идентификатор объекта (<principal-id>) пользователя или управляемого удостоверения, используйте следующую команду:
az ad user show --id <user-email> --query id
az identity show --name <identity-name> --resource-group <rg-name> --query principalId
Управление доступом
Управляйте доступом, используя назначения ролей:
Портал Azure: добавьте роли через меню службы Управление доступом (IAM).
Azure CLI:
az role assignment create --assignee <principal-id> --role <role-name> --scope <scope>Замените
<principal-id>объектным идентификатором пользователя, служебного принципала или управляемого удостоверения. Замените<scope>областью ресурсов Azure, например идентификатор подписки, имя группы ресурсов или имя ресурса. См. статью "Работа с областями".Шаблоны ARM: используйте для декларативного управления.
Для управляемой идентификации наделите роли идентификациям, связанным с ресурсами, такими как виртуальные машины. Используйте функцию проверки доступа на портале Azure или Azure CLI, чтобы проверить действующие разрешения.
Заметки о авторизации для конкретной службы
В разделе "Механизмы, относящиеся к службе", вы узнали, что некоторые службы Azure предлагают уникальные методы авторизации. В этом разделе приведены дополнительные сведения для каждого из трех упомянутых служб Azure.
служба хранилища Azure
- RBAC: управляет операциями плоскости управления.
- SAS и списки управления доступом (ACL): поддержка доступа к каналу передачи данных с поддержкой проверки подлинности Microsoft Entra.
Пример. Доступ к BLOB-объектам с помощью идентификатора Microsoft Entra
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)
Замените <account-name> имя учетной записи хранения Azure.
Azure Key Vault
Используйте RBAC вместо устаревших политик доступа для согласованности. Политики доступа по-прежнему поддерживаются, но не предпочтительны.
Пример. Получение секрета
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)
Замените <vault-name> на имя вашего ресурса Key Vault.
Microsoft Graph
Использует области OAuth 2.0 для делегированных разрешений и разрешений приложений для приложений управляющей программы. Укажите области применения, как показано в предыдущем примере.
Лучшие практики
- Принцип наименьших привилегий: назначайте только необходимые права, например роль Reader вместо Contributor.
- Предпочитайте RBAC: особенно для Key Vault для единого управления доступом.
- Используйте управляемые удостоверения: избегайте управления учетными данными в коде.
- Ограничение разрешений Graph: запрос конкретных областей, чтобы свести к минимуму риски.