Безопасность
Модель
- Один провайдер идентификации. Ключами доступа занимается только id. Панели — OIDC-клиенты со своими
cookie, привязанными к хосту; общей cookie на весь домен нет, так что сайт пользователя на
*.pages.xvii.network никогда не получит сессию панели.
- Короткие токены. Токены доступа — JWT, живущие 15 минут и проверяемые сервисами по ключам id.
Refresh-токены ротируются; повторное использование старого отзывает всю цепочку. API-токены хранятся как
SHA-256 и ограничиваются сервисами, проектом и сроком.
- Роли везде. Роли в команде и защищённые окружения проверяет каждый сервис на своих ресурсах. Сервисы
обращаются друг к другу с client credentials, а не с токеном человека.
- Панели только со своего источника. Запросы с cookie отклоняются, если пришли не со своего origin
панели.
- Всё журналируется. Каждое изменение через любой API записывает, кто, что, команду и IP.
Где лежат секреты
| Секрет |
Где |
Чем защищён |
| значения env |
база env |
ключи данных наборов, запечатанные мастер-ключом env |
| секреты приложений, пароли реестров и баз |
база apps |
ключ запечатывания apps |
| токены Cloudflare, ключи DNSSEC |
база domains |
ключ запечатывания domains |
| аккаунты и ключи AI |
база ai |
запечатаны, API их не возвращает |
| пароли репозиториев бэкапов |
база backups и набор для восстановления |
запечатаны |
| DNS-токен инстанса |
/etc/xvii/instance.env |
только root |
Ключи запечатывания лежат в папке данных каждого сервиса. Сохраняйте их вместе с базами и защищайте бэкапы так
же, как сам инстанс.
Пользовательский контент
Сайты, приложения и туннели раздают контент, который может написать кто угодно. Панели проверяют
Sec-Fetch-Site и Origin, чтобы такой контент не мог действовать от имени панели. Для дополнительного
разделения запланирован отдельный регистрируемый домен для пользовательского контента.
Укрепление серверов
- SSH только по ключам, root — у как можно меньшего числа людей. Root на control plane — это root на всей
платформе.
- Открывайте только нужное: 22, 80 и 443 на control plane; 7443 с control plane на relay-ноды; 53 (UDP и TCP)
на серверах имён; почтовые порты на почтовом edge.
- Обновляйте операционную систему; xvii обновляется сам, сервис за сервисом.
- Не запускайте на control plane посторонний софт, доступный из интернета.
- Команды, которые не доверяют друг другу, держите на разных нодах или запускайте их контейнеры с gVisor.
Сокет Docker
ai запускает вспомогательный контейнер через Docker на control plane, а ноды управляют Docker от root. Доступ к
сокету Docker — это root на машине: никогда не монтируйте его в контейнер приложения.