Проверка подлинности управляемого удостоверения с помощью Azure Active Directory для доступа к ресурсам Служебной шины Azure

Управляемые удостоверения для ресурсов Azure — это функция Azure, которая позволяет создавать удостоверения безопасности, связанные с развертыванием, в рамках которого выполняется код приложения. Затем можно связать этот идентификатор с ролями управления доступом, предоставляющими настраиваемые разрешения для доступа к определенным ресурсам Azure, необходимым приложению.

С помощью управляемых удостоверений платформа Azure управляет этим идентификатором среды выполнения. Ключи доступа не нужно хранить и защищать в коде приложений или конфигурации ни для удостоверения, ни для ресурсов, к которым необходимо получить доступ. Клиентскому приложению "Служебная шина Azure", которое выполняется в приложении Службы приложений Azure или на виртуальной машине с включенной поддержкой управляемых удостоверений для ресурсов Azure, не нужно обрабатывать правила и ключи SAS или любые другие маркеры доступа. Клиентскому приложению достаточно только адреса конечной точки пространства имен служебной шины для обмена сообщениями. При подключении приложения служебная шина привязывает контекст управляемого удостоверения к клиенту в операции, показанной в примере далее в этой статье. Как только он будет связан с управляемым удостоверением, клиент Служебной шины Azure сможет выполнять все авторизованные операции. Авторизация выполняется путем привязывания управляемого удостоверения к ролям служебной шины.

Важно!

Вы можете отключить локальную проверку подлинности или проверку подлинности на основе ключа SAS для пространства имен Служебной шины и разрешить только проверку подлинности Azure Active Directory. Пошаговые инструкции см. в разделе Отключение локальной проверки подлинности.

Обзор

Когда участник безопасности (пользователь, группа или приложение) пытается получить доступ к объекту служебной шины, запрос должен быть авторизован. В Azure AD доступ к ресурсу выполняется в два этапа.

  1. Сначала удостоверяется личность участника безопасности, и возвращается токен OAuth 2.0. Имя ресурса для запроса токена — https://servicebus.azure.net.
  2. Затем маркер передается как часть запроса к службе служебной шины для авторизации доступа к указанному ресурсу.

Для этапа аутентификации требуется, чтобы запрос от приложения содержал маркер доступа OAuth 2.0 в среде выполнения. Если приложение выполняется в сущности Azure, такой как виртуальная машина Azure, масштабируемый набор виртуальных машин или приложение-функция Azure, оно может использовать для доступа к ресурсам управляемое удостоверение.

На этапе авторизации участнику безопасности необходимо назначить одну или несколько ролей Azure. Служебная шина Azure предоставляет роли Azure, которые включают наборы разрешений для ресурсов служебной шины. Роли, назначаемые участнику безопасности, определяют разрешения, которые он будет иметь. Дополнительные сведения о назначении ролей Azure служебной шине Azure см. в разделе Встроенные роли Azure для служебной шины Azure.

Собственные приложения и веб-приложения, которые отправляют запросы к служебной шине, также могут авторизоваться с помощью Azure Active Directory. В этой статье показано, как запросить маркер доступа и использовать его для авторизации запросов к ресурсам служебной шины.

Назначение ролей Azure для прав доступа

Azure Active Directory (Azure AD) авторизует права доступа к защищенным ресурсам с помощью управления доступом на основе ролей Azure (Azure RBAC). Служебная шина Azure определяет набор встроенных ролей Azure, которые включают общие наборы разрешений, используемых для доступа к сущностям служебной шины, и вы также можете определить настраиваемые роли для доступа к данным.

Когда роль Azure назначается участнику безопасности Azure Active Directory, Azure предоставляет этому участнику безопасности доступ к этим ресурсам. Доступ может быть ограничен уровнем подписки, группой ресурсов или пространством имен служебной шины. Субъект безопасности Azure Active Directory может быть пользователем, группой, субъектом службы приложения или управляемым удостоверением для ресурсов Azure.

Встроенные роли Azure для служебной шины Azure

Для служебной шины Azure управление пространствами имен и всеми связанными ресурсами через портал Azure и API управления ресурсами Azure уже защищено с помощью модели Azure RBAC. Azure предоставляет следующие встроенные роли Azure для авторизации доступа к пространству имен служебной шины:

Область ресурса

Прежде чем назначить роль Azure субъекту безопасности, определите для него область доступа. Рекомендуется всегда предоставлять максимально узкие области.

В следующем списке описаны уровни, на которых вы можете ограничить доступ к ресурсам служебной шины, начиная с самой узкой области:

  • Очередь, тема или подписка: назначение роли применяется к определенному объекту служебной шины. В настоящее время портал Azure не поддерживает назначение пользователей/групп/управляемых удостоверений ролям служебной шины Azure на уровне подписки. Ниже приведен пример использования команды Azure CLI: az-role-assignment-create для назначения удостоверения роли Служебной шины Azure:

    az role assignment create \
        --role $service_bus_role \
        --assignee $assignee_id \
        --scope /subscriptions/$subscription_id/resourceGroups/$resource_group/providers/Microsoft.ServiceBus/namespaces/$service_bus_namespace/topics/$service_bus_topic/subscriptions/$service_bus_subscription
    
  • Пространство имен служебной шины: назначение роли охватывает всю топологию служебной шины в пространстве имен и связанной с ней группе потребителей.

  • Группа ресурсов: назначение ролей применяется ко всем ресурсам служебной шины в группе ресурсов.

  • Подписка: назначение ролей применяется ко всем ресурсам служебной шины во всех группах ресурсов в подписке.

