Bachelor's Thesis

Authorization of Embedded Grafana Dashboards within a Web Application

Final Thesis 1.46 MB

Author of thesis: Tomáš Luštík

Acad. year: 2025/2026

Supervisor: Ing. Jan Pluskal, Ph.D.

Reviewer: Ing. Miroslav Šafář

Abstract:

Grafana is a data visualization tool that does not natively support user authorization for dashboards embedded within web applications. The aim of this thesis is to design and implement a method for authorizing individual users against Grafana in such environments. The thesis discusses available Grafana integration methods, authentication and authorization mechanisms in the .NET ecosystem, and related security risks. The proposed solution uses a reverse proxy and JSON Web Tokens (JWTs) containing user context and access rights. The resulting implementation enables fine-grained control over user access to dashboards and dashboard variables without exposing the Grafana server directly.

Keywords:

Grafana, Reverse Proxy, authorization, web application, ASP.NET

Date of defence

16.06.2026

Result of the defence

Defended (thesis was successfully defended)

znamkaCznamka

Grading

C

Process of defence

Student nejprve prezentoval výsledky, kterých dosáhl v rámci své práce. Komise se poté seznámila s hodnocením vedoucího a posudkem oponenta práce. Student následně odpověděl na otázky přítomných. Komise se na základě posudku oponenta, hodnocení vedoucího, přednesené prezentace a odpovědí studenta na položené otázky rozhodla práci hodnotit stupněm C.

Topics for thesis defence

  1. Zvažoval jste textový rozsah během práce na textové části práce?

Language of thesis

Czech

Faculty

Department

Study programme

Information Technology (BIT)

Composition of Committee

doc. Ing. Tomáš Martínek, Ph.D. (předseda)
doc. Ing. Michal Španěl, Ph.D. (místopředseda)
Ing. Jiří Hynek, Ph.D. (člen)
Ing. Filip Orság, Ph.D. (člen)
Ing. Vladimír Bartík, Ph.D. (člen)

Supervisor’s report
Ing. Jan Pluskal, Ph.D.

Student předkládá funkční reverse proxy postavenou nad frameworkem YARP, která řeší konkrétní a v praxi často řešený problém autorizace embedovaných Grafana dashboardů vůči webové aplikaci s vlastním poskytovatelem identity. Kladně hodnotím dotaženost základní inženýrské části: nezávislost autorizační logiky na konkrétním dotazovacím jazyce datového zdroje (sekce 4.4) vyřešenou validací na úrovni proměnných dashboardu místo přepisu dotazů, vynucení kiosk režimu jako ochranu proti laterálnímu pohybu v Grafaně (sekce 4.3) a dvojici JWT s krátkou platností. Nad rámec zadání student doplnil přenos identifikátoru organizace (orgId) spolu s odpovídajícím nastavením GF_AUTH_JWT_ORG_MAPPING na straně Grafany, což umožňuje provoz jediné instance proxy nad více organizacemi (sekce 5.2 a 5.6, student tento přesah explicitně zmiňuje v Závěru), a omezovač požadavků s konfigurovatelným klouzavým oknem (sekce 5.1).


Naopak ve výsledné práci spatřuji několik nedostatků, které brání vyššímu hodnocení. Rešerše stávajícího stavu je úzká a chybí v ní srovnání s produkčně používanými alternativami, kvůli čemuž je obtížné zarámovat skutečný přínos řešení. Návrh auditní vrstvy nad nástrojem OpenTelemetry s exportem do Grafana Loki, VictoriaMetrics a Grafana Tempo (sekce 4.5) je v textu popsán pouze jako zamýšlené řešení, vlastní integrace v kapitole 5 chybí a auditní záznam je v praxi realizován jako nestrukturovaný textový log (výpis 5.5), který se obtížně zpracovává v navazujících nástrojích. Omezovač požadavků pracuje výhradně na úrovni IP adresy, což v reálném nasazení za NAT, CDN nebo zpětnou proxy přestává být efektivním ochranným prvkem; toto omezení v textu není rozebráno. Validace proměnných dashboardu regulárními výrazy nad URL parametry nezohledňuje URL kódování, opakované výskyty parametrů ani citlivost na velikost písmen, byť právě tyto detaily bývají u podobné autorizace na úrovni proxy vrstvy nejčastějším zdrojem zranitelností. Testování uživatelských rolí, izolace organizací, auditního záznamu i kompatibility s více datovými zdroji zůstalo pouze na úrovni manuálních ověření nad demonstrační aplikací (sekce 6.1, podkapitoly o testování rolí a organizací, ověření auditních záznamů a testování více datových zdrojů), což u funkcí, které student sám deklaruje jako klíčové, považuji za nepřiměřené.


