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

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

Риски безопасности, связанные с ключами доступа

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

await using ServiceBusClient client = new("<CONNECTION-STRING>");

строки Подключение ion следует использовать с осторожностью. Разработчики должны уделять внимание тому, чтобы не раскрыть ключи в незащищенном расположении. Все лица, получающие доступ к ключу, могут пройти аутентификацию. Например, если ключ учетной записи случайно помещается в систему управления версиями, отправляется через незащищенную электронную почту, вставляется в некорректный чат или просматривается пользователем без разрешений, возникает риск доступа к приложению злоумышленником. Вместо этого рекомендуется обновить приложение для использования подключений без пароля.

Переход на подключения без пароля

Многие службы Azure поддерживают бессерверные подключения с помощью идентификатора Microsoft Entra и управления доступом на основе ролей (RBAC). Эти методы предоставляют надежные функции безопасности и могут быть реализованы с помощью DefaultAzureCredential из клиентских библиотек удостоверений Azure.

Важно!

Некоторые языки должны явно реализовать DefaultAzureCredential в своем коде, а другие используют DefaultAzureCredential внутренне через базовые подключаемые модули или драйверы.

DefaultAzureCredential поддерживает несколько способов проверки подлинности и автоматически определяет, какой из них следует использовать в среде выполнения. Такой подход позволяет приложению использовать различные способы аутентификации в разных средах (локальная среда разработки и рабочая среда) без реализации кода для конкретной среды.

Порядок и расположения, в которых DefaultAzureCredential выполняет поиск учетных данных, можно найти в обзоре библиотеки удостоверений Azure (зависят от языка). Например, при локальной работе с .NET DefaultAzureCredential обычно выполняет проверку подлинности с помощью учетной записи разработчика, используемой для входа в Visual Studio, Azure CLI или Azure PowerShell. При развертывании приложения в Azure DefaultAzureCredential автоматически обнаруживает и использует управляемое удостоверение связанной службы размещения, например службу приложение Azure. Для такого перехода не требуется изменять код.

Примечание.

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

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

Приложение .NET может передать экземпляр DefaultAzureCredential в конструктор клиентского класса службы. DefaultAzureCredential будет автоматически обнаруживать учетные данные, доступные в такой среде.

ServiceBusClient serviceBusClient = new(
    new Uri($"https://{serviceBusNamespace}.blob.core.windows.net"),
    new DefaultAzureCredential());

Действия по переносу приложения для использования аутентификации без пароля

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

Настройка ролей и пользователей для аутентификации локальной разработки

При разработке локально убедитесь, что учетная запись пользователя, доступ к служебная шина имеет правильные разрешения. В этом примере вы будете использовать роль владельца данных Служебная шина Azure для отправки и получения данных, хотя и более детализированные роли также доступны. Чтобы назначить себе эту роль, вам потребуется назначить роль Администратор istrator для доступа пользователей или другую роль, включающую действие Microsoft.Authorization/roleAssignments/write. Роли Azure RBAC можно назначить пользователю с помощью портала Azure, Azure CLI или Azure PowerShell. Дополнительные сведения о доступных областях назначения ролей можно узнать на странице обзора области.

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

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

Важно!

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

  1. В портал Azure найдите пространство имен служебная шина с помощью основной панели поиска или навигации слева.

  2. На странице обзора служебная шина выберите элемент управления доступом (IAM) в меню слева.

  3. На странице Контроль доступа (IAM) откройте вкладку Назначения ролей.

  4. Выберите + Добавить в верхнем меню, а затем выберите Добавить назначение роли в появившемся раскрывающемся меню.

    A screenshot showing how to assign a role.

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

  6. В разделе Назначение доступа для выберите Пользователь, группа или субъект-служба и + Выбрать членов.

  7. В диалоговом окне найдите имя пользователя Microsoft Entra (обычно ваш user@domain адрес электронной почты), а затем выберите в нижней части диалогового окна.

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

Вход и перенос кода приложения для использования подключений без пароля

Для локальной разработки убедитесь, что вы прошли проверку подлинности с той же учетной записью Microsoft Entra, которую вы назначили роли для пространства имен служебная шина. Аутентификацию можно выполнить с помощью Azure CLI, Visual Studio, Azure PowerShell или других средств, таких как IntelliJ.

