Сетевые ACL и группы безопасности
Сравните сетевые ACL без сохранения состояния с группами безопасности с сохранением состояния и узнайте, когда использовать каждый вариант для многоуровневой защиты сети.
«Сетевые ACL и группы безопасности» — бесплатный урок AWS Solutions Architect на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения AWS Solutions Architect, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс AWS Solutions Architect содержит 4 уроков всего.
Два уровня сетевой безопасности
AWS предоставляет два разных механизма брандмауэра внутри VPC. Группы безопасности работают на уровне экземпляра (технически на уровне ENI) и являются stateful. Списки контроля доступа к сети (NACL) работают на уровне подсети и являются stateless. Оба механизма проверяются для любого трафика, входящего в подсеть или выходящего из неё, а также для связанных с ней экземпляров. Совместное использование обеспечивает эшелонированную защиту: NACL служат первым уровнем на границе подсети, а группы безопасности — брандмауэром отдельных экземпляров. На экзамене SAA-C03 эти два механизма часто сравниваются.
Network ACL: брандмауэр подсети без отслеживания состояния
Network ACL (NACL) — это нумерованный список правил, применяемых ко всему трафику, пересекающему границу подсети. NACL являются stateless: каждый пакет оценивается независимо. Если Вы разрешили входящий TCP-порт 80, необходимо явно разрешить исходящий обратный трафик (эфемерные порты 1024–65535), чтобы ответ мог покинуть подсеть. Правила проверяются в числовом порядке (сначала наименьший номер); применяется первое совпавшее правило, после чего остальные правила не проверяются. Каждая VPC поставляется с NACL по умолчанию, разрешающим весь входящий и исходящий трафик.
# Deny all traffic from a specific IP in the NACL
aws ec2 create-network-acl-entry \
--network-acl-id acl-12345678 \
--ingress \
--rule-number 90 \
--protocol tcp \
--cidr-block 203.0.113.10/32 \
--rule-action deny \
--port-range From=0,To=65535Нумерация и порядок правил NACL
Правила NACL проверяются по возрастанию номера правила (от 1 до 32766), и проверка останавливается сразу после совпадения правила — правило Allow с меньшим номером может быть перекрыто правилом Deny с ещё меньшим номером для того же трафика. AWS рекомендует нумеровать правила с шагом 10 или 100, чтобы позднее можно было вставлять дополнительные правила. Каждый NACL завершается правилом по умолчанию (* DENY), запрещающим весь трафик, не совпавший ни с одним явным правилом. Это универсальное правило нельзя изменить или удалить.
# Example NACL ruleset:
# Rule 100: Allow HTTPS (443) from 0.0.0.0/0
# Rule 200: Allow HTTP (80) from 0.0.0.0/0
# Rule 300: Deny All from specific-bad-IP
# Rule *: Deny All from 0.0.0.0/0 (default, implicit)NACL без отслеживания состояния: эфемерные порты
Поскольку NACL являются stateless, необходимо учитывать оба направления каждого подключения. Когда клиент в интернете подключается к Вашему экземпляру EC2 через порт 443, экземпляр отправляет ответ на эфемерный порт клиента (случайный порт с большим номером, обычно 1024–65535 в Linux и 49152–65535 в Windows). Исходящие правила NACL должны явно разрешать этот диапазон. Распространённая ошибка при настройке NACL — создать правило Allow для входящего порта 443, но забыть разрешить исходящие эфемерные порты. В результате подключения устанавливаются, но ответы незаметно отбрасываются.
# NACL outbound rule allowing return traffic on ephemeral ports
aws ec2 create-network-acl-entry \
--network-acl-id acl-12345678 \
--egress \
--rule-number 100 \
--protocol tcp \
--cidr-block 0.0.0.0/0 \
--rule-action allow \
--port-range From=1024,To=65535Итоги по группам безопасности
Напомним: группы безопасности присоединяются к экземплярам (или ENI), разрешают только явные правила Allow (правил Deny нет), являются stateful (ответы на разрешённый входящий трафик автоматически разрешаются для исходящего направления без отдельного правила), а все присоединённые правила оцениваются вместе с использованием логики OR. В качестве источников и назначений можно указывать идентификаторы других групп безопасности, что удобнее в сопровождении, чем диапазоны IP-адресов. Группы безопасности — основной механизм управления доступом на уровне экземпляров, а NACL добавляют дополнительный уровень на уровне подсети.
Ключевые различия: NACL и группы безопасности
Критически важное для экзамена сравнение:
- Уровень: NACL = подсеть; SG = экземпляр (ENI)
- Состояние: NACL = stateless; SG = stateful
- Правила: NACL = Allow AND Deny; SG = только Allow (неявный запрет)
- Проверка: NACL = по порядку (побеждает первое совпадение); SG = проверяются все правила (побеждает любое Allow)
- Область действия: NACL применяется ко всем экземплярам в подсети; SG — только к связанным экземплярам
- Входящий/исходящий трафик: NACL требует явных правил в обоих направлениях; SG является stateful (для ответов нужны только входящие правила)
Когда использовать NACL
Используйте NACL для: блокировки определённых IP-адресов (группы безопасности не могут запрещать, а только разрешать; NACL позволяют добавить явные правила Deny для блокировки известных вредоносных IP-адресов или сборщиков данных). Правил для всей подсети (одно и то же правило применяется ко всем экземплярам в подсети без изменения отдельных групп безопасности). Дополнительного уровня защиты (если из-за ошибки в настройке группы безопасности доступ случайно открыт, правило Deny в NACL на границе подсети всё ещё может заблокировать трафик). На практике большинство команд управляет доступом главным образом через группы безопасности, а NACL использует только для явной блокировки IP-адресов.
NACL по умолчанию и пользовательские NACL
NACL по умолчанию (создаваемый вместе с каждой VPC) разрешает весь входящий и исходящий трафик: он содержит правила 100 Allow All Inbound и 100 Allow All Outbound. Подсети, не связанные явно с пользовательским NACL, используют NACL по умолчанию. Если Вы создаёте пользовательский NACL, изначально он содержит только правило Deny-All по умолчанию (правило *), блокирующее весь трафик до добавления явных правил Allow. Поэтому присоединение нового пользовательского NACL к подсети немедленно заблокирует весь трафик — обязательно добавьте правила Allow до связывания NACL с рабочими подсетями.
# Create a custom NACL (starts with DENY ALL)
aws ec2 create-network-acl --vpc-id vpc-12345678
# Associate it with a subnet
aws ec2 replace-network-acl-association \
--association-id aclassoc-12345678 \
--network-acl-id acl-custom-idПорядок проверки: NACL и группы безопасности
Для входящего трафика к экземпляру EC2: сначала трафик проходит через NACL на границе подсети (проверка выполняется в порядке правил). Если NACL разрешает трафик, он затем достигает группы безопасности экземпляра — группа безопасности также должна его разрешить. Оба механизма должны разрешить трафик, чтобы он достиг экземпляра. Для исходящего трафика сначала проверяется группа безопасности (stateful: разрешает трафик, если он является ответом на разрешённый входящий трафик), затем NACL (stateless: требуется явное исходящее правило Allow). Понимание этого порядка объясняет, почему для обратного трафика нужны правила NACL даже при использовании групп безопасности со stateful-поведением.
Диагностика проблем с NACL
NACL часто становятся источником сетевых проблем, которые трудно диагностировать, из-за их поведения без отслеживания состояния. Симптомы: подключения устанавливаются, но передача данных прекращается (отсутствует правило для исходящих эфемерных портов); трафик проходит только в одном направлении (забыто входящее или исходящее правило); определённые IP-адреса не могут подключиться (правило Deny с меньшим номером срабатывает раньше правила Allow). Метод диагностики: используйте VPC Flow Logs, чтобы определить, имеют ли пакеты статус ACCEPT или REJECT на уровне NACL. Журнал потоков покажет отклонённые пакеты и их источники и назначения, помогая найти отсутствующее правило.
# Athena query to find NACL-rejected flows
SELECT sourceaddress, destinationaddress, destinationport, action
FROM vpc_flow_logs
WHERE action = 'REJECT'
AND interfaceid LIKE 'eni-%'
LIMIT 100;Многоуровневая архитектура безопасности
Рекомендуемый шаблон безопасности VPC с несколькими уровнями: сетевые списки контроля доступа в общедоступных подсетях разрешают из интернета только порты 80, 443 и необходимые эфемерные порты; всё остальное запрещается. Группы безопасности общедоступных подсетей на ALB разрешают доступ к портам 80/443 из 0.0.0.0/0. Группы безопасности частных приложений разрешают доступ только от идентификатора группы безопасности ALB. Группы безопасности частных данных разрешают доступ только от идентификатора группы безопасности приложения. Такая эшелонированная защита гарантирует, что даже при неправильной настройке одного уровня другой уровень обеспечит защиту — этот принцип называется минимально необходимым доступом на каждом уровне.
Быстрая проверка
Проверьте своё понимание концепций AWS Solutions Architect (SAA-C03) из этого урока.
Итоги урока
В этом уроке Вы узнали, что сетевые списки контроля доступа — это не имеющие состояния межсетевые экраны уровня подсети, которые поддерживают правила разрешения и запрета, проверяемые в порядке нумерации, группы безопасности — это имеющие состояние межсетевые экраны уровня экземпляра только с правилами разрешения, при этом все правила оцениваются вместе, а также что сетевые списки контроля доступа следует использовать для явной блокировки IP-адресов и правил на уровне всей подсети, а группы безопасности — для детального управления доступом к экземплярам. На этом завершается модуль «Основы VPC» — далее мы рассмотрим RDS и реляционные базы данных в AWS.
Часто задаваемые вопросы
Урок «Сетевые ACL и группы безопасности» бесплатный?
Да — полный текст урока «Сетевые ACL и группы безопасности» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс AWS Solutions Architect, подпишись на CoddyKit PRO. Курс AWS Solutions Architect содержит 4 уроков всего.
Чему я научусь в уроке «Сетевые ACL и группы безопасности»?
Сравните сетевые ACL без сохранения состояния с группами безопасности с сохранением состояния и узнайте, когда использовать каждый вариант для многоуровневой защиты сети. Ты практикуешь AWS Solutions Architect с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать AWS Solutions Architect?
Предыдущий опыт не требуется. AWS Solutions Architect на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «Сетевые ACL и группы безопасности»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке AWS Solutions Architect?
Да. Каждый урок AWS Solutions Architect включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Архитектура VPC и блоки CIDR
- Интернет-шлюз и таблицы маршрутизации
- Шлюз NAT и частные подсети
- Сетевые ACL и группы безопасности