Сети и VPC

Что это такое

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

Почему это важно

Почти каждый инцидент безопасности в облаке начинается с чего-то, что было доступно, хотя не должно было. Публичное хранилище, порт базы, открытый «на время», интерфейс администратора на публичном адресе — это сетевые решения, и принимаются они в консоли, которая делает разрешающий вариант самым удобным. Сеть ещё и место, где прячется стоимость: трафик, пересекающий зону доступности или покидающий регион, тарифицируется, а трафик внутри облака — нет.

Ключевые идеи

VPC — это диапазон адресов, а подсети его нарезают

Диапазон адресов вы выбираете один раз, и каждая подсеть берёт из него кусок. Подсеть ограничена одной зоной доступности — именно это делает её единицей изоляции отказов: поставьте два инстанса в две подсети в разных зонах, и отказ одной зоны не уронит сервис. Поэтому диапазон стоит планировать до того, как ресурсы его заполнят.

10.0.0.0/16
  подсеть a  10.0.1.0/24  (зона a)
  подсеть b  10.0.2.0/24  (зона b)

Публичные и частные подсети различаются маршрутизацией, а не именем

Подсеть публична, если её таблица маршрутов направляет немаршрутизированный трафик в интернет-шлюз, и частна, если нет. Это различие — запись в таблице маршрутов, а не ярлык, поэтому «частная» подсеть с неверным маршрутом тихо становится публичной. Обычная форма — балансировщики в публичных подсетях, всё остальное в частных, а исходящий доступ обеспечивает шлюз трансляции сетевых адресов.

Группы безопасности — это и есть брандмауэр

Группа безопасности — набор разрешающих правил, привязанных к ресурсу; не разрешено ничего, что не названо. Правила ссылаются как на другие группы безопасности, так и на адреса, поэтому «база принимает соединения от инстансов группы приложения» можно сказать напрямую, а не диапазоном IP. Модель — запрет по умолчанию: начинайте без входящих правил и добавляйте ровно те пути, что нужны.

группа базы:       разрешить 5432 только от группы приложения
группа приложения: разрешить 8080 только от группы балансировщика

Достигайте частных ресурсов, не выставляя их

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

Сетевой трафик имеет цену

Адреса и передачи тарифицируются: трафик между зонами, трафик в интернет и публичные адреса, оставленные несвязанными, — всё стоит. Держать болтливые сервисы в одной зоне дешевле и менее доступно; разнести их дороже и надёжнее при отказах. Явное называние этого компромисса превращает схему сети в решение о стоимости и надёжности.

Практика

Нарисуйте самую маленькую рабочую сеть

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

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

Проверьте сетевое правило

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

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

Частые ошибки

  • Подсеть названа частной из-за её имени — маршрут в интернет-шлюз делает её публичной независимо от ярлыка; исправить: смотрите таблицу маршрутов, а не название.
  • Порт базы, открытый диапазону адресов «ненадолго» — диапазон остаётся открытым, а заметка забывается; исправить: ссылайтесь на группу безопасности вместо диапазона.
  • Все ресурсы в одной зоне доступности — отказ зоны роняет всю систему; исправить: разносите уровни минимум по двум зонам.
  • Публичные адреса для администрирования — поверхность управления открыта в интернет; исправить: попадайте на частные хосты через бастион или менеджер сессий.
  • Игнорирование платы между зонами и за исходящий трафик — строка сети в счёте может соперничать с вычислениями; исправить: планируйте пути трафика осознанно и пересматривайте, что реально пересекает границу.

Что читать дальше