Безопасность и доступы 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-операции:

  1. Создайте для них отдельную служебную учётную запись и выпустите токен по руководству по аутентификации на кластере.
  2. Задайте YT_USER и YT_TOKEN в окружении каждого контроллера и воркера. Выдайте учётной записи роль на кластере и права на директорию пайплайна, входные и выходные таблицы, а также на нужный пул операций.
  3. Регулярно ротируйте токен; не храните его в репозитории или образе.

Минимально необходимые доступы

Учётной записи пайплайна нужны только те права, без которых пайплайн не сможет работать:

  • роль на кластере YTsaurus с правами на директорию пайплайна и пути всех таблиц, к которым он обращается;
  • право запускать операции в нужном пуле.

Не выдавайте широкие права, например root на кластере: при компрометации они увеличивают поверхность атаки.

См. также