Настройки сети и безопасности
Liteset работает на Litestar/ASGI, поэтому расширения Flask-CORS / flask-talisman / flask-wtf не активны. Их ключи конфигурации (ENABLE_CORS, CORS_OPTIONS, TALISMAN_ENABLED, TALISMAN_CONFIG, WTF_CSRF_*) по-прежнему читаются из superset_config.py и применяются Liteset'овским middleware-стеком — построенным на CORSMiddleware и TrustedHostMiddleware Starlette и Litestar CSRF middleware. Конфигурация идентична; реализация под капот ом — async.
CORS
Ключи в superset_config.py:
ENABLE_CORS: должен бытьTrueдля включения CORS.CORS_OPTIONS: dict CORS-опций. Liteset принимает тот же формат, что и Flask-CORS —origins,supports_credentials,allow_headers,methods,expose_headers,max_age— и пробрасывает вCORSMiddlewareStarlette. Семантика опций — в документации Flask-CORS.
HTTP-заголовки
Apache Superset использует flask-talisman для security-заголовков (CSP, HSTS, X-Frame-Options и т. д.). Liteset реализует то же поведение через Litestar middleware, читающий TALISMAN_ENABLED и TALISMAN_CONFIG из superset_config.py — поверхность конфигурации не меняется.
HTML-эмбеддинг дашбордов и чартов
Два способа: через SDK или прямой ссылкой. Во втором случае любой человек со ссылкой получит доступ к дашборду.
Эмбеддинг публичной прямой ссылки
Меняете CSP, чтобы разрешить отображение Liteset-контента на конкретных доменах, делаете дашборд публичным (т. е. обходите аутентификацию). Затем добавляете URL дашборда в iframe на другом сайте.
Изменение CSP
Скопируйте весь блок TALISMAN_CONFIG из superset/config.py в свой superset_config.py и добавьте frame-ancestors:
TALISMAN_ENABLED = True
TALISMAN_CONFIG = {
"content_security_policy": {
# ...
"frame-ancestors": ["*.my-domain.com", "*.another-domain.com"],
# ...
},
}
Перезапустите Liteset.
Сделать дашборд публичным
- Добавьте feature flag
'DASHBOARD_RBAC': True(список флагов) вsuperset_config.py. - Добавьте роль
Publicк дашборду — см. инструкцию.
Встраивание публичного дашборда
<iframe
width="600"
height="400"
seamless
frameBorder="0"
scrolling="no"
src="https://liteset.my-domain.com/superset/dashboard/10/?standalone=1&height=400"
>
</iframe>
Встраивание чарта
Embed-код чарта генерируется из его edit-view: правый верхний угол ... → Share → Embed code.
Включение эмбеддинга через SDK
В правом верхнем углу страницы дашборда нажмите ... рядом с EDIT DASHBOARD — должен появиться пункт Embed dashboard.
Чтобы включить, добавьте в .env:
SUPERSET_FEATURE_EMBEDDED_SUPERSET=true
CSRF
Apache Superset использует flask-wtf для CSRF; Liteset переопределяет ту же защиту в async middleware, читающем те же ключи WTF_CSRF_*.
Чтобы исключить endpoint'ы из CSRF (например, кастомный auth postback) — добавьте их в WTF_CSRF_EXEMPT_LIST:
WTF_CSRF_EXEMPT_LIST = ["/auth/oauth-callback"]
Заголовок X-CSRFToken, который использует SPA-фронтенд, идентичен Apache Superset — изменений во фронтенде не нужно.
SSH-туннелирование
-
Включите feature flag.
- Установите
SSH_TUNNELINGвTrue. - Для дополнительной безопасности можно переопределить класс
SSHTunnelManagerвsuperset_config.py. SSH_TUNNEL_LOCAL_BIND_ADDRESSуправляет адресом хоста, на котором туннель будет доступен внутри вашего VPC.
- Установите
-
Создайте БД с включённым SSH-туннелем.
- При включённом feature flag в диалоге подключения БД появится переключатель SSH-туннеля.
- Liteset поддерживает два режима аутентификации (basic + private key); credentials берутся у провайдера.
-
Проверьте, что данные идут.
- После включения SSH-туннелирования откройте SQL Lab и запустите запрос — убедитесь, что данные идут через туннель.
HTTP/2
Рекомендуемый деплой Liteset — Uvicorn за reverse proxy (nginx, Traefik, Caddy), который терминирует TLS и говорит по HTTP/2 upstream. С таким setup'ом HTTP/2 работает «из коробки» — Liteset-конфигурация не нужна. Старый workaround SUPERSET_WEBSERVER_DOMAINS / domain-sharding из старых версий Superset не используется.
Middleware
Liteset читает ADDITIONAL_MIDDLEWARE из superset_config.py и поддерживает два формата:
- Litestar / ASGI middleware — рекомендуемая форма. Список классов или factory, соответствующих протоколу middleware Litestar. Они добавляются в
Litestar(middleware=[...])в порядке app-factory. - WSGI middleware (shim для совместимости) — список middleware в WSGI-стиле. Они оборачиваются в
WsgiToAsgiи запускаются до того, как запрос дойдёт до Litestar-роутера. Используйте только при портировании middleware из Apache Superset, который не хочется переписывать.
Например, для маппинга HTTP_X_PROXY_REMOTE_USER из reverse-proxy в request user (эквивалент Flask-сниппета в Apache Superset, копировавшего заголовок в REMOTE_USER Gunicorn):
# superset_config.py
from litestar.middleware import DefineMiddleware
from superset.middleware.remote_user import RemoteUserHeaderMiddleware
ADDITIONAL_MIDDLEWARE = [
DefineMiddleware(RemoteUserHeaderMiddleware, header="x-proxy-remote-user"),
]
Если вы за nginx/HAProxy и нужны только корректные scheme/host/IP — кастомный middleware не нужен, передайте --proxy-headers --forwarded-allow-ips '*' Uvicorn.