Сеть в облаке: VPC, группы, NAT
Три вещи, которые в облаке ломаются чаще всего, и все три - про сеть. Сервис недоступен снаружи, потому что закрыт правилами доступа. Сервис доступен ВСЕМУ интернету, потому что правило написали слишком широко. И счёт за исходящий трафик, которого никто не ждал: страница на 2,5 мегабайта при 300 тысячах просмотров - это 732 гигабайта и почти шесть тысяч рублей в месяц на ровном месте.
Стержень: в облаке сеть описывается правилами доступа, а не проводами; закрытое по умолчанию и явные разрешения - единственный рабочий подход.
// Формулировки: «как устроены группы безопасности?», «зачем приватные подсети?», «почему такой счёт за трафик?»
Правила доступа вместо проводов
Своя сеть в облаке - это изолированное адресное пространство, внутри которого вы режете подсети. Подсеть бывает публичной (у машин есть выход в интернет напрямую) и приватной (выхода нет, а если нужен исходящий доступ - через отдельный шлюз).
Доступ описывается правилами: кому, куда, на какой порт. Хорошее правило ссылается не на адреса, а на ГРУППЫ: «серверам приложения разрешено ходить в группу баз на порт базы». Тогда добавление новой машины в группу автоматически даёт ей нужные права, и список не надо править руками.
// Типовая схема, которая закрывает большую часть вопросов: базы и внутренние сервисы - в приватных подсетях, наружу торчит только балансировщик, то есть посредник, раздающий запросы между копиями приложения, доступ к машинам - через одну точку входа, правило «разрешено всем» не используется нигде, кроме этого балансировщика на портах веб-трафика. И отдельно: правила доступа в облаке НЕ отменяют фаервол на самой машине - тот самый набор правил ядра о том, что пускать внутрь. Работают оба сразу, и запрет любого из них останавливает трафик.
- приватная подсеть
- без прямого выхода в интернет; исходящий доступ через отдельный шлюз
- правило по группе
- разрешение ссылается на группу машин, а не на список адресов
Исходящий трафик - отдельная статья расходов
Входящий трафик обычно бесплатный, исходящий - платный, и это меняет архитектурные решения. Посчитал два случая при цене восемь рублей за гигабайт. Страница на 2,5 мегабайта при 300 тысячах просмотров: 732 гигабайта, 5859 рублей в месяц. Ответы интерфейса по 50 килобайт при пяти миллионах вызовов: 244 гигабайта, 1953 рубля.
Первое лечится сетью доставки содержимого: картинки и статика раздаются с ближайшей к пользователю точки, обычно в два-четыре раза дешевле и заметно быстрее. Второе - сжатием ответов и тем, чтобы не отдавать поля, которые интерфейсу не нужны.
// Отдельная ловушка: трафик МЕЖДУ зонами тоже часто платный. Сервис, который случайно ходит в базу соседней зоны на каждый запрос, платит дважды - деньгами и задержкой. Поэтому в облаке считают и то, что уходит наружу, и то, что бегает между зонами внутри.
- исходящий трафик
- то, что уходит от вас к пользователю; платный, в отличие от входящего
- сеть доставки
- раздача статики с ближайшей к пользователю точки; дешевле и быстрее
Связность и приватный доступ
Соединить офис или свой дата-центр с облаком можно тремя способами. Зашифрованный туннель через интернет - дёшево и быстро настраивается, но качество канала зависит от интернета. Выделенный канал - дорого, зато предсказуемая задержка и полоса. И промежуточный вариант через партнёрскую точку обмена.
Внутри облака есть отдельная задача: обращаться к управляемым сервисам, не выходя в интернет. Для этого делают приватные точки доступа - хранилище и базы становятся доступны по внутреннему адресу. Это и безопаснее, и часто дешевле, потому что трафик перестаёт считаться исходящим.
// Про туннели важно помнить то, что я мерил в теме про сеть: туннель добавляет свои заголовки, поэтому предельный размер пакета внутри него меньше обычного. Если служебные сообщения о размере вырезаны фаерволом, крупные пакеты начинают молча теряться - рукопожатие проходит, а данные висят. Это классическая авария первого дня после настройки туннеля.
- зашифрованный туннель
- канал через интернет; дёшево, но качество зависит от интернета
- приватная точка доступа
- доступ к управляемому сервису по внутреннему адресу, минуя интернет
Как отвечать: «Почему база не должна быть доступна из интернета и как это устроить?»
Потому что доступная из интернета база - это вопрос времени, а не вероятности: её найдут сканеры, и дальше всё зависит только от пароля. Устраивается это так. База живёт в приватной подсети, у неё нет публичного адреса вовсе. Правило доступа разрешает подключение не с диапазона адресов, а из группы серверов приложения на порт базы - тогда новая машина в группе получает доступ автоматически, а посторонняя не получает никак. Доступ людей - через одну точку входа с записью сессий, а не прямым подключением. Если нужен доступ к управляемому сервису, делаю приватную точку доступа, чтобы трафик не выходил в интернет: это и безопаснее, и дешевле, потому что перестаёт считаться исходящим. И проверяю, что правила облака и фаервол на самой машине не противоречат друг другу - работают оба сразу.
Ответ даёт готовую схему из четырёх решений и объясняет, почему правило по группе лучше диапазона адресов. Замечание про два фаервола - частая причина потерянного часа.
На чём валятся
- −Пишут правило «разрешено всем» для удобства и оставляют его навсегда.
- −Дают базе публичный адрес и защищаются только паролем.
- −Ссылаются в правилах на адреса вместо групп и правят списки руками.
- −Не считают исходящий трафик и получают неожиданный счёт.
- −Забывают, что трафик между зонами тоже платный, и гоняют запросы через зону.
Проверьте себя
Пять вопросов из банка по этой подтеме. Всего их 6, остальные разбираются в тренажёре.
- Чем группа безопасности облака отличается от фаервола на самой машине?A)Группа безопасности фильтрует по содержимому пакетов, фаервол — по портамB)Правила группы применяются лишь при перезапуске машиныC)Группа безопасности заменяет сетевые правила внутри кластераD)Она работает до машины, на уровне сети, и не зависит от её настроек
показать ответ и разбор
+D)Она работает до машины, на уровне сети, и не зависит от её настроек// разбор: Группа безопасности — фильтр на стороне облачной сети: трафик отсекается ещё до виртуальной машины, правила меняются мгновенно и живут отдельно от ОС. Локальный фаервол — второй рубеж внутри машины, полезный, когда группа настроена широко или машина скомпрометирована. Обычная практика — держать оба: сеть режет по источникам и портам, хост защищает себя сам.
- Базу поместили в приватную подсеть без публичного адреса, но ей нужны обновления пакетов. Как это устроено?A)Исходящий доступ идёт через NAT-шлюз, входящий остаётся закрытымB)На машину вешают временный публичный адрес на время обновленияC)Обновления приходят через балансировщик, стоящий перед подсетьюD)Приватная подсеть выходит наружу напрямую, ограничен только вход
показать ответ и разбор
+A)Исходящий доступ идёт через NAT-шлюз, входящий остаётся закрытым// разбор: Приватная подсеть не маршрутизируется из интернета. Чтобы машины могли ходить наружу — за пакетами, к API провайдера, к внешним сервисам — ставят NAT-шлюз: он подменяет адрес источника и пропускает только исходящие соединения. Вход остаётся закрытым, доступ инженеров идёт через бастион или VPN. За трафик NAT-шлюза платят отдельно, и на объёмных выгрузках это заметная статья.
- Сервисы одного облака общаются по публичным адресам через интернет-шлюз. Чем это плохо?A)Провайдер ограничивает число соединений между своими сервисамиB)Публичные адреса меняются при перезапуске машинC)Задержка, плата за трафик, лишняя открытостьD)Такой трафик проходит мимо журналов расследования
показать ответ и разбор
+C)Задержка, плата за трафик, лишняя открытость// разбор: Внутри облака есть приватная связность: адреса из своей сети, приватные эндпоинты к управляемым сервисам, пиринг между сетями. Маршрут через публичный интернет добавляет хопы и задержку, тарифицируется как исходящий трафик и требует держать порты открытыми снаружи. Плюс шифрование и аутентификацию приходится строить как для внешнего мира, хотя обе стороны ваши.
- Что технически делает подсеть в VPC «публичной», а не приватной?A)Наличие у машин приватных адресов из диапазона подсетиB)Отключённая на подсети группа безопасностиC)Маршрут в интернет-шлюз (IGW) в её таблице маршрутизацииD)Расположение подсети в другой зоне доступности
показать ответ и разбор
+C)Маршрут в интернет-шлюз (IGW) в её таблице маршрутизации// разбор: Публичность подсети определяется маршрутизацией: если в её route table есть маршрут 0.0.0.0/0 в интернет-шлюз (IGW), машины с публичным IP доступны из интернета и ходят наружу напрямую — это публичная подсеть. Приватная такого маршрута не имеет; наружу она ходит через NAT-шлюз, а извне напрямую недоступна. То есть дело в таблице маршрутов, а не в самих адресах или группах безопасности.
- Сервисы в VPC ходят в управляемое объектное хранилище через интернет-шлюз по публичному адресу. Как сделать это приватно?A)Через VPC endpoint / PrivateLinkB)Просто закрыть хранилище группой безопасности пожёстчеC)Поднять свой прокси в публичной подсети перед хранилищемD)Перенести хранилище в ту же подсеть, что и сервисы
показать ответ и разбор
+A)Через VPC endpoint / PrivateLink// разбор: Чтобы дотянуться до управляемого сервиса (объектное хранилище, БД) приватно, используют VPC endpoint / PrivateLink: провайдер создаёт приватную точку входа к сервису прямо внутри вашей сети, и трафик идёт по внутренней сети провайдера, не выходя в интернет и не через IGW/NAT. Плюсы: меньше поверхность (не нужен публичный путь), ниже задержка, часто дешевле трафик. Группы безопасности и прокси публичный путь не убирают.
дальше
Теорию прочитали. Навык ставится повторением
В Сеньорчике эта подтема идёт в ежедневных сессиях: движок возвращает её, пока ответы не станут уверенными, и ведёт прогресс отдельно по каждой подтеме. Теория внутри тоже бесплатна, лимит только на количество вопросов в день.