Сетевая изоляция PaaS-ролей с помощью ACL
Статья - продолжение предыдущего перевода коллеги Walter Myers: https://blogs.msdn.com/b/albe/archive/2014/04/23/10519653.aspx .
Оригинал https://blogs.msdn.com/b/walterm/archive/2014/04/22/windows-azure-paas-acls-are-here.aspx
Несмотря на отсутствие особого шума вокруг релиза Windows Azure SDK 2.3, в новой версии, спустя год после появления аналогичной функциональности для IaaS, была добавлена поддержка Access Control List (ACL) для PaaS. Я и сам этого не заметил до момента получения письма от коллеги, который прочитал статью Network Isolation Options for Machines in Windows Azure Virtual Networks, в которой я привел описание реализации возможных опций сетевой изоляции уровн Enterprise для виртуальных машин и виртуальных сетей в Microsoft Azure и уточнил, что на момент написания функциональность ACL была доступна только для IaaS, но не для Web/Worker-ролей в PaaS-модели. Коллега прислал мне ссылку на страницу Azure Service Configuration Schema, на которой четко указывается, что для PaaS-приложения можно указать ACL в конфигурации сервиса. Я обратился в продуктовую группу и они подтвердили, что эта функция доступна начиная с релиза SDK 2.3. В этой статье я покажу, как воспользоваться сетевыми ACL для PaaS, что достаточно просто, особенно если вы работали с ACL на точки входа для IaaS-машин. PaaS ACL полностью совместима с Azure Load Balancer.
Как и в случае с IaaS, PaaS ACL позволяют совершать следующие операции:
- Выборочно разрешать или блокировать входящий трафик с диапазона IPv4-адресов на конкретную точку входа в виртуальную машину
- Управлять черным списком IP-адресом
- Создавать несколько правил на одну точку входа в виртуальную машину
- Указывать до 50 правил ACL на одну точку входа
- Сортировать правила таким образом, чтобы они выполнялись в конкретном порядке согласно их приоритету
- Указывать ACL на конкретную подсеть IPv4
Сетевые ACL - ключ к защите и регламентированию прав к точкам доступа к Web/Worker-ролям. Посмотрим, как их использовать. Для этого нужно установить Azure SDK 2.3. Если этого не будет сделано, не факт, что не будет проблем при билде, но проблемы возникнут на стадии упаковки и публикации приложения в связи с изменениями схемы в файле конфигурации сервиса. У меня эти ошибки возникли, когда я пытался упаковать проект в пакет, и решились установкой SDK 2.3.
Создадим новый облачный проект в Visual Studio 2013.
Добавим Web-роль.
Выберем нужный тип проекта (я выбрал MVC).
Проект создан - соберем его.
Откроем ServiceDefinition.csdef. По умолчанию Web-роль открывает точку входа Endpoint1 на 80 порт.
Откроем ServiceConfiguration.Cloud.csfg - в него и будет добавлен новый ACL.
Добавить ACL нужно в элемент NetworkConfiguration. Обратим внимание, что этот элемент уже менялся, если Web/Worker-роль была настроена для размещения в виртуальной сети. Как видим на картинке, у нас секция AccessControls, в которой настроен один ACL с двумя правилами, а также секция Endpoint, в которой этот ACL ассоциируется с ролью и точкой входа. Все это должно идти после ролей в конфигурации сервиса.
Рассмотрим блок подробнее:
<NetworkConfiguration>
< AccessControls>
< AccessControl name="test">
<Rule action="permit" description="test" order="100" remoteSubnet="98.189.223.154/32" />
<Rule action="deny" description="test" order="200" remoteSubnet="0.0.0.0./0" />
</AccessControl>
</AccessControls>
< EndpointAcls>
< EndpointAcl role="WebRole1" endPoint="Endpoint1" accessControl="test" />
</EndpointAcls>
< /NetworkConfiguration>
Здесь я создаю ACL test, который будет применяться к соответствующей точке входа роли. В этом ACL два правила, permit и deny, выполняющиеся согласно их приоритету. Правило с приоритетом 100 будет выполнено перед 200. В правиле permit я указал IP-адреса, которым разрешен доступ к Web-роли (указывать нужно в CIDR, отсюда и /32, то есть один IP-адрес), во втором правиле я указал, что все остальные IP-адреса будут блокироваться. В секции EndpointAcls связываем наш ACL с WebRole1 и точкой входа Endpoint1.
Опубликуем проект.
Попробуем обратиться к Web-роли из браузера из моего офиса. Получается.
Попробуем обратиться с виртуальной машины в Azure - это уже не получится.
Добавим правило, разрешающее этой виртуальной машине доступ к Web-роли. Перед правилом deny. Опубликуем проект еще раз.
Попробуем еще раз обратиться с виртуальной машины - теперь доступ разрешен.
Ну вот и все. Надеюсь, эта новая функциональность вам понравится.