Сетевая изоляция 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.

clip_image001

Добавим Web-роль.

clip_image002

Выберем нужный тип проекта (я выбрал MVC).

clip_image003

Проект создан - соберем его.

clip_image004

Откроем ServiceDefinition.csdef. По умолчанию Web-роль открывает точку входа Endpoint1 на 80 порт.

clip_image005

Откроем ServiceConfiguration.Cloud.csfg - в него и будет добавлен новый ACL.

clip_image006

Добавить ACL нужно в элемент NetworkConfiguration. Обратим внимание, что этот элемент уже менялся, если Web/Worker-роль была настроена для размещения в виртуальной сети. Как видим на картинке, у нас секция AccessControls, в которой настроен один ACL с двумя правилами, а также секция Endpoint, в которой этот ACL ассоциируется с ролью и точкой входа. Все это должно идти после ролей в конфигурации сервиса.

clip_image007

Рассмотрим блок подробнее:

<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.

Опубликуем проект.

clip_image008

Попробуем обратиться к Web-роли из браузера из моего офиса. Получается.

clip_image009

Попробуем обратиться с виртуальной машины в Azure - это уже не получится.

clip_image010

Добавим правило, разрешающее этой виртуальной машине доступ к Web-роли. Перед правилом deny. Опубликуем проект еще раз.

clip_image011

Попробуем еще раз обратиться с виртуальной машины - теперь доступ разрешен.

clip_image012

Ну вот и все. Надеюсь, эта новая функциональность вам понравится.