Архітектура інфраструктури
Основою цього веб-сайту є не просто набір HTML-файлів, а повністю автоматизована, хмарна інфраструктура, розгорнута на AWS, що використовує сучасні передові практики DevOps.
Основним архітектурним принципом, що лежить в основі цього проєкту, є максимальна безпека в поєднанні з повною автоматизацією.
🏗️ Інфраструктура як код (IaC)⌗
Вся інфраструктура налаштована та керується як код за допомогою Terraform, що забезпечує відтворюване, узгоджене та масштабоване середовище.
- Обчислення: Додаток працює на інстансі Amazon Linux 2023 EC2 (t3.micro).
- Мережа та безпека: Інстанс знаходиться в суворо ізольованій приватній підмережі AWS VPC. В нього відсутня публічна адреса IPv4, а вхідний доступ SSH (порт 22) повністю вимкнено для усунення зовнішніх векторів атак.
- Маршрутизація: Вихідне підключення до Інтернету забезпечується виключно через IPv6 через вихідний інтернет-шлюз, що запобігає будь-якому неініціативному вхідному трафіку.
- Веб-сервер: Легкий сервер Nginx забезпечує ефективну доставку статичних ресурсів.
Причина вибору архітектури на основі EC2 замість S3+CloudFront описана нижче в розділі Архітектурні компроміси та дизайнерські рішення.
(Browser)
(DNS / WAF / Cache)
(Nginx Web Server)
🚀 Конвеєр CI/CD (дії GitHub)⌗
Процес розгортання повністю автоматизований. Будь-який код, що надсилається до гілки main, запускає наступний робочий процес безперервної інтеграції та безперервного розгортання (CI/CD):
- Збірка: Запуск дій GitHub налаштовується для перевірки вихідного коду та компіляції статичного сайту за допомогою фреймворку Hugo.
- Пакет: Скомпільований сайт стискається в незмінний артефакт (
site.zip). - Доставка (AWS S3): Артефакт безпечно завантажується в приватний бакет Amazon S3, що регулюється суворими політиками IAM.
- Віддалене виконання (AWS SSM): Конвеєр надсилає команду розгортання через API AWS Systems Manager (SSM).
- Атомарне оновлення: Агент SSM, який безпечно працює в ізольованому екземплярі EC2, отримує артефакт з S3 через внутрішню мережу IPv6 та виконує атомарну заміну каталогів для Nginx, забезпечуючи розгортання без простоїв.
⚖️ Архітектурні компроміси та проєктні рішення⌗
Хоча розміщення статичного вебсайту за допомогою Amazon S3 у зв’язці з Amazon CloudFront (CDN) є галузевим стандартом і безсерверним підходом, у цьому проєкті свідомо використовується архітектура на базі EC2.
Це рішення було зумовлене двома основними факторами:
- Оптимізація витрат: Ця конкретна архітектура гарантує, що вся інфраструктура та CI/CD пайплайн працюють абсолютно безкоштовно, залишаючись суворо в межах лімітів AWS Free Tier.
- Демонстрація навичок: Розгортання приватної VPC, налаштування вебсервера Linux з нуля та оркестрація безпечного пайплайну розгортання на основі pull-моделі через AWS SSM слугує практичною демонстрацією ширших компетенцій у галузі системної інженерії, мереж та безпеки. Це підкреслює глибоке розуміння базових сервісів AWS, що виходить за межі простого безсерверного хостингу статичних сайтів.
🔐 Безпека та принцип найменших привілеїв (PoLP)⌗
Ця архітектура суворо дотримується принципу найменших привілеїв (Principle of Least Privilege):
- Інстансу EC2 надано доступ лише для читання (read-only), який повністю обмежений конкретним S3 бакетом з артефактами.
- Runner GitHub Actions використовує вбудовану (inline) IAM-політику, яка дозволяє операції
s3:PutObjectлише для визначеного префікса артефактів, і обмежує виконанняssm:SendCommandвиключно тими інстансами, які мають тег ресурсуportfolio-web-instance.