Безопасность и доступы Vanilla-операции YTsaurus Flow
Под каким пользователем работает Vanilla-операция
Запускайте раннер Vanilla-операции от имени отдельной служебной учётной записи: операция, контроллеры и воркеры наследуют учётную запись запуска. Регулярно ротируйте её секреты, выдавайте только необходимые роли и используйте разные учётные записи для продакшена и препрода.
Секреты
Секреты аутентификации, включая YT_TOKEN, никогда не должны попадать в исходный код, конфиги в репозитории или образы.
Чтобы передать в джобы секреты (например, собственный токен), перечислите имена соответствующих переменных окружения в secret_env:
"vanilla" = {
"enable" = %true;
"pool" = "<ваш-пул>";
"worker" = {"count" = 5};
"secret_env" = ["MY_TOKEN"];
};
Значения берутся из окружения запуска (того, кто выполняет команду), передаются в поле secure_vault спеки, с которой операция стартует, и внутри джобы доступны как обычные переменные окружения. В сохранённую спеку операции secure_vault не попадает: YTsaurus вырезает его перед записью, поэтому постфактум значения секретов не видны ни в Cypress, ни через атрибуты операции. YT_TOKEN указывать не нужно — он доставляется автоматически.
node_config попадает в спеку Vanilla-операции как файл и загружается в файловый кеш, поэтому это не секретный канал: не передавайте через него YT_TOKEN или другие секреты.
Аутентификация
Vanilla-операция запускается под пользователем, выполнившим команду, — этот же пользователь должен иметь доступ к YTsaurus. Отдельно настраивать аутентификацию контроллеров и воркеров, как в долгоживущем деплое, не требуется.
Для запуска обязателен токен доступа к YTsaurus: лаунчер берёт его из переменной YT_TOKEN, затем из YT_SECURE_VAULT_YT_TOKEN (её YTsaurus задаёт через secure_vault, когда лаунчер работает внутри джобы), затем из файла, на который указывает YT_TOKEN_PATH, и в последнюю очередь из ~/.yt/token. Если токена нет ни в одном из этих мест, запуск завершится ошибкой.
Для регулярного запуска выполняйте команду от имени отдельной служебной учётной записи, а не человека; требования к учётной записи перечислены в разделе Под каким пользователем работает Vanilla-операция.
Настройка аутентификации
Аутентификация для взаимодействия с YTsaurus выполняется по OAUTH-токену.
Внимание
Необходимо, чтобы пользователь (робот) имел хотя бы одну роль на кластере YT (как минимум с доступами до директории пайплайна). В противном случае возникнет ошибка отсутствия пользователя.
OAUTH
Для Vanilla-операции запустите раннер от имени служебной учётной записи с её YTsaurus-токеном. Раннер передаст YT_TOKEN контроллерам и воркерам через secure_vault; отдельные переменные YT_USER и YT_TOKEN для этих процессов не нужны.
Если контроллеры и воркеры развёрнуты отдельно от Vanilla-операции:
- Создайте для них отдельную служебную учётную запись и выпустите токен по руководству по аутентификации на кластере.
- Задайте
YT_USERиYT_TOKENв окружении каждого контроллера и воркера. Выдайте учётной записи роль на кластере и права на директорию пайплайна, входные и выходные таблицы, а также на нужный пул операций. - Регулярно ротируйте токен; не храните его в репозитории или образе.
Минимально необходимые доступы
Учётной записи пайплайна нужны только те права, без которых пайплайн не сможет работать:
- роль на кластере YTsaurus с правами на директорию пайплайна и пути всех таблиц, к которым он обращается;
- право запускать операции в нужном пуле.
Не выдавайте широкие права, например root на кластере: при компрометации они увеличивают поверхность атаки.