AWSJuniorTechnical

Чем public subnet отличается от private subnet?

Публичная подсеть имеет маршрут 0.0.0.0/0 через Internet Gateway, ресурсы в ней доступны из интернета при наличии публичного IP. Приватная подсеть маршрутизирует интернет-трафик через NAT Gateway и не имеет прямой достижимости извне.

Публичная vs приватная подсеть в AWS VPC

Разница между публичной и приватной подсетью в AWS — это не флаг или атрибут самой подсети, а исключительно конфигурация маршрутизации. Обе подсети технически одинаковы; то, что делает подсеть публичной — это наличие маршрута к Internet Gateway.

Публичная подсеть

Подсеть считается публичной, если выполнены все три условия:

  • В ассоциированной route table есть маршрут 0.0.0.0/0 → igw-xxxxxxxx (Internet Gateway).
  • IGW подключён к VPC.
  • Ресурс в подсети имеет публичный IP или Elastic IP.

Ресурсы в публичной подсети доступны из интернета (при условии, что Security Group разрешает входящий трафик) и могут сами инициировать соединения в интернет.

Приватная подсеть

Подсеть считается приватной, если:

  • В ассоциированной route table нет маршрута через IGW.
  • Исходящий трафик в интернет (если он нужен) идёт через NAT Gateway, который находится в публичной подсети.
  • У ресурсов нет публичных IP (или они есть, но недостижимы из интернета — нет маршрута).

Ресурсы в приватной подсети недоступны из интернета напрямую. Для управления используют Bastion Host или AWS Systems Manager Session Manager.

Типичная архитектура 3-уровневого приложения

# Публичные подсети: Load Balancer, Bastion, NAT Gateway
# Приватные подсети app tier: EC2 с приложением
# Приватные подсети db tier: RDS, ElastiCache

# Route table для публичной подсети
# 10.0.0.0/16  -> local
# 0.0.0.0/0    -> igw-0123456789abcdef0

# Route table для приватной подсети
# 10.0.0.0/16  -> local
# 0.0.0.0/0    -> nat-0123456789abcdef0

# Route table для DB-подсети (без интернета вообще)
# 10.0.0.0/16  -> local

# Включить auto-assign public IP для публичной подсети
aws ec2 modify-subnet-attribute \
  --subnet-id subnet-0123456789abcdef0 \
  --map-public-ip-on-launch

Атрибут Auto-assign Public IP

У каждой подсети есть атрибут MapPublicIpOnLaunch. Если он включён, каждый новый инстанс в этой подсети автоматически получает публичный IP. Для публичных подсетей рекомендуется его включить. Но сам по себе этот атрибут не делает подсеть публичной — без маршрута к IGW публичный IP бесполезен.

Подводные камни

  • Публичный IP у инстанса не означает, что он доступен из интернета — Security Group может блокировать весь входящий трафик.
  • Приватный IP инстанса в публичной подсети — инстанс без публичного IP в публичной подсети всё равно не доступен из интернета, хотя маршрут к IGW есть.
  • При остановке EC2 публичный IP (не Elastic IP) освобождается и при запуске выдаётся новый — используйте Elastic IP для стабильных адресов.
  • RDS в публичной подсети с флагом PubliclyAccessible=true — частая ошибка безопасности. Даже если нужен внешний доступ, лучше использовать VPN или туннель.
  • Default VPC создаёт все подсети публичными — при запуске EC2 в Default VPC он сразу получает публичный IP.
  • Приватная подсеть без NAT Gateway — EC2 не сможет обновить пакеты, обратиться к AWS API по публичным эндпоинтам. Нужен NAT или VPC Endpoints.

Common mistakes

  • Определять subnet по имени Public или Private.
  • Забывать про public IP для IPv4 internet access.
  • Считать security group заменой routing decision.

What the interviewer is testing

  • Объясняет роль route table и IGW.
  • Понимает public IP requirement.
  • Размещает ALB, app и DB в правильных subnet tiers.

Sources

Related topics