Модуль 2.6: GCP Artifact Registry
Складність: [MEDIUM] | Час на виконання: 1 год | Передумови: Модуль 2.1 (IAM та ієрархія ресурсів)
Чому цей модуль важливий
Розділ «Чому цей модуль важливий»У листопаді 2021 року популярний npm-пакет ua-parser-js був скомпрометований. Зловмисник опублікував версії, що встановлювали майнери криптовалют на Linux та Windows. Будь-який CI/CD конвеєр, що робив npm install у цей час, автоматично затягував шкідливий код у продакшн. Компанії, що використовували власні реєстри з кешуванням, мали перевагу: їхні системи брали перевірені копії з локального кешу, а не прямо з публічного репозиторію.
Artifact Registry — це єдине місце в GCP для зберігання всіх ваших артефактів: Docker-образів, пакетів npm, Python (PyPI), Java (Maven) та навіть пакетів Linux (Apt/Yum). Це наступник старого Container Registry (GCR), який став стандартом для безпечної доставки ПЗ.
У цьому модулі ви навчитеся створювати репозиторії, завантажувати образи, налаштовувати автоматичне сканування на вразливості та використовувати Artifact Registry як безпечний кеш для публічних реєстрів.
Artifact Registry vs Container Registry (GCR)
Розділ «Artifact Registry vs Container Registry (GCR)»Хоча багато хто досі використовує gcr.io, Google активно переводить усіх на Artifact Registry.
| Функція | Container Registry (GCR) | Artifact Registry |
|---|---|---|
| Формати | Тільки Docker образи | Docker, npm, Maven, Python, Go, Apt, Yum |
| Гранулярність | Один реєстр на проєкт | Багато іменованих репозиторіїв на проєкт |
| Безпека | Базове сканування | Просунуте сканування, IAM на рівні репо |
| Кешування | Немає | Може працювати як кеш для Docker Hub |
Робота з Docker-образами
Розділ «Робота з Docker-образами»Авторизація
Розділ «Авторизація»Перш ніж пушити образи, треба навчити ваш Docker спілкуватися з Google:
gcloud auth configure-docker us-central1-docker.pkg.devФормат URL образу
Розділ «Формат URL образу»В Artifact Registry шлях до образу виглядає так:
РЕГІОН-docker.pkg.dev/ID_ПРОЄКТУ/НАЗВА_РЕПО/ІМ'Я_ОБРАЗУ:ТЕГ
Незмінність тегів (Immutable Tags)
Розділ «Незмінність тегів (Immutable Tags)»Це критично для продакшну. Якщо увімкнути цю функцію, ви не зможете перезаписати тег v1.0 новим образом. Це гарантує, що розгортання, яке працювало вчора, сьогодні підтягне рівно той самий код.
Сканування на вразливості
Розділ «Сканування на вразливості»Artifact Registry може автоматично перевіряти кожен завантажений образ на наявність відомих дірок у безпеці (CVE).
- CRITICAL/HIGH: Потрібно виправляти негайно.
- Enhanced Scanning: Окрім пакетів ОС, Google може сканувати вразливості у ваших бібліотеках (напр. у файлах
package.jsonабоrequirements.txt).
Remote Repositories: Захист від зовнішніх збоїв
Розділ «Remote Repositories: Захист від зовнішніх збоїв»Ви можете налаштувати Artifact Registry так, щоб він виступав проксі-сервером для Docker Hub.
- Ваш сервер просить образ
nginxу Artifact Registry. - Artifact Registry завантажує його з Docker Hub, зберігає копію у себе і віддає вам.
- Наступного разу образ береться миттєво з локальної мережі Google. Це економить трафік і захищає вас, якщо Docker Hub раптом “впаде” або введе нові ліміти.
Типові помилки
Розділ «Типові помилки»| Помилка | Чому це стається | Як виправити |
|---|---|---|
Використання тегу latest | Зручно при розробці | Для продакшну використовуйте тільки версії (v1.2.3) або Git SHA |
| Занадто багато старих образів | Кожен білд створює новий образ, місце заповнюється | Налаштуйте Cleanup Policies для автоматичного видалення старих образів |
Права Owner для CI/CD | ”Щоб точно працювало” | Надавайте роль artifactregistry.writer тільки на конкретний репозиторій |
| Вимкнене сканування | Здається, що це не важливо | Вмикайте scanOnPush, щоб знати про вразливості до того, як вони потраплять у кластер |
Тест
Розділ «Тест»1. Що таке "Immutable tags" і чому це важливо для безпеки?
Це заборона перезаписувати образи з тим самим тегом. Це важливо, бо зловмисник не зможе підмінити ваш перевірений образ prod-v1 своїм шкідливим образом під тим самим ім’ям.
2. Чи можна в одному репозиторії Artifact Registry зберігати і Docker-образи, і npm-пакети?
Ні. Кожен репозиторій має свій формат (Docker, npm, Maven тощо). Вам потрібно створити окремі репозиторії для різних типів артефактів.
Практична вправа: Створення репозиторію та завантаження образу
Розділ «Практична вправа: Створення репозиторію та завантаження образу»- Створіть Docker-репозиторій у вашому регіоні:
Terminal window gcloud artifacts repositories create my-repo \--repository-format=docker --location=us-central1 --immutable-tags - Зберіть будь-який локальний образ та тегуйте його за правилами Artifact Registry.
- Завантажте його (push) та перевірте результати сканування в консолі GCP.
Наступний модуль
Розділ «Наступний модуль»Переходьте до Модуля 2.7: Cloud Run — ви навчитеся запускати ваші контейнери у безсерверному режимі, master-ревізії та налаштовувати приватний доступ через VPC.