Защита доступа к веб-серверу на основе виртуальных машин с помощью Azure Active Directory
Я пытаюсь добавить в Azure специальный веб-сервис. Он работает на трех виртуальных машинах Linux, одна из которых должна быть обращена наружу (на порт 443), а другая - в отдельной подсети и доступна только для внешнего сервера. Этот бит прост и работает отлично.
Моя проблема в том, что у него нет собственной аутентификации, поэтому я хотел бы предоставить ее внешним пользователям, использующим службы Azure (предпочтительно с MFA). Это где я запутался.
Для этого я настроил клиента Azure Active Directory B2C. Затем я подумал, что мне нужно зарегистрировать приложение для обеспечения условного доступа, а затем прокси-сервер приложения Azure для связи с веб-сервером.
Однако, похоже, что все документы говорят о том, что Application Proxy связывается с локальными службами, а не о тех, которые уже находятся в облаке, как у меня, так что я должен использовать что-то еще?
Может быть, я лаю не на том дереве и должен использовать другой набор служб, или, возможно, этого нельзя сделать в Azure? Если бы кто-нибудь мог дать какое-то руководство, я был бы очень благодарен.
0 ответов
Существует несколько способов управления проверкой подлинности в Azure, особенно для крупных организаций, использующих каталоги Active Directory / Azure AD. Но для вашего случая вы должны использовать исключительно Azure AD B2C (вам не нужен бизнес-справочник).
Поскольку есть награда, требующая чего-то немного другого, я разделю ее на две части.
- Часть 1. Я хочу использовать метод аутентификации через Azure с публичной регистрацией (Azure AD B2C).
- Часть 2. Я хочу использовать метод аутентификации через Azure с учетными данными Active Directory (Azure AD).
Полезная информация
Маленькое напоминание:
- Active Directory = локальный бизнес-справочник, разработанный Microsoft в течение многих лет (1999 г.) крупными компаниями и находящийся исключительно в разрешении.
- Azure Active Directory = современный бизнес-каталог, адаптированный к требованиям облака. Иногда он синхронизируется с локальным активным каталогом, чтобы обеспечить гибкость между локальным миром и облаком. (Office 365 полностью зависит от Azure AD.)
- Azure Active Directory B2C = современный каталог пользователей, подходящий для регистрации клиентов. Он обеспечивает систему управления идентификацией с автоматической регистрацией. (Я не буду объяснять преимущества этой услуги по сравнению с классическим управлением идентификацией, это не предмет, но вы легко найдете информацию здесь: https://azure.microsoft.com/en-us/services/active-directory-b2c/) -> Важно: это расширение Azure Active Directory.
О прокси приложения Azure. Он в основном используется для инфраструктурных случаев, которые уже доступны на постоянной основе и уже используют проверку подлинности Active Directory или Azure AD. Этот инструмент получит токен аутентификации извне (своего рода особый интерфейс входа в систему), а затем предоставит безопасный удаленный доступ к приложению с публичного IP-адреса. В вашем случае это бесполезно, поскольку у вас уже есть общедоступный IP-адрес, ваше приложение уже доступно извне.
Часть 1. Я хочу использовать метод аутентификации через Azure с публичной регистрацией (Azure AD B2C).
В основном это готовое решение для управления портфелем пользователей, которые будут иметь безопасный и полный метод аутентификации для вашего веб-приложения.
1.1 Как это работает?
При создании службы Azure AD B2C она сначала создала каталог Azure AD с выбранным именем и суффиксом DNS.onmicrosoft.com. Затем он автоматически связал этот новый каталог со службой Azure AD B2C. Пользователь, который регистрируется по электронной почте, будет добавлен в каталог Azure AD. Это ваша база данных.
С этого момента мы считаем, что новые пользователи могут зарегистрироваться непосредственно в каталоге Azure AD через Azure AD B2C.
Чтобы быстро схематизировать операцию:
- Клиент нажимает "Подключиться" с ваших серверов.
- Ваш сценарий на сервере перенаправляет на URL-адрес службы Azure AD B2C (обычно с DNS-суффиксом, например, b2clogin.com или microsoftonline.com).
- Оттуда ваш клиент увидит страницу, которую вы можете свободно настроить, предлагая подключиться с помощью логина / пароля (с / без MFA) или зарегистрироваться.
- Клиент нажимает для входа / регистрации, и Azure AD B2C возвращает маркер аутентификации на ваш сервер.
- Ваш сервер (ваш код) использует этот токен (потому что он связывается с Azure AD B2C через REST API (MSAL)) и разрешает или запрещает доступ к вашему приложению.
1.2 Как мне настроить его из Azure?
Есть два важных шага (я оставляю вам открыть для себя другие варианты):
Зарегистрировать приложение:
- Просто создайте информацию о конфигурации для подключения к API-интерфейсу REST Azure AD B2C из своей программы.
- Что настраивать:
- Вы должны активировать веб-API
- Вы должны указать URL-ответ:
- Это URL вашего веб-сервиса, который будет извлекать информацию, передаваемую Azure AD B2C. Здесь ваш код будет проверять подлинность пользователя и может продолжать навигацию.
- Любой URL действителен, если вы знаете, как восстановить передаваемые переменные POST.
- Изображение: Регистрация приложения
- Обратите внимание на приложение ID, которое будет использоваться для настройки вашего скрипта.
Создайте пользовательский поток:
- Здесь вы настраиваете свои стратегии на то, что клиент увидит, когда они будут на странице входа.
- Что настраивать:
- Вы должны выбрать опцию "Зарегистрироваться и войти" (другие вы сделаете позже, но вот интересная ссылка: https://docs.microsoft.com/en-us/azure/active-directory-b2c/user-flow-versions).
- Выберите провайдера идентификации "Электронная почта"
- (Вы можете наблюдать МИД здесь, мы вернемся к нему позже)
- Выберите атрибуты, которые вы хотите использовать:
- Атрибут Collect = что Azure AD B2C будет собирать в своей базе данных.
- Запрос на возврат = Что Azure AD B2C вернет в дополнение к вашему серверу в ответе URL.
- Изображение: пользовательский поток
- Осознав, вы сможете подготовить ваше веб-приложение для его использования.
1.3 Как мне настроить его из моего веб-приложения?
- Отличная ссылка, чтобы быстро понять, что делать: https://docs.microsoft.com/en-us/azure/active-directory-b2c/active-directory-b2c-quickstarts-spa
- Я буду использовать образец этой ссылки, чтобы объяснить, что делать.
- В JavaScript index.html мы видим обращения к API Azure AD B2C через модуль MSAL.js.
- MSAL = библиотека аутентификации Microsoft: https://github.com/AzureAD/microsoft-authentication-library-for-js
- MSAL выполняет "всю работу", чтобы разрешить перенаправление и возврат для проверки подлинности или без проверки подлинности.
- В строке 52 мы видим переменную msalConfig:
var msalConfig = {
auth: {
clientId: "e760cab2-b9a1-4c0d-86fb-ff7084abd902", // This is your client ID
authority: "https://fabrikamb2c.b2clogin.com/fabrikamb2c.onmicrosoft.com/b2c_1_susi", // This is your holding info
validateAuthority: false
}
hidden: {
cacheLocation: "localStorage",
storeAuthStateInCookie: true
}
};
- Вы должны зарегистрировать его ClientId (который соответствует ранее зарегистрированному в Azure AD B2C)
И полномочия с окончанием имени вашего пользовательского потока, например для меня, будут такими: https://makoad.b2clogin.com/makoAD.onmicrosoft.com/B2C_1_Default2
- В строке 122 у нас есть функция callApiWithAccessToken, которая показывает, как мы используем токен, полученный MSAL
headers: {
'Authorization': 'Bearer' + accessToken,
}
- Это классика, accessToken - это паспорт пользователя для продолжения использования ваших страниц. Оттуда вы можете вызывать все запросы GET / POST / PUT, необходимые для правильного получения идентификатора пользователя и использования его на ваших страницах.
- Я могу дать больше информации, если это необходимо, но я думаю, что образец страницы достаточно, чтобы понять.
1.4 Как настроить MFA и условный доступ?
- К сожалению, пока невозможно использовать условный доступ в случае MFA в Azure AD B2C.
- Условный доступ и MFA работают только с Azure AD. (Azure AD не разрешит публичную регистрацию пользователей -> Есть еще способы сделать это, но это займет время)
Часть 2. Я хочу использовать метод аутентификации через Azure с учетными данными Active Directory (Azure AD).
- Работа в процессе.:) (это немного долго)
Надеюсь, это поможет кому-то. (Трудно все объяснить, заранее извините, чтобы избежать некоторых сведений)
Есть множество способов, чтобы поднять это, но я быстро рассмотрю некоторые альтернативы, с которыми я более знаком.
Я буду ссылаться на Azure Active Directory как AAD на протяжении всего этого.
Что такое AAD
Давайте быстро поговорим о том, что такое AAD, а что нет. AAD не является Active Directory. Единственное, что у них общего, - это имя. AAD - это не LDAP, он не поддерживает RADIUS и не может выступать в качестве конечной точки Active Directory для чего-либо, для чего требуется активная конечная точка каталога.
AAD - это сервис аутентификации на основе REST API. Он поддерживает OAuth 2, и я считаю, что также SAML. Все, что вы настраиваете, должно использовать эти конечные точки для аутентификации.
По иронии судьбы многие нативные службы Azure не поддерживают AAD в качестве конечной точки проверки подлинности.
Возможные варианты
Шлюз приложений Azure
По сути, это прокси приложения Azure для служб, размещенных в Azure. Это может быть самым простым решением для вас. Прошло много времени с тех пор, как я последний раз использовал его, но он должен поддерживать аутентификацию AAD. В Azure имеется множество документации по настройке и настройке шлюза приложений.
Документация шлюза приложений Azure
Сторонний прокси-сервер аутентификации
Если вы используете Apache, nginx или что-то подобное перед развертыванием, вы можете обеспечить доступ к веб-сайту с помощью стороннего прокси-сервера аутентификации, такого как Skipper. Вам потребуется развернуть службу шкипера и настроить ее для подключения к конечной точке AAD OAuth для вашего клиента.
Неспособные варианты
Прокси приложения Azure
Это не предназначено для использования с приложениями, размещенными на Azure, как вы упоминаете в своем вопросе.
Сторонний шлюз VPN
Я не знаю ни одного VPN-сервера, который бы поддерживал OAuth или SAML в качестве внутреннего механизма. Я не думаю, что OpenVPN поддерживает это, и это наиболее часто используемый VPN-сервер. Возможно, опция может существовать, хотя.
Azure VPN-шлюз
Если вы хотите пройти проверку подлинности с помощью ADD, это на самом деле не вариант, поскольку шлюз Azure VPN позволяет выполнять проверку подлинности только по протоколу TLS или RADIUS, ни один из которых не совместим с AAD. В результате это нереальный вариант.