zittenyetten/Azure-based_Enterprise-RAG-Prompt-Injection-
GitHub: zittenyetten/Azure-based_Enterprise-RAG-Prompt-Injection-
Stars: 0 | Forks: 0
# Azure-ready Secure Enterprise RAG PoC
뷰티 기업을 가정한 권한 기반 Secure RAG PoC입니다. 초기 버전은 Azure 실제 연동 대신 로컬 JSON 데이터, SQLite 로그 DB, FastAPI, Streamlit, rule-based 보안 엔진, keyword retrieval, Mock LLM으로 동작합니다.
## Architecture
- `backend/`: FastAPI API와 보안 RAG 파이프라인
- `frontend/app.py`: 사용자 Chat UI
- `frontend/admin_dashboard.py`: 관리자 대시보드
- `data/`: 샘플 사용자, 문서, 공격 테스트셋
- `tests/`: Prompt Analyzer, Risk Score, Permission Filter, Response Filter, 공격 시나리오 테스트
- `docs/`: 아키텍처, 보안 파이프라인, API, 실행/테스트 가이드 문서
상세 문서는 [docs/README.md](./docs/README.md)에서 시작하세요.
요청 흐름:
1. User Context Resolver가 사용자 역할, 그룹, clearance, 허용/차단 데이터 타입을 로드합니다.
2. Prompt Analyzer가 prompt injection, jailbreak, 시스템 프롬프트 탈취, 민감 데이터 요청을 탐지합니다.
3. Risk Score Engine이 LOW, MEDIUM, HIGH, CRITICAL 위험도를 계산합니다.
4. Permission Filter가 사용자 권한으로 접근 가능한 문서만 검색 대상으로 허용합니다.
5. LocalKeywordSearchProvider가 keyword 기반으로 관련 문서를 검색합니다.
6. Retrieval Sanitizer가 검색 chunk 안의 간접 prompt injection/RAG poisoning 문장을 제거합니다.
7. MockLLMProvider가 정제된 context만 기반으로 답변을 생성합니다.
8. Response Filter가 개인정보와 권한 밖 민감정보를 마스킹하거나 차단합니다.
9. 모든 요청, 탐지, 검색 결과, 차단 이력은 SQLite에 저장됩니다.
## Run
가장 간단한 로컬 프로토타입 실행:
.\run_prototype.ps1
실행 후 브라우저에서 `http://localhost:8501`을 열면 Chat, Admin Dashboard, Sample Data를 한 화면에서 확인할 수 있습니다. 이 모드는 FastAPI 서버를 따로 띄우지 않습니다.
이미 의존성이 설치되어 있으면 설치 과정을 자동으로 건너뜁니다. 강제로 다시 설치하려면 `.\run_prototype.ps1 -Install`, 설치 확인도 건너뛰려면 `.\run_prototype.ps1 -SkipInstall`을 사용합니다.
수동 실행:
python -m venv .venv
.\.venv\Scripts\Activate.ps1
pip install -r requirements.txt
streamlit run prototype_app.py
FastAPI와 Streamlit을 분리해서 실행하려면 아래 방식을 사용합니다.
python -m venv .venv
.\.venv\Scripts\Activate.ps1
pip install -r requirements.txt
uvicorn backend.main:app --reload --host 0.0.0.0 --port 8000
다른 터미널에서 Chat UI:
.\.venv\Scripts\Activate.ps1
streamlit run frontend/app.py
관리자 대시보드:
.\.venv\Scripts\Activate.ps1
streamlit run frontend/admin_dashboard.py
API 문서는 `http://localhost:8000/docs`에서 확인할 수 있습니다.
## API
- `POST /chat`
- `GET /users`
- `GET /users/{user_id}`
- `GET /documents`
- `GET /documents/{doc_id}`
- `POST /documents/ingest`
- `GET /logs/queries`
- `GET /logs/detections`
- `GET /logs/retrievals`
- `GET /admin/stats`
## User Roles
샘플 사용자는 `general_employee`, `cs_staff`, `marketing_staff`, `rnd_staff`, `manufacturing_staff`, `hr_staff`, `finance_staff`, `legal_staff`, `admin`을 포함합니다. 각 사용자는 clearance level, groups, allowed data types, denied data types를 가집니다.
## Data Classification
- Level 1 Public: 브랜드 소개, 제품 설명, FAQ
- Level 2 Internal: CS 매뉴얼, 캠페인 가이드, 온보딩
- Level 3 Confidential: 판매 실적, 고객 주문 샘플, 제조 SOP
- Level 4 Restricted: 제품 레시피, 급여 정보, 투자 자료, 계약서
## Attack Scenario Tests
pytest
포함된 테스트:
- 급여 정보 조회 prompt injection
- 마케팅 담당자의 제품 레시피 우회 요청
- 시스템 프롬프트 탈취 요청
- RAG poisoning chunk 제거
- CS 권한 사용자의 고객 전화번호 마스킹
- 정상 Public FAQ 질의
## Azure Extension Points
현재 placeholder:
- `AzureAISearchProvider`: Azure AI Search 연동 위치
- `OpenAIProvider`: OpenAI/Azure OpenAI 연동 위치
- `AzureKeyVaultSecretManager`: Azure Key Vault 연동 위치
- `ToolPermissionGateway`, `HumanApprovalGateway`, `EnterpriseToolConnector`: Agent/Tool 확장 위치
향후 확장:
- Microsoft Entra ID SSO
- Azure AI Search document-level access control
- Microsoft Purview sensitivity label
- Azure AI Content Safety Prompt Shields
- Azure Monitor/Application Insights
- Human approval workflow
- Foundry Agent Service 배포
## Limitations
이 PoC는 보안 흐름을 보여주기 위한 로컬 구현입니다. 검색은 keyword 기반이며, rule-based 탐지는 실제 운영용 보안 제품을 대체하지 않습니다. 운영 환경에서는 Azure AI Search, Azure OpenAI, Content Safety, Purview, Entra ID, Key Vault, 중앙 로깅을 결합해야 합니다.