- Уход от Yandex Container Registry на роль `app_image`: homepage, transcriber, remembos собираются локально и едут через docker save/load. - Сужение прав секретов: `yc_oauth_token` открывает весь аккаунт ради одного `docker login` — вторая задача зависит от первой.
43 lines
3.3 KiB
Markdown
43 lines
3.3 KiB
Markdown
# Вывести из оборота секреты с широкими правами
|
|
|
|
**Приоритет:** Средний
|
|
|
|
`yc_oauth_token` в vault — OAuth-токен аккаунта Yandex Cloud: реестр, виртуалки,
|
|
биллинг. Нужен он ради одной операции — `docker login` в плейбуках homepage,
|
|
transcriber и remembos. Радиус прав несопоставим с задачей, и 24 июля он вместе
|
|
с ещё 52 переменными ушёл открытым текстом в транскрипт: цена одной такой утечки
|
|
— весь аккаунт, а не один сервис.
|
|
|
|
Принцип, к которому идём: секрет даёт доступ ровно к тому, ради чего заведён.
|
|
Всё, что шире, — либо заменяется на скоупированный доступ (сервисный аккаунт с
|
|
минимальными ролями вместо токена аккаунта, отдельный ключ на бакет вместо
|
|
общего), либо выводится из оборота совсем, либо риск принимается явно и
|
|
записывается.
|
|
|
|
Ядро задачи закрывается сборкой без реестра: после
|
|
[local-image-build](local-image-build.md) `yc_oauth_token` не нужен ни в одном
|
|
плейбуке и удаляется из vault. До неё эта задача не начинается — иначе деплой
|
|
трёх приложений просто ляжет.
|
|
|
|
Дальше — ревизия остального: пройти по `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),
|
|
[secrets-env-to-file](secrets-env-to-file.md).
|