S ohledem na uvedené pozitivní i negativní aspekty navrhuji práci hodnotit stupněm C jako dobrou.

Evaluation criteria Verbal classification
Informace k zadání

Téma jsem vypsal na základě konkrétního požadavku z praxe, v níž se opakovaně potýkáme s tím, že Grafana nativně neumí přenést uživatelský kontext do iframe embedovaného dashboardu při použití privátních datových zdrojů. Cílem práce bylo navrhnout a implementovat mechanismus, který umožní bezpečnou autorizaci jednotlivých uživatelů externí webové aplikace vůči embedovaným Grafana dashboardům bez vystavení Grafana serveru přímo do veřejné sítě. Z mého pohledu se jedná o průměrně náročné zadání. Po implementační stránce je dostupných více cest (reverse proxy, JWT, service accounts, OIDC) a samotná konstrukce autorizační proxy s JWT představuje v odborné komunitě dobře známý vzor; obtížnost spočívá především v rozumné analýze kompromisů a v poctivém pokrytí okrajových případů. Student zvolil přístup s reverse proxy postavenou nad frameworkem YARP a dvojicí JSON Web Tokenů, kde první JWT mezi aplikací a proxy nese uživatelská oprávnění až na úroveň povolených dashboardů a jejich proměnných ve formě regulárních výrazů, a druhý JWT mezi proxy a Grafanou přenáší minimální autorizační tvrzení (sub, role, orgId). Zadání bylo splněno ve všech pěti bodech.

Práce s literaturou

Student samostatně vyhledal literární prameny. Seznam literatury obsahuje pouze 12 zdrojů, z nichž jen čtyři jsou knižní monografie a zbytek tvoří RFC a online dokumentace. Vzhledem k povaze tématu, kde se rozhodující informace nacházejí v produktové dokumentaci Grafany a Microsoftu, je převaha online zdrojů přirozená, nicméně celkový rozsah rešerše je na hranici toho, co od bakalářské práce očekávám. Postrádám hlubší zmapování alternativních produkčních řešení (např. Grafana Enterprise s nativním RBAC, nasazení s NGINX auth_request, integrace přes Keycloak gatekeeper nebo Pomerium), které by zarámovalo, v čem je navržená proxy oproti dostupným nástrojům přínosná. Bez tohoto srovnání působí návrhová rozhodnutí spíše jako volba první rozumné cesty než jako zdůvodněný výběr z alternativ.

Aktivita během řešení, konzultace, komunikace

Aktivita studenta byla v zimním semestru spíše nižší a hlavní progres je patrný až od počátku letního semestru. Konzultace probíhaly přibližně ve dvoutýdenních intervalech, převážně na popud studenta, a student na ně chodil připravený s konkrétními otázkami k aktuálnímu stavu implementace.

Aktivita při dokončování

Implementační část byla dokončena s dostatečným předstihem, což studentovi umožnilo provést integrační testy nástrojem xUnit (kapitola 6.1) i zátěžové testy nástrojem NBomber (kapitola 6.2). Textová část prošla menším počtem iterací, finální podoba se mnou byla konzultována, ale ne všechny připomínky byly zapracovány. V textu zůstávají drobné formální nedostatky (např. zdvojené číslování poznámky pod čarou ke skriptům JavaScriptu v sekcích 4.2 a 4.3, místy nekonzistentní střídání zkratky JWT a rozepsaného tvaru JSON Web Token) i obsahové mezery, k jejichž odstranění by bylo potřeba další iterace, na kterou již nebyl prostor.

Publikační činnost, ocenění

Není.

Points proposed by supervisor: 72

Grade proposed by supervisor: C

Reviewer’s report
Ing. Miroslav Šafář

Student ve své bakalářské práci zpracoval zadání zaměřené na návrh a implementaci autorizační vrstvy pro embedované Grafana dashboardy v rámci webových aplikací. Zadání považuji za splněné ve všech jeho bodech. Práce prokazuje dobrou orientaci studenta v problematice integrace systému Grafana, autentizace a autorizace webových aplikací a návrhu bezpečné middleware vrstvy.


