Въведение
Virtual Private Cloud (VPC) е фундаментална услуга в AWS, която ви позволява да изолирате и контролирате мрежовата среда на вашите ресурси в облака. В този материал ще разгледаме как да създадете правилно конфигурирано VPC с NAT Gateway, което е критично за безопасността и функционалността на съвременните cloud архитектури.
NAT Gateway (Network Address Translation Gateway) е управлявана услуга на AWS, която позволява на инстанции в частни subnet-и да инициират изходящи връзки към интернет или други AWS услуги, като същевременно предотвратява входящи връзки от интернет. Това е ключов компонент за сигурни и мащабируеми инфраструктури.
Архитектура на решението
Ще създадем VPC с CIDR блок 10.15.0.0/16, което ни дава 65,536 IP адреса за използване. Архитектурата включва:
- Един публичен subnet (10.15.100.0/24) за NAT Gateway и евентуални публични ресурси
- Три частни subnet-а в различни Availability Zone-и за високодостъпност и устойчивост на грешки
- Internet Gateway за публична връзка
- NAT Gateway за сигурен изходящ трафик от частните subnet-и
Използването на множество Availability Zone-и е best practice в AWS, който гарантира, че вашата инфраструктура ще продължи да функционира дори при проблем в една от зоните.
Стъпка 1: Създаване на VPC
Започваме с основата на нашата мрежова инфраструктура:
- Влезте в AWS Management Console и отворете VPC Dashboard
- От менюто изберете Your VPCs → Create VPC
- Изберете опцията „VPC only“ (не използвайте wizard-а, за да имате пълен контрол)
- Конфигурирайте следните параметри:
- Name tag: my-vpc
- IPv4 CIDR block: 10.15.0.0/16
- IPv6 CIDR block: No IPv6 CIDR block (освен ако не ви е необходим IPv6)
- Tenancy: Default (shared hardware – най-икономичният вариант)
- Натиснете Create VPC
VPC-то е създадено и сега разполагате с изолирана виртуална мрежа, в която можете да разполагате AWS ресурси.
Стъпка 2: Създаване на частни subnet-и
Частните subnet-и ще съдържат вашите backend сървъри, бази данни и други ресурси, които не трябва да бъдат директно достъпни от интернет.
- Отидете на Subnets → Create subnet
- Изберете VPC: my-vpc
- Създайте три subnet-а последователно с следните параметри:
Първи частен subnet:
- Subnet name: private-subnet-a
- Availability Zone: eu-central-1a
- IPv4 CIDR block: 10.15.1.0/24
Втори частен subnet:
- Subnet name: private-subnet-b
- Availability Zone: eu-central-1b
- IPv4 CIDR block: 10.15.2.0/24
Трети частен subnet:
- Subnet name: private-subnet-c
- Availability Zone: eu-central-1c
- IPv4 CIDR block: 10.15.3.0/24
Всеки subnet предоставя 256 IP адреса (от които AWS резервира 5 за собствена употреба), което е достатъчно за повечето приложения. При необходимост от повече адреси, можете да използвате по-големи CIDR блокове като /23 или /22.
Стъпка 3: Създаване на публичен subnet
Публичният subnet е необходим за NAT Gateway и за ресурси, които изискват директна интернет връзка (например bastion host, load balancer).
- Отново в Subnets → Create subnet
- Конфигурирайте:
- Subnet name: public-subnet-a
- Availability Zone: eu-central-1a
- IPv4 CIDR block: 10.15.100.0/24
- VPC: my-vpc
Стъпка 4: Създаване и прикачане на Internet Gateway
Internet Gateway позволява комуникация между ресурсите във вашето VPC и интернет.
- Отидете на Internet Gateways → Create internet gateway
- Въведете име: my-igw
- Натиснете Create internet gateway
- След създаването, изберете gateway-а и натиснете Actions → Attach to VPC
- Изберете my-vpc и потвърдете
Едно VPC може да има само един Internet Gateway, което опростява управлението на мрежата.
Стъпка 5: Конфигуриране на Route Table за публичния subnet
Route table дефинира правилата за маршрутизация на мрежовия трафик.
- Отидете на Route Tables → Create route table
- Конфигурирайте:
- Name: public-rt
- VPC: my-vpc
- След създаването, изберете route table-а и отидете на таб Routes → Edit routes
- Добавете нов route:
- Destination: 0.0.0.0/0 (всички IP адреси)
- Target: Internet Gateway → изберете my-igw
- Запазете промените
- Отидете на таб Subnet associations → Edit subnet associations
- Изберете public-subnet-a и запазете
Този route казва на AWS да насочва целия интернет трафик от публичния subnet през Internet Gateway.
Стъпка 6: Подготовка на Elastic IP адрес
NAT Gateway изисква статичен публичен IP адрес (Elastic IP).
- Отидете в EC2 Dashboard → Elastic IPs
- Проверете дали имате неизползван Elastic IP:
- Колоната Associated instance ID трябва да показва – (тире)
- Ако всички са заети, ще трябва да заявите увеличение на лимита
Заявка за увеличение на лимита:
- Отидете в Service Quotas от AWS Console
- Търсете „EC2“ → „EC2-VPC Elastic IPs“
- Заявете увеличение (по подразбиране лимитът е 5 на регион)
Ако нямате свободен Elastic IP, създайте нов:
- Elastic IPs → Allocate Elastic IP address
- Изберете Amazon’s pool of IPv4 addresses
- Натиснете Allocate
Важно: Elastic IP адресите се таксуват, ако не са асоциирани с работещ ресурс, така че винаги прикачвайте ги към NAT Gateway или EC2 инстанции.
Стъпка 7: Създаване на NAT Gateway
NAT Gateway е критичният компонент, който позволява на частните subnet-и да достигат интернет.
- Отидете на NAT Gateways → Create NAT gateway
- Конфигурирайте:
- Name: my-nat-gateway
- Subnet: public-subnet-a (задължително публичен subnet!)
- Connectivity type: Public
- Elastic IP allocation ID: изберете подготвения или новосъздаден Elastic IP
- Натиснете Create NAT gateway
NAT Gateway преминава през няколко състояния преди да стане напълно функционален. Изчакайте статусът да стане Available (обикновено отнема 2-5 минути). Можете да проверите статуса в списъка с NAT Gateway-и.
Важни характеристики на NAT Gateway:
- Автоматично мащабируем до 45 Gbps
- Управлява се от AWS (не се нуждае от maintenance)
- Високо достъпен в рамките на Availability Zone
- Поддържа до 55,000 едновременни връзки към уникална дестинация
Стъпка 8: Конфигуриране на Route Table за частните subnet-и
Сега трябва да насочим трафика от частните subnet-и през NAT Gateway.
- Route Tables → Create route table
- Конфигурирайте:
- Name: private-rt
- VPC: my-vpc
- След създаването, отидете на таб Routes → Edit routes
- Добавете route:
- Destination: 0.0.0.0/0
- Target: NAT Gateway → изберете my-nat-gateway
- Запазете промените
- Отидете на таб Subnet associations → Edit subnet associations
- Изберете всички три частни subnet-а:
- private-subnet-a
- private-subnet-b
- private-subnet-c
- Запазете асоциациите
Сега инстанциите в частните subnet-и могат да инициират изходящи връзки към интернет, но не могат да получават несолицитирани входящи връзки.
Проверка на конфигурацията
След като завършите всички стъпки, е важно да проверите дали всичко работи правилно:
- Проверка на VPC компонентите:
- VPC Dashboard → Your VPCs → Проверете дали my-vpc е създадено
- Проверете дали има 4 subnet-а (1 публичен + 3 частни)
- Проверете дали Internet Gateway е attached към VPC-то
- Проверка на маршрутизацията:
- Route Tables → Проверете public-rt има route към Internet Gateway
- Проверете private-rt има route към NAT Gateway
- Уверете се, че subnet associations са правилни
- Тест с EC2 инстанция:
- Стартирайте тестова EC2 инстанция в един от частните subnet-и
- SSH влезте чрез bastion host или Session Manager
- Опитайте команди като
ping 8.8.8.8илиcurl https://api.ipify.org - Трябва да получите изходяща връзка през NAT Gateway
Best Practices и оптимизации
Високодостъпност
За production среди се препоръчва да създадете NAT Gateway в множество Availability Zone-и:
- Създайте публичен subnet във всяка AZ
- Създайте по един NAT Gateway в всеки публичен subnet
- Конфигурирайте отделни route table-и за всяка AZ
- По този начин, ако една AZ излезе от строя, другите ще продължат да работят
Мониторинг и алармиране
Конфигурирайте CloudWatch метрики за NAT Gateway:
- BytesInFromSource/BytesOutToDestination – проследяване на трафика
- PacketsDropCount – индикатор за проблеми
- ErrorPortAllocation – недостиг на портове (много активни връзки)
Създайте CloudWatch Alarms за критични метрики и интегрирайте със SNS за нотификации.
Икономия на разходи
NAT Gateway се таксува на час плюс per-GB обработен трафик. За да оптимизирате разходите:
- Използвайте VPC Endpoints за AWS услуги (S3, DynamoDB) – избягвате NAT Gateway таксите
- Consolidирайте трафика – не създавайте множество NAT Gateway-и без нужда
- За dev/test среди помислете за NAT Instance (по-евтин, но изисква management)
Сигурност
Допълнителни мерки за сигурност:
- Конфигурирайте Network ACLs като допълнителен слой защита
- Използвайте Security Groups за fine-grained контрол на трафика
- Активирайте VPC Flow Logs за audit и troubleshooting
- Редовно преглеждайте route tables и правилата за достъп
Логване и compliance
За compliance и troubleshooting:
- Активирайте VPC Flow Logs на ниво VPC или subnet
- Изпращайте логовете към CloudWatch Logs или S3
- Използвайте AWS Config за проследяване на промените в конфигурацията
- Интегрирайте с SIEM системи за централизиран мониторинг
Често срещани проблеми и решения
Проблем: Инстанциите в частни subnet-и нямат интернет достъп
Решения:
- Проверете дали NAT Gateway е в статус „Available“
- Уверете се, че route table-ът на частните subnet-и има route 0.0.0.0/0 → NAT Gateway
- Проверете Security Groups на инстанциите – трябва да разрешават outbound трафик
- Проверете Network ACLs – по подразбиране трябва да разрешават трафика
Проблем: NAT Gateway не може да се създаде
Причини и решения:
- Нямате свободен Elastic IP – заявете нов или освободете съществуващ
- NAT Gateway трябва да е в публичен subnet с route към Internet Gateway
- Проверете service quotas за NAT Gateway (по подразбиране 5 на AZ)
Проблем: Високи разходи за NAT Gateway
Оптимизации:
- Преместете AWS сървис трафика на VPC Endpoints (S3, DynamoDB, etc.)
- Намалете излишния outbound трафик
- Consolidирайте архитектурата – един NAT Gateway може да обслужва множество subnet-и в същата AZ
- За non-production среди, използвайте NAT Instance или споделен NAT Gateway
Заключение
Създаването на правилно конфигурирано VPC с NAT Gateway е фундаментална умение за всеки DevOps инженер или cloud архитект, работещ с AWS. Тази конфигурация осигурява баланс между достъпност, сигурност и функционалност, като позволява на вашите частни ресурси да комуникират с интернет по контролиран начин.
Следвайки стъпките в това ръководство, създадохте production-ready мрежова архитектура с:
- Изолирани частни subnet-и в три Availability Zone-и за високодостъпност
- Сигурен изходящ интернет достъп през управлявана NAT Gateway услуга
- Ясно разделение между публични и частни мрежови зони
- Готовност за мащабиране и разширяване според нуждите на бизнеса
Не забравяйте да документирате вашата инфраструктура и да прилагате Infrastructure as Code практики (CloudFormation, Terraform) за автоматизирано и повторяемо deployment на подобни архитектури в бъдеще.
Този материал е част от DevOpsBG ресурси за обучение по cloud технологии. За повече информация, посетете devopsbg.net