Примечание

Имейте в виду, что распространение назначенных ролей Azure может занять до пяти минут.

Дополнительные сведения об определении встроенных ролей см. в разделе Общие сведения об определениях ролей. Дополнительные сведения о создании настраиваемых ролей Azure см. в разделе Настраиваемые роли Azure.

Включение управляемых удостоверений на виртуальной машине

Прежде, чем вы сможете использовать управляемые удостоверения для ресурсов Azure, чтобы авторизовать ресурсы служебной шины с виртуальной машины, нужно включить эти управляемые удостоверения для ресурсов Azure на виртуальной машине. Сведения о включении управляемых удостоверений для ресурсов Azure см. в одной из следующих статей.

Предоставление разрешений управляемому удостоверению в Azure AD

Чтобы авторизовать запрос к службе служебной шины от управляемого удостоверения в приложении, необходимо добавить управляемое удостоверение в роль RBAC служебной шины (владелец данных служебной шины Azure, отправитель данных служебной шины Azure, получатель данных служебной шины Azure) в соответствующей области (подписка, группа ресурсов или пространство имен). Если роль Azure назначается управляемому удостоверению, ему предоставляется доступ к сущностям Служебной шины в указанной области. Описание ролей служебной шины см. в разделе Встроенные роли Azure для служебной шины Azure. Дополнительные сведения о назначении ролей Azure см. в статье Проверка подлинности и авторизация с помощью Azure Active Directory для доступа к ресурсам Служебной шины.

Использование служебной шины с управляемыми удостоверениями для ресурсов Azure

Чтобы использовать Служебную шину с управляемыми удостоверениями, необходимо назначить удостоверению роль и соответствующую область. В процедуре в этом разделе используется простое приложение, которое выполняется под управляемым удостоверением и получает доступ к ресурсам Служебной шины.

Здесь мы используем пример веб-приложения, размещенного в Службе приложений Azure. Пошаговые инструкции по созданию веб-приложения см. в статье Создание веб-приложения ASP.NET Core в Azure.

После создания приложения выполните следующие действия.

  1. Перейдите в раздел Параметры и выберите Удостоверение.

  2. Для параметра Состояние выберите значение Включено.

  3. Нажмите кнопку Сохранить, чтобы сохранить параметры.

    Управляемое удостоверение для веб-приложения

После включения этого параметра удостоверение службы будет создано в Azure Active Directory (Azure AD) и настроено в узле Службы приложений.

Назначение ролей Azure с помощью портала Azure

Назначьте управляемому удостоверению службы одну из ролей служебной шины в нужной области (пространство имен служебной шины, группа ресурсов, подписка). Подробные инструкции см. в статье Назначение ролей Azure с помощью портала Microsoft Azure.

Примечание

Список служб, поддерживающих управляемые удостоверения, см. в статье Службы, которые поддерживают управляемые удостоверения для ресурсов Azure.

Запустите приложение

Теперь можно изменить стандартную страницу созданного вами приложения ASP.NET. Вы можете использовать код веб-приложения из этого репозитория GitHub.

Страница Default.aspx является целевой. Код можно найти в файле Default.aspx.cs. В результате вы получите самое простое веб-приложение с несколькими полями для ввода и кнопками отправки и получения, которые позволяют отправить сообщения в служебную шину или получить их оттуда.

Обратите внимание на то, как инициализируется объект ServiceBusClient с помощью конструктора, который принимает TokenCredential. DefaultAzureCredential является производным от TokenCredential и может передаваться здесь. Таким образом, нет никаких секретов для хранения и использования. Поток контекста управляемого удостоверения службы в служебную шину и подтверждение авторизации автоматически обрабатываются учетными данными маркера. Это является более простой моделью, чем использование SAS.

После внесения этих изменений опубликуйте и запустите приложение. Чтобы получить правильные данные публикации, скачайте их, а затем импортируйте профиль публикации в Visual Studio.

Скачать профиль публикации

Чтобы отправлять или получать сообщения, введите имя пространства имен и имя созданной сущности. Затем нажмите кнопки Отправить или Получить.

Примечание

  • Управляемое удостоверение работает только в среде Azure, в службах приложений, на виртуальных машинах Azure и масштабируемых наборах. Для приложений .NET библиотека Microsoft.Azure.Services.AppAuthentication, которая используется пакетом NuGet служебной шины, предоставляет абстракцию этого протокола и поддерживает локальную разработку. Эта библиотека также позволяет локально тестировать код на компьютере разработки с использованием учетной записи пользователя из Visual Studio, Azure CLI 2.0 или встроенной проверки подлинности Active Directory. Дополнительные сведения о параметрах локальной разработки с помощью этой библиотеки см. в руководстве по аутентификации между службами в Azure Key Vault с использованием .NET.

Дальнейшие действия

Дополнительные сведения об обмене сообщениями через служебную шину см. в следующих статьях: