Руководство по созданию безопасной AWS VPC с нуля
Создайте безопасную AWS VPC с запланированными диапазонами CIDR, публичными и частными подсетями, таблицами маршрутизации, NAT, группами безопасности и журналами потоков.
Руководство по созданию безопасной AWS VPC с нуля
AWS VPC предоставляет вашим облачным ресурсам частную сетевую границу, но стандартная конфигурация редко подходит для продакшена. Если вы размещаете базы данных в публичных подсетях, используете пересекающиеся диапазоны CIDR или открываете широкие правила групп безопасности, вы можете создать проблемы, которые будет сложно исправить впоследствии.
Это руководство покажет вам, как создать безопасную AWS VPC с нуля, включая публичные подсети для точек входа, частные подсети для приложений и баз данных, таблицы маршрутизации, NAT, группы безопасности и базовый мониторинг.
Понимание основных концепций VPC
Прежде чем приступить к настройке, важно понять фундаментальные концепции AWS VPC:
- VPC (Virtual Private Cloud): Виртуальная сеть, выделенная для вашего аккаунта AWS. Это логически изолированный раздел облака AWS, в котором вы можете запускать ресурсы AWS.
- Подсеть (Subnet): Диапазон IP-адресов в вашей VPC. Вы можете запускать ресурсы AWS в созданных вами подсетях. Подсети определяются своим блоком CIDR, который является подмножеством блока CIDR VPC.
- Таблица маршрутизации (Route Table): Набор правил, называемых маршрутами, которые используются для определения направления сетевого трафика из вашей подсети или шлюза.
- Интернет-шлюз (IGW): Компонент VPC, который обеспечивает маршрутизацию интернет-трафика для ресурсов с публичными IP-адресами и маршрутом к шлюзу.
- NAT-шлюз (Network Address Translation): Высокодоступный и масштабируемый сервис NAT, который обеспечивает доступ в интернет для экземпляров в частной подсети, предотвращая входящие соединения, инициированные из интернета.
- Группа безопасности (Security Group): Действует как виртуальный брандмауэр для ваших экземпляров, контролируя входящий и исходящий трафик. Работает на уровне экземпляра.
- Сетевой ACL (Network Access Control List): Необязательный уровень безопасности для вашей VPC, который действует как брандмауэр для контроля трафика в одной или нескольких подсетях и из них. Работает на уровне подсети.
Пошаговое создание VPC
Давайте приступим к созданию вашей безопасной VPC.
1. Планирование схемы IP-адресов
Первый и самый важный шаг — спланировать диапазон IP-адресов для VPC и ее подсетей. Это включает выбор блока Classless Inter-Domain Routing (CIDR) для вашей VPC.
Блок CIDR VPC: Выберите диапазон частных IP-адресов, который не пересекается с вашей локальной сетью или другими VPC AWS, к которым вы можете подключиться через VPN или Direct Connect. AWS рекомендует использовать диапазоны IP-адресов RFC 1918 (10.0.0.0/8, 172.16.0.0/12 или 192.168.0.0/16). Блок CIDR может быть от /16 (65 536 IP-адресов) до /28 (16 IP-адресов).
- Пример:
10.0.0.0/16предоставляет большое адресное пространство для вашей VPC.
- Пример:
Блоки CIDR подсетей: Разделите блок CIDR вашей VPC на более мелкие блоки CIDR для ваших подсетей. Убедитесь, что блок CIDR каждой подсети является подмножеством блока CIDR VPC и не пересекается с другими подсетями.
- **Пример (если VPC —
10.0.0.0/16):- Публичная подсеть 1:
10.0.1.0/24 - Публичная подсеть 2:
10.0.2.0/24 - Частная подсеть 1:
10.0.10.0/24 - Частная подсеть 2:
10.0.11.0/24
- Публичная подсеть 1:
- **Пример (если VPC —
2. Создание VPC
Перейдите на панель VPC в консоли управления AWS и создайте новую VPC.
- Перейдите в VPC Dashboard > Your VPCs > Create VPC.
- Name tag: Дайте вашей VPC описательное имя (например,
MySecureVPC). - IPv4 CIDR block: Введите запланированный блок CIDR (например,
10.0.0.0/16). - IPv6 CIDR block: При необходимости вы можете включить блок IPv6 CIDR.
- Tenancy: Для большинства случаев подходит Default. Dedicated обеспечивает аппаратную изоляцию по более высокой цене.
- Нажмите Create VPC.
3. Создание подсетей
Теперь создайте публичные и частные подсети в вашей VPC.
- Перейдите в VPC Dashboard > Subnets > Create subnet.
- VPC ID: Выберите только что созданную VPC.
- Subnet name: Укажите имя (например,
MyPublicSubnet-AZ1). - Availability Zone: Выберите зону доступности (AZ). Рекомендуется развертывать ресурсы в нескольких AZ для обеспечения высокой доступности.
- IPv4 CIDR block: Введите блок CIDR для этой подсети (например,
10.0.1.0/24). - Нажмите Create subnet.
Повторите этот процесс для создания всех запланированных публичных и частных подсетей, убедившись, что они находятся в разных зонах доступности для обеспечения отказоустойчивости.
4. Создание интернет-шлюза (IGW)
IGW необходим для доступа ваших публичных подсетей в интернет.
- Перейдите в VPC Dashboard > Internet Gateways > Create internet gateway.
- Name tag:
MyVPCInternetGateway. - Нажмите Create internet gateway.
- После создания выберите IGW, нажмите Actions и выберите Attach to VPC. Выберите вашу VPC и нажмите Attach internet gateway.
5. Создание таблиц маршрутизации
Таблицы маршрутизации направляют трафик внутри вашей VPC. Обычно вам понадобятся как минимум две: одна для публичных подсетей и одна для частных.
а. Публичная таблица маршрутизации:
- Перейдите в VPC Dashboard > Route Tables > Create route table.
- Name tag:
MyPublicRouteTable. - VPC: Выберите вашу VPC.
- Нажмите Create route table.
- Выберите только что созданную
MyPublicRouteTable. - На вкладке Routes нажмите Edit routes.
- Нажмите Add route.
- Destination:
0.0.0.0/0(весь IPv4-трафик). - Target: Выберите Internet Gateway и выберите ваш IGW.
- Нажмите Save routes.
- Associate Subnets: Перейдите на вкладку Subnet associations, нажмите Edit subnet associations и свяжите ваши публичные подсети с этой таблицей маршрутизации.
б. Частная таблица маршрутизации (с NAT-шлюзом):
Чтобы разрешить экземплярам в частных подсетях инициировать исходящие соединения в интернет (например, для обновлений программного обеспечения) без прямого доступа из интернета, вы будете использовать NAT-шлюз.
Создание NAT-шлюза:
- Перейдите в VPC Dashboard > NAT Gateways > Create NAT gateway.
- Name:
MyNATGateway. - Subnet: Выберите одну из ваших публичных подсетей.
- Connectivity type:
Public. - Elastic IP allocation ID: Нажмите Allocate Elastic IP, чтобы создать и назначить новый Elastic IP-адрес.
- Нажмите Create NAT gateway.
- Примечание: NAT-шлюзы влекут за собой затраты. Для базового исходящего подключения убедитесь, что в вашей публичной подсети достаточно IP-адресов для NAT-шлюза..
Создание частной таблицы маршрутизации:
- Перейдите в VPC Dashboard > Route Tables > Create route table.
- Name tag:
MyPrivateRouteTable. - VPC: Выберите вашу VPC.
- Нажмите Create route table.
- Выберите
MyPrivateRouteTable. - На вкладке Routes нажмите Edit routes.
- Нажмите Add route.
- Destination:
0.0.0.0/0. - Target: Выберите NAT Gateway и выберите ваш NAT-шлюз.
- Нажмите Save routes.
- Associate Subnets: Перейдите на вкладку Subnet associations, нажмите Edit subnet associations и свяжите ваши частные подсети с этой таблицей маршрутизации.
6. Настройка групп безопасности
Группы безопасности действуют как межсетевые экраны с отслеживанием состояния на уровне экземпляра. Они разрешают или запрещают трафик на основе определенных вами правил.
- Лучшая практика: Создавайте отдельные группы безопасности для разных типов ресурсов (например, веб-серверов, серверов баз данных, серверов приложений). Избегайте использования слишком разрешительных правил.
Пример: Группа безопасности для веб-сервера (WebServerSG)
- Перейдите в VPC Dashboard > Security Groups > Create security group.
- Security group name:
WebServerSG. - Description:
Разрешить HTTP и HTTPS доступ. - VPC: Выберите вашу VPC.
- Inbound rules:
- Type:
HTTP, Protocol:TCP, Port range:80, Source:0.0.0.0/0(или более конкретный доверенный диапазон IP). - Type:
HTTPS, Protocol:TCP, Port range:443, Source:0.0.0.0/0(или более конкретный доверенный диапазон IP). - (Опционально) Type:
SSH, Protocol:TCP, Port range:22, Source:Ваш доверенный IP-адрес/диапазон(критически важно для управления).
- Type:
- Outbound rules: По умолчанию разрешен весь исходящий трафик (
0.0.0.0/0). При необходимости вы можете ограничить это. - Нажмите Create security group.
Пример: Группа безопасности для сервера базы данных (DatabaseSG)
- Создайте новую группу безопасности с именем
DatabaseSG. - Inbound rules:
- Добавьте правило, разрешающее трафик на порт по умолчанию вашей базы данных (например,
3306для MySQL,5432для PostgreSQL) только из группы безопасности ваших серверов приложений (например,WebServerSGилиAppServerSG). - Source: Выберите Custom, затем введите ID группы безопасности вашего сервера приложений.
- Добавьте правило, разрешающее трафик на порт по умолчанию вашей базы данных (например,
- Outbound rules: Обычно разрешают весь исходящий трафик.
7. Настройка сетевых ACL (NACL)
Сетевые ACL — это межсетевые экраны без отслеживания состояния, которые работают на уровне подсети. Они служат дополнительным уровнем защиты.
Stateful vs. Stateless: Группы безопасности являются stateful (если вы разрешаете входящий трафик, исходящий ответ автоматически разрешается). NACL являются stateless (вы должны явно определить правила как для входящего, так и для исходящего трафика).
Лучшая практика: NACL часто оставляют с конфигурациями по умолчанию, если не требуется контроль доступа на уровне подсети. Они могут быть сложными в управлении.
Если вам нужно использовать NACL:
- Перейдите в VPC Dashboard > Network ACLs > Create network ACL.
- Name tag:
MyNacl. - VPC: Выберите вашу VPC.
- Нажмите Create network ACL.
- Выберите NACL и на вкладке Inbound Rules добавьте правила.
- Rule Numbers: NACL оценивают правила по порядку, начиная с правила с наименьшим номером. Используйте номера, такие как
100,200,300и т.д., чтобы обеспечить возможность вставки правил в будущем. - Allow/Deny: Укажите, разрешать или запрещать трафик.
- Protocol, Port Range, Source/Destination: Определите параметры трафика.
- Не забудьте настроить соответствующие Outbound Rules.
- Свяжите NACL с вашими подсетями, перейдя на вкладку Subnet Associations.
Пример сценария развертывания
Рассмотрим типичное веб-приложение:
VPC:
10.0.0.0/16Публичная подсеть 1 (
us-east-1a):10.0.1.0/24(Связана сMyPublicRouteTableи IGW)Публичная подсеть 2 (
us-east-1b):10.0.2.0/24(Связана сMyPublicRouteTableи IGW)Частная подсеть 1 (
us-east-1a):10.0.10.0/24(Связана сMyPrivateRouteTableи NAT-шлюзом)Частная подсеть 2 (
us-east-1b):10.0.11.0/24(Связана сMyPrivateRouteTableи NAT-шлюзом)Интернет-шлюз: Подключен к VPC.
NAT-шлюз: Развернут в
Публичной подсети 1с Elastic IP.Публичная таблица маршрутизации: Направляет
0.0.0.0/0на IGW. Связана с публичными подсетями.Частная таблица маршрутизации: Направляет
0.0.0.0/0на NAT-шлюз. Связана с частными подсетями.Группа безопасности для балансировщиков нагрузки (в публичных подсетях): Разрешает HTTP/HTTPS с
0.0.0.0/0.Группа безопасности для веб-серверов (в частных подсетях): Разрешает HTTP/HTTPS из SG балансировщика нагрузки и SSH с вашего доверенного IP.
Группа безопасности для баз данных (в частных подсетях): Разрешает MySQL/PostgreSQL из SG веб-сервера.
Критические аспекты безопасности
- Принцип наименьших привилегий: Предоставляйте только необходимые разрешения для ваших групп безопасности и NACL. Максимально ограничивайте исходные IP-адреса.
- Используйте несколько зон доступности: Распределяйте подсети и ресурсы по нескольким AZ для обеспечения высокой доступности и аварийного восстановления. Это достигается созданием подсетей в разных AZ и связыванием их с соответствующими таблицами маршрутизации.
- Регулярно проверяйте группы безопасности и NACL: По мере развития вашего приложения должны меняться и ваши правила безопасности. Периодически проводите аудит и обновляйте их.
- Избегайте публичных подсетей для конфиденциальных ресурсов: Базы данных, серверы приложений и другие конфиденциальные ресурсы должны находиться в частных подсетях. Только ресурсы, требующие прямого доступа в интернет (например, балансировщики нагрузки или бастионные хосты), должны быть в публичных подсетях.
- Рассмотрите бастионные хосты: Если вам нужно подключиться по SSH к экземплярам в частных подсетях, рассмотрите возможность использования защищенного бастионного хоста в публичной подсети. Ограничьте SSH-доступ к бастионному хосту известными IP-адресами.
- Журналы потоков VPC: Включите журналы потоков VPC для сбора информации об IP-трафике, поступающем на сетевые интерфейсы в вашей VPC и исходящем от них. Это бесценно для мониторинга безопасности и устранения неполадок.
- Сегментация сети: Используйте разные VPC и подсети для сегментации сред (например, разработка, стейджинг, продакшен) и разных уровней вашего приложения.
Заключительный вывод
Стройте VPC вокруг потока трафика: публичные подсети должны предоставлять доступ только к балансировщикам нагрузки, NAT-шлюзам или строго контролируемому бастионному доступу, в то время как ресурсы приложений и баз данных остаются частными. После запуска продолжайте проверять группы безопасности, таблицы маршрутизации и журналы потоков VPC, чтобы сеть оставалась согласованной с тем, как ваше приложение работает на самом деле.