Управляемые удостоверения в Контейнерах приложений
Управляемое удостоверение из идентификатора Microsoft Entra позволяет приложению-контейнеру получать доступ к другим защищенным ресурсам Microsoft Entra. Дополнительные сведения об управляемых удостоверениях в идентификаторе Microsoft Entra см. в разделе "Управляемые удостоверения" для ресурсов Azure.
Приложению-контейнеру можно предоставить два типа удостоверений:
- Назначаемое системой удостоверение привязывается к приложению-контейнеру и удаляется при удалении этого приложения. Приложение может иметь только одно назначаемое системой удостоверение.
- Назначаемое пользователем удостоверение — это автономный ресурс Azure, который можно назначить приложению контейнера и другим ресурсам. Приложение-контейнер может иметь несколько назначаемых пользователем удостоверений. Назначаемые пользователем удостоверения существуют до их удаления.
Для чего нужны управляемые удостоверения?
Управляемое удостоверение можно использовать в работающем приложении контейнера для проверки подлинности в любой службе, поддерживающей проверку подлинности Microsoft Entra.
При использовании управляемых удостоверений:
- приложение подключается к ресурсам с помощью управляемого удостоверения. Вам не нужно управлять учетными данными в приложении-контейнере.
- управление доступом на основе ролей можно использовать для предоставления определенных разрешений управляемому удостоверению;
- назначаемые системой удостоверения создаются и управляются автоматически. Они удаляются при удалении приложения-контейнера.
- вы можете добавлять и удалять удостоверения, назначаемые пользователем, и назначать их нескольким ресурсам. Они не зависят от жизненного цикла приложения контейнера.
- Управляемое удостоверение можно использовать для проверки подлинности с помощью частного Реестр контейнеров Azure без имени пользователя и пароля для извлечения контейнеров для приложения-контейнера.
- Управляемое удостоверение можно использовать для создания подключений для приложений с поддержкой Dapr с помощью компонентов Dapr.
Распространенные варианты использования
Удостоверения, назначаемые системой, лучше всего подходит для рабочих нагрузок, которые:
- содержатся в одном ресурсе;
- требуют независимых удостоверений.
Назначаемые пользователем удостоверения идеально подходят для рабочих нагрузок, которые:
- выполняются на нескольких ресурсах и могут совместно использовать одно удостоверение;
- требуют предварительной авторизации в защищенном ресурсе.
Ограничения
Контейнеры Init не могут получить доступ к управляемым удостоверениям в средах только для потребления и выделенных средах профиля рабочей нагрузки
Настройка управляемых удостоверений
Доступны следующие способы настройки управляемых удостоверений:
- портала Azure
- Интерфейс командной строки Azure
- Шаблон Azure Resource Manager (ARM)
При добавлении, удалении или изменении управляемого удостоверения в работающем приложении-контейнере приложение не перезапускается автоматически, и новая редакция не создается.
Примечание.
При добавлении управляемого удостоверения в приложение-контейнер, развернутое до 11 апреля 2022 г., необходимо создать новую редакцию.
Добавление назначаемого системой удостоверения
Перейдите в приложение-контейнер в портал Azure.
В группе "Параметры" выберите "Удостоверение".
На вкладке Назначено системой для параметра Состояние установите значение Вкл.
Выберите Сохранить.
Добавление назначаемого пользователем удостоверения
Для настройки приложения-контейнера с удостоверением, назначаемым пользователем, необходимо сначала создать удостоверение, а затем добавить его идентификатор ресурса в конфигурацию приложения-контейнера. Удостоверения, назначаемые пользователем, можно создать с помощью портала Azure или Azure CLI. Сведения о создании назначаемых пользователем удостоверений и управлении ими см. в статье Администрирование управляемых удостоверений, назначаемых пользователем.
Сначала необходимо создать ресурс назначаемого пользователем удостоверения.
Создайте ресурс управляемого удостоверения, назначаемого пользователем, в соответствии с инструкциями, описанными в статье Администрирование управляемых удостоверений, назначаемых пользователем.
Перейдите в приложение-контейнер в портал Azure.
В группе "Параметры" выберите "Удостоверение".
На вкладке Назначено пользователем выберите Добавить.
Найдите и выберите удостоверение, созданное ранее.
Выберите Добавить.
Настройка целевого ресурса
Для некоторых ресурсов необходимо настроить назначения ролей для управляемого удостоверения приложения для предоставления доступа. В противном случае вызовы из приложения в службы, такие как Azure Key Vault и База данных SQL Azure, отклоняются даже при использовании допустимого маркера для этого удостоверения. Дополнительные сведения об управлении доступом на основе ролей Azure (Azure RBAC) см. в этой статье. Дополнительные сведения о том, какие ресурсы поддерживают токены Microsoft Entra, см. в службах Azure, поддерживающих проверку подлинности Microsoft Entra.
Внимание
Внутренние службы управляемых удостоверений поддерживают кэш для каждого URI-адреса ресурса в течение около 24 часов. Если вы обновляете политику доступа для определенного целевого ресурса и сразу получаете маркер для этого ресурса, вы можете постоянно получать кэшированный маркер с устаревшими разрешениями до тех пор, пока не истечет срок действия этого маркера. Принудительное обновление маркера не поддерживается.
Подключение к службам Azure в коде приложения
С помощью управляемых удостоверений приложение может получить маркеры для доступа к ресурсам Azure, используюющим идентификатор Microsoft Entra ID, например База данных SQL Azure, Azure Key Vault и служба хранилища Azure. Эти маркеры представляют приложение, получающее доступ к ресурсам, а не конкретного пользователя приложения.
Контейнеры приложений предоставляют внутреннюю конечную точку REST для получения маркеров. Конечная точка REST доступна в приложении со стандартным HTTP-запросом GET
, который можно отправить с помощью универсального HTTP-клиента на предпочитаемом языке. Для .NET, JavaScript, Java и Python клиентская библиотека удостоверений Azure предоставляет абстракцию для этой конечной точки REST. Вы можете подключиться к другим службам Azure, добавив объект учетных данных в клиент конкретной службы.
Примечание.
При использовании клиентской библиотеки удостоверений Azure необходимо явно указать идентификатор клиента управляемого удостоверения, назначаемого пользователем.
Примечание.
При подключении к источникам данных Azure SQL с помощью Entity Framework Core рекомендуется использовать Microsoft.Data.SqlClient, который предоставляет специальные строки подключения для подключения с помощью управляемого удостоверения.
Для приложений .NET самый простой способ работы с управляемым удостоверением заключается в использовании клиентской библиотеки удостоверений Azure для .NET. Дополнительную информацию можно найти в следующих ресурсах:
- Добавление клиентской библиотеки удостоверений Azure в проект
- Доступ к службе Azure с помощью удостоверения, назначаемого системой
- Доступ к службе Azure с помощью удостоверения, назначаемого пользователем
В связанных примерах используется DefaultAzureCredential
. Этот объект действует в большинстве сценариев, так как тот же шаблон работает в Azure (с управляемыми удостоверениями) и на локальном компьютере (без управляемых удостоверений).
Использование управляемого удостоверения для правил масштабирования
Управляемые удостоверения можно использовать в правилах масштабирования для проверки подлинности с помощью служб Azure, поддерживающих управляемые удостоверения. Чтобы использовать управляемое удостоверение в правиле масштабирования, используйте identity
свойство вместо auth
свойства в правиле масштабирования. Допустимые значения для identity
свойства — это идентификатор ресурса Azure, назначаемого пользователем, или system
использовать назначаемое системой удостоверение.
Примечание.
Проверка подлинности управляемого удостоверения в правилах масштабирования доступна в общедоступной предварительной версии. Он доступен в версии 2024-02-02-preview
API.
В следующем примере шаблона ARM показано, как использовать управляемое удостоверение с правилом масштабирования хранилища очередей Azure:
Учетная запись хранения очереди использует accountName
свойство для идентификации учетной записи хранения, а identity
свойство указывает, какое управляемое удостоверение следует использовать. Не нужно использовать auth
свойство.
"scale": {
"minReplicas": 1,
"maxReplicas": 10,
"rules": [{
"name": "myQueueRule",
"azureQueue": {
"accountName": "mystorageaccount",
"queueName": "myqueue",
"queueLength": 2,
"identity": "<IDENTITY1_RESOURCE_ID>"
}
}]
}
Дополнительные сведения об использовании управляемого удостоверения с правилами масштабирования см. в статье "Настройка правил масштабирования" в приложениях контейнеров Azure.
Управление доступностью управляемого удостоверения
Контейнерные приложения позволяют указывать контейнеры и основные контейнеры инициализации. По умолчанию как основные, так и инициативные контейнеры в среде профиля рабочей нагрузки потребления могут использовать управляемое удостоверение для доступа к другим службам Azure. В средах только для потребления и выделенных средах профиля рабочей нагрузки только основные контейнеры могут использовать управляемое удостоверение. Маркеры доступа к управляемым удостоверениям доступны для каждого управляемого удостоверения, настроенного в приложении-контейнере. Однако в некоторых ситуациях только контейнер инициализации или основной контейнер требуют маркеры доступа для управляемого удостоверения. В других случаях можно использовать управляемое удостоверение только для доступа к Реестр контейнеров Azure для извлечения образа контейнера, и самому приложению не требуется доступ к Реестр контейнеров Azure.
Начиная с версии 2024-02-02-preview
API, вы можете контролировать, какие управляемые удостоверения доступны приложению-контейнеру во время инициализации и основных этапов, чтобы следовать принципу безопасности наименьших привилегий. Имеются следующие варианты:
Init
: доступно только для контейнеров инициализации. Используйте это, если требуется выполнить некоторые операции инициализации, для которой требуется управляемое удостоверение, но в основном контейнере больше не требуется управляемое удостоверение. Этот параметр в настоящее время поддерживается только в средах потребления профиля рабочей нагрузкиMain
: доступно только для основных контейнеров. Используйте это, если контейнер init не нуждается в управляемом удостоверении.All
: доступно для всех контейнеров. Это значение является настройкой по умолчанию.None
: недоступно для контейнеров. Используйте это, если у вас есть управляемое удостоверение, которое используется только для извлечения изображений ACR, правил масштабирования или секретов Key Vault и не должно быть доступным для кода, выполняемого в контейнерах.
В следующем примере шаблона ARM показано, как настроить приложение-контейнер в среде потребления профиля рабочей нагрузки, которая:
- Ограничивает назначаемое системой удостоверение приложения контейнера только основным контейнерам.
- Ограничивает определенное удостоверение, назначаемое пользователем, только для контейнеров инициализации.
- Использует определенное удостоверение, назначаемое пользователем, для извлечения образа Реестр контейнеров Azure без разрешения кода в контейнерах использовать управляемое удостоверение для доступа к реестру. В этом примере сами контейнеры не нуждаются в доступе к реестру.
Этот подход ограничивает доступ к ресурсам, к которым можно получить доступ, если злоумышленник должен был получить несанкционированный доступ к контейнерам.
{
"location": "eastus2",
"identity":{
"type": "SystemAssigned, UserAssigned",
"userAssignedIdentities": {
"<IDENTITY1_RESOURCE_ID>":{},
"<ACR_IMAGEPULL_IDENTITY_RESOURCE_ID>":{}
}
},
"properties": {
"workloadProfileName":"Consumption",
"environmentId": "<CONTAINER_APPS_ENVIRONMENT_ID>",
"configuration": {
"registries": [
{
"server": "myregistry.azurecr.io",
"identity": "ACR_IMAGEPULL_IDENTITY_RESOURCE_ID"
}],
"identitySettings":[
{
"identity": "ACR_IMAGEPULL_IDENTITY_RESOURCE_ID",
"lifecycle": "None"
},
{
"identity": "<IDENTITY1_RESOURCE_ID>",
"lifecycle": "Init"
},
{
"identity": "system",
"lifecycle": "Main"
}]
},
"template": {
"containers":[
{
"image":"myregistry.azurecr.io/main:1.0",
"name":"app-main"
}
],
"initContainers":[
{
"image":"myregistry.azurecr.io/init:1.0",
"name":"app-init",
}
]
}
}
}
Просмотр управляемых удостоверений
Управляемые удостоверения, назначаемые системой и назначаемые пользователем, можно отобразить с помощью следующей команды Azure CLI. В выходных данных показаны идентификаторы управляемых удостоверений, идентификаторы клиентов и субъекты всех управляемых удостоверений, назначенных приложению контейнера.
az containerapp identity show --name <APP_NAME> --resource-group <GROUP_NAME>
Удаление управляемого удостоверения
При удалении назначаемого системой удостоверения он удаляется из идентификатора Microsoft Entra. Назначаемые системой удостоверения также автоматически удаляются из идентификатора Microsoft Entra при удалении самого ресурса приложения контейнера. Удаление управляемых удостоверений, назначаемых пользователем, из приложения контейнера не удаляет их из идентификатора Microsoft Entra.
В левой области навигации на странице вашего приложения прокрутите вниз до группы Параметры.
Выберите Удостоверение. Затем выполните следующие действия в зависимости от типа удостоверения.
- Удостоверение, назначаемое системой: на вкладке Назначается системой переключите состояние на Off. Выберите Сохранить.
- Удостоверение, назначаемое пользователем: перейдите на вкладку Назначается пользователем, установите флажок для удостоверения и нажмите Удалить. Выберите Да для подтверждения.