Консоль, 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 и на странице консоли Аудит.