0Pricing
AWS Solutions Architect · Урок

Шлюз NAT и частные подсети

Разрешите ресурсам частных подсетей выходить в интернет, не делая их напрямую доступными, с помощью управляемого шлюза NAT.

«Шлюз NAT и частные подсети» — бесплатный урок AWS Solutions Architect на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения AWS Solutions Architect, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс AWS Solutions Architect содержит 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-1a

NAT 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) и разблокировать остальной курс AWS Solutions Architect, подпишись на CoddyKit PRO. Курс AWS Solutions Architect содержит 4 уроков всего.

Чему я научусь в уроке «Шлюз NAT и частные подсети»?

Разрешите ресурсам частных подсетей выходить в интернет, не делая их напрямую доступными, с помощью управляемого шлюза NAT. Ты практикуешь AWS Solutions Architect с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать AWS Solutions Architect?

Предыдущий опыт не требуется. AWS Solutions Architect на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «Шлюз NAT и частные подсети»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке AWS Solutions Architect?

Да. Каждый урок AWS Solutions Architect включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Архитектура VPC и блоки CIDR
  2. Интернет-шлюз и таблицы маршрутизации
  3. Шлюз NAT и частные подсети
  4. Сетевые ACL и группы безопасности
← Назад к AWS Solutions Architect