Перейти до вмісту

Модуль 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 використовує дворівневу модель:

  1. Secret (Секрет): Логічний контейнер (напр. prod-db-password). Він має назву, теги та права доступу, але не містить самих даних.
  2. Version (Версія): Самі зашифровані дані. Кожна версія є незмінною. Якщо ви хочете змінити пароль, ви додаєте нову версію.

Стани версій:

  • ENABLED: Працює, додатки можуть читати.
  • DISABLED: Тимчасово вимкнено (наприклад, під час ротації).
  • DESTROYED: Видалено назавжди (неможливо відновити).

Робота із секретами через CLI

Розділ «Робота із секретами через CLI»
Terminal window
# Створення секрету з першою версією (echo -n важливо, щоб не додати зайвий пробіл)
echo -n "my-super-secret-password" | gcloud secrets create db-pass \
--replication-policy="automatic" \
--data-file=-

Додатки зазвичай звертаються до версії latest, щоб завжди отримувати актуальний пароль.

Terminal window
gcloud secrets versions access latest --secret=db-pass

Інтеграція з додатками

Розділ «Інтеграція з додатками»

Cloud Run (Найкращий спосіб)

Розділ «Cloud Run (Найкращий спосіб)»

Ви можете підключити секрет прямо в налаштуваннях Cloud Run. Він з’явиться в контейнері як змінна оточення або як файл. Важливо: Cloud Run фіксує версію секрету в момент деплою. Якщо ви додали нову версію в Secret Manager, вам потрібно передеплоїти сервіс, щоб він її підхопив.

Віртуальні машини читають секрети через 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).


Практична вправа: Безпечне зберігання

Розділ «Практична вправа: Безпечне зберігання»
  1. Створіть секрет lab-api-key.
  2. Додайте другу версію до цього ж секрету.
  3. Надайте доступ вашому сервісному акаунту:
    Terminal window
    gcloud secrets add-iam-policy-binding lab-api-key \
    --member="serviceAccount:YOUR_SA_EMAIL" \
    --role="roles/secretmanager.secretAccessor"
  4. Прочитайте версію №1, а потім версію latest через CLI.

Переходьте до Модуля 2.10: Cloud Operations — ви навчитеся моніторити ваші сервіси, збирати логи та налаштовувати сповіщення, щоб знати про проблеми раніше за ваших користувачів.