RBACX po pół roku: ReBAC, polityki AI i autoryzacja wsadowa
W ciągu pół roku biblioteka RBACX ewoluowała od podstawowego silnika RBAC/ABAC do pełnoprawnego systemu z ReBAC i generowaniem polityk przez AI. Naprawiono krytyczne luki: obejście deny-overrides w kompilatorze, DoS przez rekurencję warunków oraz SSRF w źródle HTTP. Obecnie stosowane są MAX_CONDITION_DEPTH=50, verify_ssl i blokowanie prywatnych adresów IP.
Wsadowa weryfikacja uprawnień została zaimplementowana metodami evaluate_batch_async i evaluate_batch_sync w klasie Guard. Rozwiązuje to problem wielu zapytań w aplikacjach UI, gdzie równoległa ocena przez asyncio.gather zmniejsza opóźnienia.
decisions = await guard.evaluate_batch_async([
(subject, Action("read"), doc, ctx),
(subject, Action("write"), doc, ctx),
(subject, Action("delete"), doc, ctx),
])
ReBAC: graf relacji zamiast atrybutów
Autoryzacja oparta na relacjach (ReBAC) wprowadza model "kto komu co zezwolił", analogiczny do Google Drive czy GitHub. Uprawnienia definiowane są przez graf encji: właściciel dokumentu deleguje dostęp. Integracje z OpenFGA i SpiceDB obsługują wywołania synchroniczne/asynchroniczne, w tym wsadowe gRPC dla list obiektów. Lokalny graf nadaje się do testów.
Implementacja wymagała przeprojektowania oceny polityk pod kątem specyficzności zasobów, z testami na równoważność ścieżek kompilacji i interpretacji.
Generowanie polityk za pomocą LLM
Dodatek rbacx[ai] wprowadza AIPolicy do automatyzacji tworzenia polityk ze schematów OpenAPI. Potok: generowanie przez LLM → walidacja JSON Schema → ponowne próby → linter → kompilacja.
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 do doprecyzowania w języku naturalnym oraz explain_decision zachowują determinizm silnika. Obsługa OpenAI, Ollama, Azure i kompatybilnych dostawców z limitami ponownych prób.
Skrót roles: ["admin", "editor"] upraszcza RBAC bez utraty elastyczności. Kombinacja z condition przez AND, linter ostrzega o nakładaniu się.
Dodatkowe usprawnienia wydajności
- Buforowanie z adapterem Redis (
rbacx[cache-redis]) dla wdrożeń multi-host. - Async-adapter dla Django ASGI 4.1+.
- Tryb ścisłych typów:
Guard(policy, strict_types=True)wyłącza niejawne konwersje. - Śledzenie decyzji z
explain=Truedo debugowania dopasowania reguł.
Te zmiany zapewniają skalowalność w produkcji: od UI PyQt po mikrousługi.
Co jest ważne
- Bezpieczeństwo na pierwszym miejscu: zamknięto obejścia deny, rekurencję DoS i SSRF; zachowanie fail-closed.
- Integracje ReBAC: OpenFGA/SpiceDB z wsadowym gRPC, lokalny graf dla dev.
- Automatyzacja AI: polityki z OpenAPI bez ręcznego DSL, z walidacją i ponownymi próbami.
- Wsadowa weryfikacja uprawnień: równoległa ocena dla UI i list obiektów.
- Wydajność: bufor Redis, async Django, ścisłe typowanie.
— Editorial Team
Brak komentarzy.