AWS: общедоступная подсеть + VPN-шлюз

Вопрос

Можем ли мы создать таблицу маршрутов, в которой есть как igw-id (идентификатор интернет-шлюза), так и vgw-id (идентификатор VPN-шлюза)? Если мы не можем / не должны этого делать, почему?

Пример

      10.0.0.0/16 --> Local  
172.16.0.0/12 --> vgw-id  
0.0.0.0/0 --> igw-id 

Ссылка

https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Scenario3.html
(в основном я имею в виду разделы «Обзор» и «Альтернативная маршрутизация».)

Объяснение

На этой веб-странице выше показан сценарий, в котором один VPC имеет одну общедоступную подсеть, одну частную подсеть и один шлюз VPN. В этом примере доступ к VPN-шлюзу всегда осуществляется из экземпляров в частной подсети (это означает, что в его таблице маршрутов нет записи «igw-id»). Интересно, почему в одной таблице маршрутов нет «igw-id» и «vgw-id».

3 ответа

Да, у нас может быть и то, и другое. Фактически, приведенный выше пример идеально подходит для общедоступной подсети, которая может подключаться к вашей корпоративной сети через прямое соединение или межсайтовый VPN, а также иметь доступ в Интернет и быть доступной из Интернета.

Так вот, хотите вы этого или нет, это архитектурное решение. В примере сценария, приведенном AWS, они пытаются разделить подсети, создав общедоступную подсеть (с igw), который может содержать службы, доступные из Интернета, и частную подсеть для других серверных служб (например, базы данных). К этим внутренним сервисам можно получить доступ из корпоративной сети с помощью межсайтовой VPN, поэтому в подсети есть vgw.

Да, у вас может быть таблица маршрутов с 3 указанными вами маршрутами. Однако имейте в виду, что с маршрутом 0.0.0.0/0 --> igw-id, хосты в Интернете могут инициировать соединения с экземплярами в этой подсети. Как правило, вы хотите защитить экземпляры в подсети, в которой вы разрешаете маршрут к вашей локальной сети, и не открывать их для Интернета. Если этим экземплярам требуется подключение к Интернету, AWS рекомендует устройства NAT для вашего VPC.

Хотя это технически возможно, основная причина не делать этого связана с концепцией, называемой сегментацией сети. Он в основном следует подходу «глубокой защиты», согласно которому сетевые уровни должны быть разделены на «общедоступную» и «частную» части (также часто используются дополнительные зоны, например, третий уровень для хранения данных, а четвертый - для инфраструктуры, используемый для управления другим. три яруса).

Поскольку ваша общедоступная подсеть напрямую связана с Интернетом, она, скорее всего, будет взломана, если вы что-то неправильно сконфигурируете. Если в вашей общедоступной подсети есть маршруты к VPN-шлюзу, единичное нарушение позволяет злоумышленнику атаковать и вашу локальную среду.

Вот почему лучше всего добавить в вашу архитектуру один или два уровня сети. Даже когда публичный уровень скомпрометирован, им все равно нужно попасть в инстанс на частном уровне, прежде чем они смогут атаковать вашу локальную среду.

Рекомендуется, чтобы ваша общедоступная подсеть содержала только эластичный балансировщик нагрузки или аналогичный, когда это возможно. Это довольно хороший способ уменьшить поверхность атаки ваших серверов приложений (меньше шансов, что вы обнаружите нежелательный порт и т. Д.).

Хорошее руководство по этому поводу можно найти здесь. Он не включает VPN, но вы можете рассматривать их как часть уровня приложения.

Другие вопросы по тегам