Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
При размещении приложения в Azure с помощью таких служб, как служба приложений Azure, Виртуальные машины Azure или Контейнерные экземпляры Azure, рекомендуется использовать управляемое удостоверение для аутентификации приложения в ресурсах Azure.
Управляемое удостоверение предоставляет удостоверение для приложения, которое может подключаться к другим ресурсам Azure без необходимости использовать секретный ключ или другой секрет приложения. Внутренне Azure знает идентичность вашего приложения и ресурсы, к которым у него есть разрешение на подключение. Azure использует эти сведения для автоматического получения токенов Microsoft Entra для приложения, чтобы разрешить ему подключаться к другим ресурсам Azure без необходимости управлять секретами приложений.
Примечание.
Приложения, работающие в Службе Azure Kubernetes (AKS), могут использовать удостоверение рабочей нагрузки для проверки подлинности с помощью ресурсов Azure. В AKS идентификатор рабочей нагрузки представляет доверительные отношения между управляемым идентификатором и учетной записью службы Kubernetes. Если приложение, развернутое в AKS, настроено с учетной записью службы Kubernetes в такой связи, DefaultAzureCredential
выполняет проверку подлинности приложения в Azure с помощью управляемого удостоверения. Проверка подлинности с помощью удостоверения рабочей нагрузки обсуждается в разделе «Использование удостоверения рабочей нагрузки Microsoft Entra с Azure Kubernetes Service». Инструкции по настройке удостоверения рабочей нагрузки см. в статье Развертывание и настройка удостоверения рабочей нагрузки в кластере Службы Azure Kubernetes (AKS).
Типы управляемых удостоверений
Существует два типа управляемых учетных записей:
- Назначаемые системой управляемые удостоверения. Этот тип управляемого удостоверения предоставляется и привязан непосредственно к ресурсу Azure. При включении управляемого удостоверения в ресурсе Azure вы получите назначаемое системой управляемое удостоверение для этого ресурса. Системно назначаемое управляемое удостоверение привязано к жизненному циклу ресурса Azure, с которым оно связано. При удалении ресурса Azure автоматически удаляет идентификацию. Так как необходимо включить управляемое удостоверение для ресурса Azure, в котором размещен код, этот подход является самым простым типом управляемого удостоверения для использования.
- Назначаемые пользователем управляемые удостоверения. Вы также можете создать управляемое удостоверение как самостоятельный ресурс Azure. Этот подход чаще всего используется при наличии нескольких рабочих нагрузок, которые выполняются в нескольких ресурсах Azure, которые должны совместно использовать одинаковые удостоверения и одинаковые разрешения. Например, если у вашего решения есть компоненты, работающие на нескольких экземплярах Служб приложений и виртуальных машин, которым требуется доступ к одному и тому же набору ресурсов Azure, то имеет смысл использовать управляемое удостоверение, назначаемое пользователем, для доступа ко всем этим ресурсам.
В этой статье рассматриваются действия по включению и использованию управляемого удостоверения, назначаемого системой, для приложения. Если вам нужно использовать управляемое удостоверение, назначаемое пользователем, см. статью "Управление назначаемыми пользователем управляемыми удостоверениями ", чтобы узнать, как создать управляемое удостоверение, назначаемое пользователем.
1. Включите управляемую идентификацию в ресурсе Azure, который размещает приложение
Первым шагом является включение управляемого удостоверения в ресурсе Azure, в котором размещено приложение. Например, если вы размещаете приложение Django с помощью службы приложений Azure, необходимо включить управляемое удостоверение для веб-приложения этой службы, в котором размещено ваше приложение. Если вы используете виртуальную машину для размещения приложения, вы позволите виртуальной машине использовать управляемое удостоверение.
Вы можете включить управляемое удостоверение для ресурса Azure с использованием портала Azure или Azure CLI.
Команды Azure CLI могут выполняться в Azure Cloud Shell или на рабочей станции с установленным интерфейсом Azure CLI.
Команды Azure CLI, которые используются для включения управляемого удостоверения для ресурса Azure, имеют вид az <command-group> identity --resource-group <resource-group-name> --name <resource-name>
. Ниже приведены определенные команды для популярных служб Azure.
az webapp identity assign --resource-group <resource-group-name> --name <web-app-name>
Выходные данные будут выглядеть следующим образом.
{
"principalId": "aaaaaaaa-bbbb-cccc-1111-222222222222",
"tenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
"type": "SystemAssigned",
"userAssignedIdentities": null
}
Это principalId
значение является уникальным идентификатором управляемого удостоверения. Сохраните копию этих выходных данных, так как эти значения потребуются на следующем шаге.
2. Назначение ролей управляемому удостоверению
Затем необходимо определить, какие роли (разрешения) требуется вашему приложению, и назначить управляемое удостоверение этим ролям в Azure. Управляемому удостоверению могут быть назначены роли на уровне ресурса, группы ресурсов или подписки. В этом примере показано, как назначать роли в области группы ресурсов, поскольку большинство приложений группируют все ресурсы Azure в одну группу ресурсов.
Управляемая идентификация назначается в роли в Azure с помощью команды az role assignment create. Для назначаемого пользователя используйте скопированные principalId
на шаге 1.
az role assignment create --assignee <managedIdentityprincipalId> \
--scope /subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName> \
--role "<roleName>"
Чтобы узнать имена ролей, которым может быть назначен служебный принципал, используйте команду az role definition list.
az role definition list \
--query "sort_by([].{roleName:roleName, description:description}, &roleName)" \
--output table
Например, чтобы разрешить управляемому удостоверению с идентификатором aaaaaaaa-bbbb-cccc-1111-222222222222
чтение, запись и удаление доступа к контейнерам BLOB-объектов и данным во всех учетных записях хранилища Azure в группе ресурсов msdocs-python-sdk-auth-example в подписке с идентификатором aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e
, вы назначите главный объект службы приложения на роль участника данных BLOB-объектов хранилища с помощью следующей команды.
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"
Сведения о назначении разрешений на уровне ресурса или подписки с помощью Azure CLI см. в статье "Назначение ролей Azure с помощью Azure CLI".
3. Реализация DefaultAzureCredential в приложении
Если ваш код запущен в Azure и управляемое удостоверение включено на ресурсе Azure, где размещено ваше приложение, DefaultAzureCredential
учетные данные определяются в следующем порядке:
- Проверьте среду для субъекта-службы, определяемую переменными среды
AZURE_CLIENT_ID
,AZURE_TENANT_ID
и либоAZURE_CLIENT_SECRET
, либоAZURE_CLIENT_CERTIFICATE_PATH
, и (при необходимости)AZURE_CLIENT_CERTIFICATE_PASSWORD
. - Проверьте параметры ключевых слов для управляемого удостоверения, назначенного пользователем. Управляемое удостоверение, назначаемое пользователем, можно передать, указав его идентификатор клиента в параметре
managed_identity_client_id
. -
AZURE_CLIENT_ID
Проверьте переменную среды для идентификатора клиента управляемого удостоверения, назначаемого пользователем. - Если он включен, используйте управляемое удостоверение, назначаемое системой, для ресурса Azure.
Вы можете исключить управляемые удостоверения из учетных данных, задав параметр exclude_managed_identity_credential
ключевого True
слова.
В этой статье мы используем управляемое удостоверение, назначаемое системой, для веб-приложения службы приложение Azure, поэтому нам не нужно настраивать управляемое удостоверение в среде или передавать его в качестве параметра. В следующих шагах показано, как использовать DefaultAzureCredential
.
Сначала добавьте azure.identity
пакет в приложение.
pip install azure-identity
Затем для любого кода Python, создающего клиентский объект Azure SDK в приложении, вам потребуется:
-
DefaultAzureCredential
Импортируйте класс изazure.identity
модуля. - Создание объекта
DefaultAzureCredential
. - Передайте объект конструктору
DefaultAzureCredential
клиентского объекта пакета SDK Azure.
Пример этих шагов показан в следующем сегменте кода.
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)
Как описано в статье о проверке подлинности Azure SDK для Python, DefaultAzureCredential
поддерживает несколько методов проверки подлинности и определяет метод проверки подлинности, используемый во время выполнения. Преимуществом этого подхода является то, что приложение может использовать различные методы проверки подлинности в разных средах без реализации кода для конкретной среды. Если предыдущий код выполняется на рабочей станции во время локальной разработки, DefaultAzureCredential
будет использовать либо основной субъект службы приложения, как определено параметрами среды, либо учетные данные средства разработчика для аутентификации с другими ресурсами Azure. Таким образом, один и тот же код можно использовать для проверки подлинности приложения в ресурсах Azure во время локальной разработки и при развертывании в Azure.