- все три приложения (homepage, transcriber, remembos) собирают образы локально ролью app_image, реестр и yc_*-переменные выведены из оборота - ссылавшиеся задачи обновлены: narrow-secret-scopes и no-secrets-in-playbook-output больше не ждут эту работу
43 lines
3.4 KiB
Markdown
43 lines
3.4 KiB
Markdown
# Вывести из оборота секреты с широкими правами
|
||
|
||
**Приоритет:** Средний
|
||
|
||
Показательный случай — `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](gitea-runner-on-demand.md) заводит новый
|
||
доступ к 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](vault-password-storage.md),
|
||
[справка по файловым секретам](../drafts/secrets-file-support.md).
|