Перейти к содержанию

Консоль, CLI и доступ

Консоль и CLI используют один и тот же JSON API (справочник), поэтому у них общие аутентификация, роли и журнал аудита.

Роли

Роль Может
viewer Смотреть цели, резервные копии, сравнения, сводки изменений, восстановления и песочницы.
operator + создавать копию сейчас, проверять сейчас, приостанавливать и возобновлять, восстанавливать в песочницу, выполнять запросы и управлять песочницами, читать журнал аудита.
restorer + восстанавливать в новую базу данных или в скачивание.
restorer-admin + восстанавливать на месте, закреплять и откреплять резервные копии.

Роли сопоставляются с email и группами Cloudflare Access в чарте:

auth:
  provider: cloudflare-access
  roles:
    viewer: ["*@example.com"]
    operator: ["group:sre"]
    restorer: [alice@example.com]
    restorer-admin: [bob@example.com]
  scopes:                               # optional: limit someone to some orgs or projects
    contractor@example.com: { orgs: [acme] }

Tenax проверяет JWT Cf-Access-Jwt-Assertion (домен команды и audience) в каждом запросе, поэтому запрос в обход туннеля отклоняется. Когда Tenax сам публикует консоль (см. ниже), он сам находит домен команды и audience; для приложения Access, которым управляете вы, задайте auth.cloudflareAccess.teamDomain и audience. С auth.provider: none (только для локальной разработки) каждый запрос получает auth.devRole.

Доступ к консоли

Есть два способа, и их можно использовать вместе:

  • Для тех, у кого нет доступа к кластеру: публичный адрес за входом. Задайте имя хоста, и Tenax опубликует консоль на нём через свой туннель Cloudflare: приложение Access, которое пускает тех же людей, что и маршруты песочниц (expose.cloudflare.allowEmails / allowGroups), DNS-запись и маршрут к tenax-api. Пользователи открывают https://tenax.example.com в браузере или один раз выполняют tenax login --server https://tenax.example.com и входят со своим email; kubeconfig им не нужен. Их роль определяется auth.roles.

    auth:
      provider: cloudflare-access
      roles: { viewer: ["*@example.com"], restorer: [alice@example.com] }
    expose:
      provider: cloudflare
      cloudflare: { zone: example.com, apiTokenSecret: tenax-cloudflare-api, allowEmails: ["*@example.com"] }
      cloudflared: { enabled: true, consoleHostname: tenax.example.com }
    

    Контроллер поддерживает маршрут и сохраняет домен команды и audience приложения в Secret tenax-console-access, который читает tenax-api; пока его нет, консоль отвечает "console login not ready". Чтобы прочитать домен команды, API-токену нужно разрешение Access: Organizations, Identity Providers, and Groups: Read; без него Tenax берёт домен из перенаправления на вход консоли, либо задайте auth.cloudflareAccess.teamDomain.

  • Для тех, у кого есть доступ к кластеру: tenax console. Команда пробрасывает локальный порт к консоли через ваш kubeconfig и открывает её в браузере. Она работает до Ctrl+C; из другого терминала остальные команды используют её с export TENAX_SERVER=http://127.0.0.1:8080. С auth.provider: cloudflare-access пробросу не нужен вход через Access: он попадает на порт, который tenax-api обслуживает только на 127.0.0.1 внутри своего пода и до которого может достать только kubectl port-forward, поэтому кто войдёт, решает RBAC Kubernetes (pods/portforward в namespace Tenax), с ролью auth.portForwardRole (по умолчанию restorer-admin; пустое значение отключает порт).

CLI

Установка и подключение: Установка CLI. Все команды: Справочник CLI.

Журнал аудита

Каждая запись (создание копии, восстановление, закрепление, изменения песочниц) и каждый запрос регистрируются с пользователем, ролью, целью, результатом и адресом источника — в структурированных журналах tenax-api и на странице консоли Аудит.