Za nejsilnější část práce považuji realizační výstup. Implementovaná reverse proxy představuje funkční a prakticky využitelné řešení, které umožňuje jemně granulární řízení přístupu k dashboardům a jejich proměnným. Pozitivně hodnotím také větší množství testovacích scénářů pokrývajících pozitivní i negativní případy a důraz na bezpečnost navrženého řešení. Oceňuji rovněž bezstavový návrh proxy vrstvy, který umožňuje jednoduché horizontální škálování výsledného řešení.


Dílčí slabiny spatřuji především v prezentační úrovni technické zprávy. Kapitoly věnované autentizaci a autorizaci v prostředí .NET a protokolu OpenID Connect by si zasloužily podrobnější a přesnější zpracování. Některé koncepty jsou vysvětleny pouze povrchově a v textu se objevují i faktické nepřesnosti, které mohou být pro čtenáře matoucí. Práce rovněž obsahuje několik jazykových a typografických nedostatků v podobě překlepů, gramatických chyb a nekonzistentního používání některých technických pojmů. Mírné výhrady mám také k provedení zátěžových testů, kde chybí přímé porovnání latence aplikace s proxy vrstvou a bez ní.


Navzdory uvedeným nedostatkům považuji práci za kvalitní inženýrský výstup s praktickým přínosem. Výsledná aplikace bude využita v rámci aplikací vyvíjených skupinou NES@FIT. Práci proto hodnotím stupněm C.

Evaluation criteria Verbal classification Points
Náročnost zadání

Evaluation level: průměrně obtížné zadání

Zadání vyžadovalo nastudování fungování autentizace a autorizace v systému Grafana a možností její integrace do webových aplikací. Následně měl student navrhnout způsob, jak autorizaci rozšířit o jemnější granularitu přístupových oprávnění. Zadání nevyžadovalo velké množství implementační práce, jeho obtížnost však spočívala především v návrhu bezpečného řešení a v ošetření možných stavů tak, aby přidaná autorizační vrstva nemohla být útočníkem obejita. Zadání této bakalářské práce proto hodnotím jako průměrně obtížné.

Prezentační úroveň technické zprávy

Práce je logicky strukturována a jednotlivé kapitoly na sebe rozumně navazují. Kapitola, která popisuje autentizaci a autorizaci v rámci .NET aplikací společně s protokolem OpenID Connect, by si však zasloužila podrobnější zpracování, jelikož se jedná o významná východiska pro zbytek práce. Některé koncepty jsou vysvětleny pouze povrchově a v určitých částech se navíc objevují i faktické nepřesnosti, které mohou být pro čtenáře matoucí. Například popis autentizace v kapitole 3 není obecně platným tvrzením v rámci platformy .NET a u popisu JWT není z textu patrné, že jeho integritu zajišťuje kryptografický podpis.

70
Formální úprava technické zprávy

Práce po jazykové a typografické stránce obsahuje mírné nedostatky. Jedná se zejména o pravopisné chyby, například chybějící diakritiku ve slově „informácia“, nekonzistenci v používání některých pojmů, například „JWT“ a „JSON Web Token“, a občasné překlepy.

75
Realizační výstup

Realizační výstup této práce hodnotím jako její silnou stránku. Implementovaná reverse proxy může v produkčním prostředí sloužit jako autorizační brána pro přístup k systému Grafana a poskytuje funkcionalitu vyžadovanou zadáním. Pozitivně hodnotím také větší množství testovacích scénářů, které pokrývají jak pozitivní, tak negativní případy. Mírný nedostatek spatřuji v provedení zátěžových testů, kde student pracuje s latencí mockované aplikace za implementovanou proxy, avšak neporovnává ji s latencí stejné aplikace bez této proxy. Kladně naopak hodnotím, že navržená proxy je bezstavová, a lze ji tak jednoduše horizontálně škálovat.

90
Využitelnost výsledků

Výsledek práce bude prakticky využit v rámci aplikací vyvíjených skupinou NES@FIT.

Rozsah splnění požadavků zadání

Evaluation level: zadání splněno

Student splnil zadání ve všech jeho bodech.

Rozsah technické zprávy

Evaluation level: splňuje pouze minimální požadavky

Technická práce je mírně nad minimální rozsahem práce.

Práce s literaturou

Student pracoval s menším množstvím zdrojů. Mezi nimi se však nacházely jak knižní prameny vztahující se k aplikaci Grafana, tak relevantní online zdroje a RFC dokumenty.

80
Points proposed by reviewer: 75

Grade proposed by reviewer: C

Responsibility: Mgr. et Mgr. Hana Odstrčilová