Files
pet-project-server/docs/backlog/narrow-secret-scopes.md
T
av fbd0a66f44 backlog: secrets-env-to-file разложена по приложениям
- Шесть задач `secrets-file-*` вместо одной: outline, wakapi, authelia,
  gramps (средний), gitea, tududi (низкий, выигрыш частичный). Wanderer
  отпал — файловых секретов не умеет ни meilisearch, ни pocketbase.
- Матрица механизмов со ссылками на код уехала в
  docs/drafts/secrets-file-support.md, родитель — на кладбище.
2026-07-25 12:25:50 +03:00

3.4 KiB

Вывести из оборота секреты с широкими правами

Приоритет: Средний

yc_oauth_token в vault — OAuth-токен аккаунта Yandex Cloud: реестр, виртуалки, биллинг. Нужен он ради одной операции — docker login в плейбуках homepage, transcriber и remembos. Радиус прав несопоставим с задачей, и 24 июля он вместе с ещё 52 переменными ушёл открытым текстом в транскрипт: цена одной такой утечки — весь аккаунт, а не один сервис.

Принцип, к которому идём: секрет даёт доступ ровно к тому, ради чего заведён. Всё, что шире, — либо заменяется на скоупированный доступ (сервисный аккаунт с минимальными ролями вместо токена аккаунта, отдельный ключ на бакет вместо общего), либо выводится из оборота совсем, либо риск принимается явно и записывается.

Ядро задачи закрывается сборкой без реестра: после local-image-build yc_oauth_token не нужен ни в одном плейбуке и удаляется из vault. До неё эта задача не начинается — иначе деплой трёх приложений просто ляжет.

Дальше — ревизия остального: пройти по 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, справка по файловым секретам.