Модуль 2.9: GCP Secret Manager
Складність: [MEDIUM] | Час на виконання: 1.5 год | Передумови: Модуль 2.1 (IAM та ієрархія ресурсів)
Чому цей модуль важливий
Розділ «Чому цей модуль важливий»У січні 2023 року аудит коду в одній SaaS-компанії виявив, що пароль до продуктової бази даних PostgreSQL зберігався прямо в коді Kubernetes ConfigMap більше двох років. Пароль бачили всі розробники, він пересилався в Slack і зберігався в локальних файлах на ноутбуках. Коли людина звільнялася, пароль не змінювали. Компанія витратила шість тижнів на зміну паролів у 42 сервісах, що призвело до трьох збоїв у продакшні через помилки в конфігурації.
Ця історія дуже поширена. Секрети — паролі, API-ключі, сертифікати — це найчутливіші дані в компанії, але до них часто ставляться як до звичайних налаштувань. Secret Manager створений, щоб вирішити цю проблему. Це централізоване, захищене сховище, де доступ до кожного пароля суворо контролюється через IAM, а кожна зміна версіонується.
У цьому модулі ви навчитеся створювати секрети, керувати їхніми версіями, налаштовувати права доступу та підключати секрети до ваших додатків у Cloud Run та Compute Engine без жодного пароля у вихідному коді.
Основи Secret Manager: Секрети та Версії
Розділ «Основи Secret Manager: Секрети та Версії»Secret Manager використовує дворівневу модель:
- Secret (Секрет): Логічний контейнер (напр.
prod-db-password). Він має назву, теги та права доступу, але не містить самих даних. - Version (Версія): Самі зашифровані дані. Кожна версія є незмінною. Якщо ви хочете змінити пароль, ви додаєте нову версію.
Стани версій:
- ENABLED: Працює, додатки можуть читати.
- DISABLED: Тимчасово вимкнено (наприклад, під час ротації).
- DESTROYED: Видалено назавжди (неможливо відновити).
Робота із секретами через CLI
Розділ «Робота із секретами через CLI»Створення секрету
Розділ «Створення секрету»# Створення секрету з першою версією (echo -n важливо, щоб не додати зайвий пробіл)echo -n "my-super-secret-password" | gcloud secrets create db-pass \ --replication-policy="automatic" \ --data-file=-Доступ до даних
Розділ «Доступ до даних»Додатки зазвичай звертаються до версії latest, щоб завжди отримувати актуальний пароль.
gcloud secrets versions access latest --secret=db-passІнтеграція з додатками
Розділ «Інтеграція з додатками»Cloud Run (Найкращий спосіб)
Розділ «Cloud Run (Найкращий спосіб)»Ви можете підключити секрет прямо в налаштуваннях Cloud Run. Він з’явиться в контейнері як змінна оточення або як файл. Важливо: Cloud Run фіксує версію секрету в момент деплою. Якщо ви додали нову версію в Secret Manager, вам потрібно передеплоїти сервіс, щоб він її підхопив.
Compute Engine (ВМ)
Розділ «Compute Engine (ВМ)»Віртуальні машини читають секрети через API за допомогою сервісного акаунта. Вам не потрібно зберігати ключі на диску — машина сама авторизується в Google і отримує пароль.
Ротація секретів
Розділ «Ротація секретів»Ротація — це процес регулярної зміни паролів. Secret Manager може автоматично запускати Cloud Function, яка змінить пароль у базі даних і оновить секрет у сховищі. Це золотий стандарт безпеки.
Типові помилки
Розділ «Типові помилки»| Помилка | Чому це стається | Як виправити |
|---|---|---|
| Паролі в ConfigMaps | ”Так простіше дебажити” | Використовуйте Secret Manager; ConfigMaps не шифруються надійно |
Права Admin для додатка | Щоб не возитися з IAM | Надавайте роль secretAccessor тільки на один конкретний секрет |
| Зайвий перенос рядка | echo без -n додає \n | Завжди використовуйте echo -n при створенні секретів |
| Використання одного секрету для dev/prod | ”Потім розділимо” | Розділяйте секрети за ієрархією назв (напр. dev/db-pass, prod/db-pass) |
Тест
Розділ «Тест»1. Чим відрізняється роль Secret Manager Viewer від Secret Manager Secret Accessor?
Viewer дозволяє бачити метадані (назву секрету, коли він створений), але НЕ дозволяє читати сам пароль. Secret Accessor дозволяє читати зашифровані дані. Для додатків завжди використовуйте Secret Accessor.
2. Чи можна змінити дані в існуючій версії секрету (напр. у версії №3)?
Ні. Версії є незмінними (immutable). Щоб змінити пароль, ви повинні створити нову версію (№4).
Практична вправа: Безпечне зберігання
Розділ «Практична вправа: Безпечне зберігання»- Створіть секрет
lab-api-key. - Додайте другу версію до цього ж секрету.
- Надайте доступ вашому сервісному акаунту:
Terminal window gcloud secrets add-iam-policy-binding lab-api-key \--member="serviceAccount:YOUR_SA_EMAIL" \--role="roles/secretmanager.secretAccessor" - Прочитайте версію №1, а потім версію
latestчерез CLI.
Наступний модуль
Розділ «Наступний модуль»Переходьте до Модуля 2.10: Cloud Operations — ви навчитеся моніторити ваші сервіси, збирати логи та налаштовувати сповіщення, щоб знати про проблеми раніше за ваших користувачів.