- все три приложения (homepage, transcriber, remembos) собирают образы локально ролью app_image, реестр и yc_*-переменные выведены из оборота - ссылавшиеся задачи обновлены: narrow-secret-scopes и no-secrets-in-playbook-output больше не ждут эту работу
3.4 KiB
Вывести из оборота секреты с широкими правами
Приоритет: Средний
Показательный случай — yc_oauth_token: OAuth-токен всего аккаунта Yandex Cloud
(реестр, виртуалки, биллинг) ради одной операции, docker login в плейбуках
homepage, transcriber и remembos. 24 июля он вместе с ещё 52 переменными ушёл
открытым текстом в транскрипт: цена одной такой утечки — весь аккаунт, а не один
сервис. Из этого репозитория он уже выведен (см. ниже), но такой перекос радиуса
надо найти и снять у остальных переменных.
Принцип, к которому идём: секрет даёт доступ ровно к тому, ради чего заведён. Всё, что шире, — либо заменяется на скоупированный доступ (сервисный аккаунт с минимальными ролями вместо токена аккаунта, отдельный ключ на бакет вместо общего), либо выводится из оборота совсем, либо риск принимается явно и записывается.
Ядро задачи уже закрыто: homepage, transcriber и remembos собирают образы
локально ролью app_image, docker_login из плейбуков ушёл, а yc_oauth_token
вместе с yc_container_registry* удалён из vault (коммит 6a0d786).
Дальше — ревизия остального: пройти по group_vars/all/secrets.yml и проставить
каждой переменной радиус («один сервис» / «весь аккаунт у провайдера» / «все
бэкапы»). Кандидаты в широкие видны уже по назначению — ключи S3 для restic,
доступ к Postbox, — но разбирать их надо в этой задаче, а не заранее.
Готово, когда у каждой переменной vault записан радиус, а каждая широкая либо заменена на скоупированную, либо помечена принятым риском с причиной.
Держать в уме: gitea-runner-on-demand заводит новый доступ к API Yandex Cloud (старт и остановка ВМ). Если она поедет раньше — сразу сервисный аккаунт с минимальными ролями, а не переиспользование OAuth-токена, иначе задача вернётся тем же текстом.
Ротация уже утёкших значений — отдельный сюжет, он ведётся в
SECRETS-ROTATION.md (файл вне git). Здесь речь не о смене значения, а о
сокращении того, что это значение открывает.
Связано: group_vars/all/secrets.yml, playbook-homepage.yml, playbook-transcriber.yml, playbook-remembos.yml, vault-password-storage, справка по файловым секретам.