Шлюз NAT и частные подсети
Разрешите ресурсам частных подсетей выходить в интернет, не делая их напрямую доступными, с помощью управляемого шлюза NAT.
«Шлюз NAT и частные подсети» — бесплатный урок Cloud & IT Cert Prep на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Cloud & IT Cert Prep, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Cloud & IT Cert Prep содержит 4 уроков всего.
Проблема доступа частной <strong>subnet</strong> в интернет
Ресурсы в частных subnets имеют только частные IP-адреса и не имеют маршрута к Internet Gateway, поэтому не могут инициировать исходящие соединения с интернетом. Однако им часто нужно обращаться в интернет: загружать исправления для OS, получать образы Docker, вызывать сторонние API или обновлять программное обеспечение. Решение состоит в маршрутизации трафика частной subnet через устройство, имеющее доступ в интернет и выполняющее NAT (трансляцию сетевых адресов), скрывая частные IP-адреса за общедоступным IP-адресом. AWS предоставляет два варианта: NAT Gateway (управляемый) и самостоятельно управляемый NAT Instance (устаревший).
NAT Gateway: управляемый исходящий NAT
NAT Gateway — это полностью управляемый и высокодоступный сервис, позволяющий экземплярам в частных subnets инициировать исходящие соединения с интернетом и блокирующий непредусмотренный входящий трафик. Он находится в общедоступной subnet, имеет Elastic IP и автоматически масштабируется до пропускной способности 100 Гбит/с. Вам не требуется устанавливать исправления, масштабировать или управлять базовой инфраструктурой. NAT Gateway преобразует частный IP-адрес источника исходящих пакетов в собственный EIP, а затем возвращает ответы исходному частному IP-адресу.
# Create a NAT Gateway in the public subnet
aws ec2 allocate-address --domain vpc # Get an EIP
aws ec2 create-nat-gateway \
--subnet-id subnet-public-1a \
--allocation-id eipalloc-12345678 \
--tag-specifications 'ResourceType=natgateway,Tags=[{Key=Name,Value=nat-gw-1a}]'Маршрутизация трафика приватной подсети через NAT
После создания NAT Gateway добавьте маршрут в таблицу маршрутов приватной подсети: назначение 0.0.0.0/0 → идентификатор NAT Gateway. Это указывает всему трафику от экземпляров приватной подсети, направленному в интернет, проходить через NAT Gateway, который затем пересылает его через Internet Gateway в интернет. В таблице маршрутов по-прежнему остаётся локальный маршрут VPC (например, 10.0.0.0/16 → local) для внутреннего трафика. Без этой записи маршрута экземпляры приватной подсети не получат доступ в интернет, даже если NAT Gateway уже развёрнут.
# Add route in private subnet's route table pointing to NAT gateway
aws ec2 create-route \
--route-table-id rtb-private-app-1a \
--destination-cidr-block 0.0.0.0/0 \
--nat-gateway-id nat-12345678Архитектура NAT Gateway в нескольких AZ
NAT Gateway привязан к конкретной AZ — он обрабатывает только трафик из подсетей в той же AZ. Для обеспечения высокой доступности разверните по одному NAT Gateway в каждой AZ и создайте отдельные таблицы маршрутов приватных подсетей для каждой AZ: таблица маршрутов приватной подсети в AZ-a направляет 0.0.0.0/0 к NAT-GW в AZ-a, а таблица маршрутов приватной подсети в AZ-b — к NAT-GW в AZ-b. Это позволяет избежать платы за передачу данных между AZ и гарантирует, что при отказе AZ-a экземпляры в AZ-b (со своим NAT) продолжат иметь доступ в интернет.
# Architecture: two NAT gateways, two private route tables
# NAT-GW-1a in subnet-public-1a --> rtb-private-1a
# NAT-GW-1b in subnet-public-1b --> rtb-private-1b
# Associate private-1a subnets with rtb-private-1a (NAT-GW-1a)
aws ec2 associate-route-table \
--route-table-id rtb-private-1a \
--subnet-id subnet-private-app-1aNAT Gateway и NAT Instance
NAT Instance — это самостоятельно управляемый экземпляр EC2, на котором запущен NAT AMI; это устаревший подход, применявшийся до появления NAT Gateway. Для NAT Instance необходимо: отключить проверку источника и назначения на экземпляре EC2, управлять пропускной способностью и масштабированием, устанавливать исправления для OS и самостоятельно обрабатывать сбои. Они дешевле при очень низкой пропускной способности и могут использоваться как бастионные узлы. NAT Gateway — рекомендуемый вариант для production: полностью управляемый сервис с автоматическим масштабированием, SLA доступности 99,99% в пределах AZ и без необходимости устанавливать исправления. На экзамене это сравнение традиционно часто проверяется.
# For NAT Instance: disable source/dest check (required!)
aws ec2 modify-instance-attribute \
--instance-id i-nat-instance-id \
--no-source-dest-checkСтоимость NAT Gateway
Стоимость NAT Gateway состоит из двух компонентов: почасовой платы за каждый NAT Gateway (примерно 0,045 доллара в час в us-east-1, около 32 долларов в месяц) и платы за обработку данных за каждый GB (около 0,045 доллара за GB в us-east-1). Для рабочих нагрузок, передающих через NAT большие объёмы данных (например, загружающих большие образы контейнеров или выполняющих массовые скачивания), стоимость обработки данных может стать основной. Оптимизируйте расходы на NAT: направляйте трафик S3 и DynamoDB через VPC Gateway Endpoints (это полностью обходится без NAT и бесплатно), а вызовы API AWS — через VPC Interface Endpoints, а не через NAT.
Проектирование приватной подсети для RDS
Экземпляры баз данных в приватных подсетях не должны направлять трафик через NAT Gateway — им не требуется самостоятельно инициировать подключения к интернету. Базам данных нужно только принимать подключения от уровня приложения (внутри VPC) и, возможно, обращаться к сервисам AWS, например S3 (для экспорта и импорта), через конечную точку VPC. Для установки исправлений и обновлений базы данных RDS является управляемым сервисом, поэтому применять исправления OS напрямую не нужно. Для самостоятельно управляемых баз данных на EC2 используйте Systems Manager Patch Manager: он может устанавливать исправления через SSM без доступа в интернет, если настроена конечная точка SSM VPC.
NAT Gateway и безопасность
NAT Gateway обеспечивает отслеживаемую NAT-трансляцию только для исходящих подключений: он разрешает инициированные исходящие подключения и ответы на них, но блокирует все непредусмотренные входящие подключения. Это не брандмауэр: он не проверяет и не фильтрует содержимое трафика. Для фильтрации исходящего трафика (например, чтобы разрешить из приватных подсетей доступ только к определённым доменам или IP-адресам назначения) нужны дополнительные средства управления: AWS Network Firewall, развёрнутый в VPC, или стороннее устройство брандмауэра за Gateway Load Balancer. Группы безопасности и NACL по-прежнему применяются к экземплярам в приватных подсетях независимо от NAT.
Приватный NAT Gateway
Помимо публичных NAT Gateway (с EIP для доступа в интернет), AWS поддерживает приватные NAT Gateway без EIP. Приватные NAT Gateway используются для трансляции приватных IP-адресов при передаче трафика между VPC или между VPC и локальными сетями, когда диапазоны CIDR перекрываются. Например, если VPC-A (10.0.0.0/16) должна взаимодействовать с локальной сетью, которая также использует 10.0.0.0/16, приватный NAT Gateway в VPC-A преобразует исходные IP-адреса в неперекрывающийся диапазон, прежде чем направить трафик через Transit Gateway в локальную сеть.
Мониторинг метрик NAT Gateway
Контролируйте состояние и производительность NAT Gateway с помощью метрик CloudWatch. Основные метрики: ActiveConnectionCount (текущее количество активных TCP-подключений через NAT), BytesInFromDestination / BytesInFromSource (передача данных в обоих направлениях), PacketDropCount (отброшенные пакеты — указывает на ограничения пропускной способности или ошибки) и ErrorPortAllocation (NAT исчерпал доступные порты; это может указывать на исчерпание портов из-за слишком большого количества подключений). Каждый NAT Gateway поддерживает до 55 000 одновременных подключений для каждого уникального назначения; сверх этого подключения могут отбрасываться.
# Get NAT Gateway active connection count
aws cloudwatch get-metric-statistics \
--namespace AWS/NATGateway \
--metric-name ActiveConnectionCount \
--dimensions Name=NatGatewayId,Value=nat-12345678 \
--start-time 2024-01-01T00:00:00Z \
--end-time 2024-01-01T01:00:00Z \
--period 300 --statistics MaximumКогда приватным подсетям не нужен NAT
Не всем рабочим нагрузкам в приватных подсетях нужен NAT Gateway. Учитывайте характер доступа: если экземплярам требуется взаимодействовать только с другими ресурсами VPC и сервисами AWS, доступными через конечные точки VPC (S3, DynamoDB, SSM, ECR, Secrets Manager), NAT Gateway можно полностью исключить, сэкономив около 32 долларов в месяц на каждую AZ и избежав платы за обработку данных. Это идеальный вариант для полностью приватных микросервисов, использующих VPC Interface Endpoints для доступа ко всем сервисам AWS. Проверьте каждый сервис, к которому обращаются экземпляры, и выясните, можно ли заменить NAT бесплатной Gateway Endpoint или платной Interface Endpoint.
Быстрая проверка
Проверьте своё понимание концепций AWS Solutions Architect (SAA-C03) из этого урока.
Итоги урока
В этом уроке Вы узнали, что NAT Gateway обеспечивает исходящий доступ в интернет для экземпляров приватной подсети, преобразуя их приватные IP-адреса в Elastic IP, в таблицу маршрутов приватной подсети необходимо добавить маршрут 0.0.0.0/0, указывающий на NAT Gateway, а также что для высокой доступности и предотвращения расходов на передачу данных между AZ следует разворачивать по одному NAT Gateway в каждой AZ. Далее мы сравним Network ACL и группы безопасности для многоуровневой защиты VPC.
Часто задаваемые вопросы
Урок «Шлюз NAT и частные подсети» бесплатный?
Да — полный текст урока «Шлюз NAT и частные подсети» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Cloud & IT Cert Prep, подпишись на CoddyKit PRO. Курс Cloud & IT Cert Prep содержит 4 уроков всего.
Чему я научусь в уроке «Шлюз NAT и частные подсети»?
Разрешите ресурсам частных подсетей выходить в интернет, не делая их напрямую доступными, с помощью управляемого шлюза NAT. Ты практикуешь Cloud & IT Cert Prep с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Cloud & IT Cert Prep?
Предыдущий опыт не требуется. Cloud & IT Cert Prep на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Шлюз NAT и частные подсети»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Cloud & IT Cert Prep?
Да. Каждый урок Cloud & IT Cert Prep включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Архитектура VPC и блоки CIDR
- Интернет-шлюз и таблицы маршрутизации
- Шлюз NAT и частные подсети
- Сетевые ACL и группы безопасности