RBACX 6개월 후: ReBAC, AI 정책, 그리고 일괄 권한 부여
지난 6개월 동안 RBACX 라이브러리는 기본적인 RBAC/ABAC 엔진에서 ReBAC와 AI 생성 정책을 포함한 종합적인 시스템으로 발전했습니다. 주요 취약점들이 해결되었습니다: 컴파일러의 거부 우회, 조건 재귀를 통한 DoS, HTTP 소스의 SSRF 등이 있습니다. 시스템은 이제 MAX_CONDITION_DEPTH=50, verify_ssl을 적용하고 사설 IP를 차단합니다.
일괄 권한 확인은 Guard 클래스의 evaluate_batch_async 및 evaluate_batch_sync 메서드를 통해 구현되었습니다. 이는 UI 애플리케이션에서 여러 요청을 처리할 때 asyncio.gather를 사용한 병렬 평가로 지연 시간을 줄이는 문제를 해결합니다.
decisions = await guard.evaluate_batch_async([
(subject, Action("read"), doc, ctx),
(subject, Action("write"), doc, ctx),
(subject, Action("delete"), doc, ctx),
])
ReBAC: 속성 대신 관계 그래프
관계 기반 권한 부여(ReBAC)는 Google Drive나 GitHub와 유사한 "누가 무엇을 누구에게 허용했는가" 모델을 도입합니다. 권한은 엔티티 그래프로 정의됩니다: 문서 소유자가 접근 권한을 위임합니다. OpenFGA 및 SpiceDB와의 통합은 객체 목록을 위한 일괄 gRPC를 포함한 동기/비동기 호출을 지원합니다. 로컬 그래프는 테스트에 적합합니다.
구현은 리소스 특이성에 기반한 정책 평가를 재작업해야 했으며, 컴파일과 해석 경로 간의 동등성에 대한 테스트가 포함되었습니다.
LLM을 활용한 정책 생성
추가 rbacx[ai] 패키지는 OpenAPI 스키마에서 정책 생성을 자동화하는 AIPolicy를 추가합니다. 파이프라인: LLM 생성 → JSON 스키마 검증 → 재시도 → 린터 → 컴파일.
from rbacx.ai import AIPolicy
ai = AIPolicy(api_key="sk-...", model="gpt-4o")
result = await ai.from_schema(openapi_schema)
guard = Guard(result.policy)
자연어 정제를 위한 refine_policy 및 결정 설명을 위한 explain_decision과 같은 메서드는 엔진의 결정론적 특성을 유지합니다. 지원에는 OpenAI, Ollama, Azure 및 재시도 제한이 있는 호환 가능한 제공업체가 포함됩니다.
roles: ["admin", "editor"]와 같은 단축 표현은 유연성을 잃지 않으면서 RBAC를 단순화합니다. condition과의 AND 조합은 린터가 중복에 대해 경고합니다.
추가 성능 개선
- 다중 호스트 배포를 위한 Redis 어댑터(
rbacx[cache-redis]) 캐싱. - Django ASGI 4.1+를 위한 비동기 어댑터.
- 엄격한 타입 모드:
Guard(policy, strict_types=True)는 암시적 타입 변환을 비활성화합니다. - 규칙 매칭 디버깅을 위한
explain=True결정 추적.
이러한 변경 사항은 PyQt UI에서 마이크로서비스까지 프로덕션 환경에서의 확장성을 보장합니다.
핵심 요약
- 보안 우선: 거부 우회, DoS 재귀, SSRF 패치; 실패 시 폐쇄 동작.
- ReBAC 통합: 일괄 gRPC를 지원하는 OpenFGA/SpiceDB, 개발용 로컬 그래프.
- AI 자동화: 수동 DSL 없이 OpenAPI에서 정책 생성, 검증 및 재시도 포함.
- 일괄 권한: UI 및 객체 목록을 위한 병렬 평가.
- 성능: Redis 캐시, 비동기 Django, 엄격한 타이핑.
— Editorial Team
아직 댓글이 없습니다.