RBACX za půl roku: ReBAC, AI politiky a dávková autorizace
Za posledních šest měsíců se knihovna RBACX vyvinula z jednoduchého RBAC/ABAC enginu na plnohodnotný systém s ReBAC a AI generováním politik. Byly opraveny kritické zranitelnosti: obejití deny-overrides v kompilátoru, DoS prostřednictvím rekurze podmínek a SSRF v HTTP zdroji. Nyní se uplatňuje MAX_CONDITION_DEPTH=50, verify_ssl a blokování privátních IP adres.
Dávková kontrola práv je implementována metodami evaluate_batch_async a evaluate_batch_sync ve třídě Guard. To řeší problém s mnoha požadavky v UI aplikacích, kde paralelní vyhodnocení pomocí asyncio.gather snižuje latenci.
decisions = await guard.evaluate_batch_async([
(subject, Action("read"), doc, ctx),
(subject, Action("write"), doc, ctx),
(subject, Action("delete"), doc, ctx),
])
ReBAC: graf vztahů místo atributů
Autorizace založená na vztazích (ReBAC) zavádí model "kdo komu co povolil", podobný jako v Google Drive nebo GitHub. Práva jsou definována grafem entit: vlastník dokumentu deleguje přístup. Integrace s OpenFGA a SpiceDB podporují synchronní/asynchronní volání, včetně dávkového gRPC pro seznamy objektů. Lokální graf je vhodný pro testování.
Implementace vyžadovala přepracování vyhodnocování politik podle specifičnosti zdrojů, s testy na ekvivalenci cest kompilace a interpretace.
Generování politik pomocí LLM
Extra rbacx[ai] přidává AIPolicy pro automatizaci tvorby politik z OpenAPI schémat. Pipeline: generování LLM → validace JSON Schema → opakované pokusy → linter → kompilace.
from rbacx.ai import AIPolicy
ai = AIPolicy(api_key="sk-...", model="gpt-4o")
result = await ai.from_schema(openapi_schema)
guard = Guard(result.policy)
Metody refine_policy pro upřesnění v přirozeném jazyce a explain_decision zachovávají determinismus enginu. Podpora OpenAI, Ollama, Azure a kompatibilních poskytovatelů s limity na opakované pokusy.
Zkratka roles: ["admin", "editor"] zjednodušuje RBAC bez ztráty flexibility. Kombinace s condition přes AND, linter varuje před překryvy.
Další vylepšení výkonu
- Ukládání do mezipaměti s Redis adaptérem (
rbacx[cache-redis]) pro nasazení na více hostitelích. - Async adaptér pro Django ASGI 4.1+.
- Strict types mode:
Guard(policy, strict_types=True)vypíná implicitní převody. - Sledování rozhodnutí s
explain=Truepro ladění shody pravidel.
Tyto změny zajišťují škálovatelnost v produkci: od PyQt UI až po mikroslužby.
Co je důležité
- Bezpečnost na prvním místě: uzavřeno obejití deny, DoS rekurze a SSRF; chování fail-closed.
- ReBAC integrace: OpenFGA/SpiceDB s dávkovým gRPC, lokální graf pro vývoj.
- AI automatizace: politiky z OpenAPI bez manuálního DSL, s validací a opakovanými pokusy.
- Dávková kontrola práv: paralelní vyhodnocení pro UI a seznamy objektů.
- Výkon: Redis mezipaměť, async Django, strict typing.
— Editorial Team
Zatím žádné komentáře.