Для локальной разработки убедитесь, что вы прошли проверку подлинности с той же учетной записью Microsoft Entra, которую вы назначили роли. Вы можете пройти проверку подлинности с помощью популярных средств разработки, таких как Azure CLI или Azure PowerShell. Средства разработки, с помощью которых можно пройти проверку подлинности на разных языках.

Войдите в Azure с помощью Azure CLI, выполнив следующую команду:

az login

Затем обновите код, чтобы использовать бессерверные подключения.

  1. Чтобы использовать DefaultAzureCredential в приложении .NET, установите Azure.Identity пакет:

    dotnet add package Azure.Identity
    
  2. В верхней части файла добавьте следующий код:

    using Azure.Identity;
    
  3. Определите код, создающий ServiceBusClient объект для подключения к Служебная шина Azure. Обновите свой код, чтобы он соответствовал следующему примеру:

     var serviceBusNamespace = $"https://{namespace}.servicebus.windows.net";
     ServiceBusClient client = new(
         serviceBusNamespace,
         new DefaultAzureCredential());
    

Локальный запуск приложения

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

Настройка среды размещения Azure

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

Создание управляемого удостоверения с помощью портала Azure

Ниже показано, как создать управляемое удостоверение, назначаемое системой, для различных веб-служб размещения. Управляемое удостоверение может безопасно подключаться к другим службам Azure с помощью конфигураций приложений, настроенных ранее.

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

В настоящее время поддерживаются следующие службы вычислений:

  • Служба приложений Azure
  • Azure Spring Cloud
  • Приложения-контейнеры Azure (предварительная версия)

В этом руководстве по миграции вы будете использовать Служба приложений, но шаги похожи на Azure Spring Apps и приложения контейнеров Azure.

Примечание.

В настоящее время Azure Spring Apps поддерживает только соединитель сервисов с использованием строк подключения.

  1. На главной странице обзора Службы приложений выберите Соединитель сервисов в области навигации слева.

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

    • Тип службы: выбор служебной шины.
    • Подписка: выберите идентификатор подписки, которую вы хотите использовать.
    • имя Подключение ion: введите имя подключения, например connector_appservice_servicebus.
    • Тип клиента: оставьте значение по умолчанию или выберите определенный клиент.

    Выберите Далее: проверка подлинности.

  3. Убедитесь, что выбран вариант Управляемое удостоверение, назначаемое системой (рекомендуется), а затем нажмите кнопку Далее: Сеть.

  4. Оставьте выбранные значения по умолчанию и нажмите кнопку Далее: Просмотр и создание.

  5. После проверки параметров Azure нажмите кнопку "Создать".

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

Кроме того, можно включить управляемое удостоверение в среде размещения Azure с помощью Azure CLI.

Вы можете использовать службу Подключение or для создания подключения между средой размещения вычислений Azure и целевой службой с помощью Azure CLI. Интерфейс командной строки автоматически создает управляемое удостоверение и назначает соответствующую роль, как описано в инструкциях для портала.

Если вы используете службу приложение Azure, используйте az webapp connection команду:

az webapp connection create servicebus \
    --resource-group <resource-group-name> \
    --name <webapp-name> \
    --target-resource-group <target-resource-group-name> \
    --namespace <target-service-bus-namespace> \
    --system-identity

Если вы используете Azure Spring Apps, используйте az spring connection команду:

az spring connection create servicebus \
    --resource-group <resource-group-name> \
    --service <service-instance-name> \
    --app <app-name> \
    --deployment <deployment-name> \
    --target-resource-group <target-resource-group> \
    --namespace <target-service-bus-namespace> \
    --system-identity

Если вы используете приложения контейнеров Azure, используйте следующую az containerapp connection команду:

az containerapp connection create servicebus \
    --resource-group <resource-group-name> \
    --name <webapp-name> \
    --target-resource-group <target-resource-group-name> \
    --namespace <target-service-bus-namespace> \
    --system-identity

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

Затем необходимо предоставить разрешения управляемому удостоверению, созданному для доступа к служебная шина. Это можно сделать, назначив роль управляемому удостоверению (аналогично назначению роли для локального пользователя разработки).

Если вы подключили службы с помощью Подключение службы, вам не нужно выполнить этот шаг. Нужные конфигурации уже были подготовлены для вас:

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

  • Если вы выбрали строку подключения, она была добавлена в качестве переменной среды приложения.

Тестирование приложения

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

Следующие шаги

Из этого учебника вы узнали, как выполнить переход приложения на подключение без пароля.