Как мы это делаем:
Мы создаем VPC, который является / 16, например 172.20.0.0/16. Не используйте VPC по умолчанию.
Затем мы создаем набор подсетей для каждого «уровня» приложения.
Public - Все, что с публичным IP. Балансировщики нагрузки и шлюзы NAT - это, пожалуй, единственное, что здесь есть.
Web DMZ - сюда заходят веб-серверы. Все, что является целью для балансировщика нагрузки.
Данные - ресурсы, отвечающие за хранение и извлечение данных. Экземпляры RDS, серверы баз данных EC2, экземпляры ElastiCacahe
Частный - для ресурсов, которые действительно изолированы от интернет-трафика. Управление и отчетность. Вам может не понадобиться это в вашей среде.
Подсети все / 24. Одна подсеть на зону доступности. Таким образом, будет примерно 3 общедоступных подсети, 3 подсети Web DMZ и т. Д.
Сетевые ACL контролируют трафик между подсетями. Общедоступные подсети могут общаться с веб-DMZ. Веб-DMZ может общаться с данными. Подсети данных могут общаться друг с другом для облегчения кластеризации. Частные подсети ни с кем не общаются.
Я намеренно держу вещи очень грубыми в ACL сети. Я не ограничиваю конкретные порты / приложения. Мы делаем это на уровне Группы безопасности.
Совет для профессионалов: выровняйте группы подсетей на границе / 20, чтобы упростить правила сетевых списков ACL. Вместо того, чтобы перечислять каждую подсеть данных по отдельности, вы можете просто перечислить одну / 20, которая охватывает все подсети данных.
Некоторые люди утверждают, что этот уровень разделения чрезмерен. Однако я нахожу это полезным, потому что это заставляет людей думать о логической структуре приложения. Это защищает от того, что кто-то делает глупости с группой безопасности. Это не пуленепробиваемый, но это второй уровень защиты. Кроме того, мы иногда получаем аудит безопасности от клиентов, которые ожидают увидеть традиционную структуру, подобную той, которую вы можете найти в локальной сети.