Mond
๋ ๋ง์ ํ๋ฉด ยท More previews
๐ ์ด๋ค OSS์ธ๊ฐ์? ยท What is Mond?
- ๋ฌด์์ ํธ๋๊ฐ โ DevSecOps ๋๊ตฌ๊ฐ ๋๋ฌด ํฉ์ด์ ธ ์๊ณ , ๋ฐ๊ฒฌ์ฌํญ์ด ๋๋ฌด ๋ง๊ณ , ์์ฌ๊ฒฐ์ ์ ๋๋ฌด ๋๋ฆฝ๋๋ค. Mond๋ AI๊ฐ 1์ฐจ ๋ถ์ํด์ ์ฌ๋์ด ๊ฒฐ์ ๋ง ํ๋ฉด ๋๋ ํ๋ฆ์ ๋ง๋ญ๋๋ค.
- ์ด๋ป๊ฒ ๋ค๋ฅธ๊ฐ โ ํด๋ผ์ฐ๋ / ์ค์บ๋ / AI provider / IdP โ ์ด๋์๋ ๋ฌถ์ด์ง ์์ต๋๋ค. ์ด๋ํฐ๋ก ๊ฐ์๋ผ์ฐ๊ณ , ํ๊ตญ์ด๊ฐ 1๊ธ ์๋ฏผ์ ๋๋ค.
- ์ด๋๋ก ๊ฐ๋๊ฐ โ v0.2: ์์ฐ ์๋ ๋๊ธฐํ ยท RAG ๊ธฐ๋ฐ AI Insights ยท OPA Rego ํ๊ฐ ยท CI ํจํค์ง ยท SBOM diff ยท ์ค์บ๋ ์๋ ๋ผ์ฐํ ๋ฑ 11๊ฐ ํญ๋ชฉ ์๋ฃ. v0.3: ๋ฉํฐ ์ํฌ์คํ์ด์ค ยท ISMS-P ์ฆ๋น ํจํค์ง ยท GitLab/Bitbucket ๋๊ธฐํ ยท vLLM ๊ฒ์ดํธ์จ์ด ์๋ฃ. ๋ค์(v0.4): ๋ฉํฐ ํด๋ฌ์คํฐ K8s ์๋ ๋๊ธฐํ, AWS Auto-scaling, ์์ ์ ์ฒด ์ํฌ์คํ์ด์ค ๋ถ๋ฆฌ.
๐ ์์ธํ ์ด์ผ๊ธฐ๋ โ docs/ABOUT.md ๐ ๏ธ ์ค์นยท์ด์ ๊ฐ์ด๋ โ docs/SETUP.md
In English: a vendor-neutral, self-service DevSecOps platform that consolidates asset inventory, scanning, AI-triaged findings, IAM access requests, policy simulation, and regulation mapping into a single flow. Bring your own scanners (Trivy/Semgrep/Nuclei/...), your own AI provider (Anthropic/OpenAI/Bedrock/Ollama), your own IdP (Keycloak/Okta/Google). See docs/ABOUT.md and docs/SETUP.md.
โก ์์ํ๊ธฐ ยท Get started
๐ณ Docker Compose โ 30์ด ๋ฐ๋ชจ (๋ก์ปฌยทํ๊ฐ์ฉ)
git clone https://github.com/jland-93/mond.git && cd mond
cp .env.example .env
# (์ ํ) ANTHROPIC_API_KEY๋ฅผ .env์ ๋ฃ์ผ๋ฉด ์ค์ Claude ๋ถ์์ด ๋์ํฉ๋๋ค.
docker compose up -d
- ํ๋ก ํธ โ http://localhost:3000
- ๋ฐฑ์๋ docs โ http://localhost:8000/docs
- ์ฒซ ๊ฐ์
์๊ฐ ์๋
ADMIN. MFA(ํจ์คํค or TOTP) 1ํ ๋ฑ๋ก ํ ์ง์ .
โต Helm chart โ ์ด์ ๋ฐฐํฌ (Kubernetes)
OCI ๋ ์ง์คํธ๋ฆฌ์ ์๋ ๋ฐฐํฌ๋๋ ์ฐจํธ๋ก ํ ์ค ์ค์น:
helm install mond oci://ghcr.io/jland-93/charts/mond \
--version 0.3.1 \
-n mond --create-namespace \
-f charts/mond/values-prod.yaml \
--set ingress.hosts[0].host=mond.your-corp.com \
--set secrets.existingSecret=mond-secrets
- ์ฐจํธ ์์ค โ
charts/mond/(values.yamlยทvalues-prod.yaml) - ์๋ ๋ฐฐํฌ โ ํ๊ทธ push ์
.github/workflows/release.ymlhelm job - ์ปจํ
์ด๋ ์ด๋ฏธ์ง โ
ghcr.io/jland-93/mond-backend:<ver>ยทโฆ-frontend:<ver>(multi-arch amd64/arm64) - EKS / GKE / AKS ๊ถ์ฅ ์ค์ ยท ์ํฌ๋ฆฟ ๊ด๋ฆฌ(External-Secrets) โ docs/SETUP.md Part 2
๐ ๏ธ SSO ยท MFA ยท AI provider ์ ํ ยท ๊ด๋ฆฌ์ ์ด๊ธฐ ์ธํ โ docs/SETUP.md
๐ค GitHub Actions โ ํ ์ค ํตํฉ
CI/CD์์ push ๋๋ PR๋ง๋ค Mond ์ค์บ์ ์๋ ํธ๋ฆฌ๊ฑฐ. Security Settings์์ webhook ํ ํฐ ๋ฐ๊ธ โ repo secrets์ ๋ฑ๋ก โ workflow์ ๋ค์ step ํ ์ค.
- name: Mond scan
uses: jland-93/mond/.github/actions/mond-scan@main
with:
mond_host: mond.your-corp.com
webhook_token: ${{ secrets.MOND_WEBHOOK_TOKEN }}
asset_id: 42 # Mond UI Assets ํ์ด์ง์์ ID ํ์ธ
scanner: trivy # trivy | semgrep | nuclei
์๋ ์์ฑ๋ YAML์ Mond Security Settings โ Personal Webhook Tokens โ CI ์ค๋ํซ ์์ฑ์์๋ ๋ฐ์ ์ ์์ต๋๋ค.
๐ Overview
Mond (๋ ์ผ์ด๋ก "๋ฌ")์ ์ด๋ค ํด๋ผ์ฐ๋๋ ์ด๋ค ์ค์บ๋๋ ์๊ด์์ด ๋์ํ๋, AI ๊ธฐ๋ฐ ์ ํ์๋น์ค DevSecOps ํ๋ซํผ์ ๋๋ค. ์์ฐ / ์ค์บ / ๋ฐ๊ฒฌ์ฌํญ / ์ ์ฑ ์ ๋จ์ผ ๋ชจ๋ธ๋ก ๋ค๋ฃจ๊ณ , Claude๋ฅผ ํ์ฉํด ๋ฐ๊ฒฌ๋ ์ด์๋ฅผ ์๋ ํธ๋ฆฌ์์ง ํ๊ณ ์์ ๊ฐ์ด๋๊น์ง ์ ์ํฉ๋๋ค.
๐ฏ Why Mond?
- ๋ฒค๋ ๋น์ข ์ โ Trivy / Semgrep / Nuclei๋ฅผ ์ด๋ํฐ๋ก ํตํฉ. AWS / ํน์ ํด๋ผ์ฐ๋์ ๋ฌถ์ด์ง ์์.
- AI ์ ํ์๋น์ค โ Claude๊ฐ ๋ฐ๊ฒฌ์ฌํญ์ ๋ถ์ํด severity ์ฌํ๊ฐ, ์์ ์ฝ๋ ์ ์, ์์ฐ์ด ์ฟผ๋ฆฌ ์๋ต.
- ์ฆ์ ์ฌ์ฉ โ
docker compose upํ ์ค. ์ค์บ๋ ๋ฐ์ด๋๋ฆฌ๊ฐ ์์ผ๋ฉด stub ๋ชจ๋๋ก UI ๋ฐ๋ชจ. - ๋ชจ๋์ โ ์ ์ค์บ๋๋
ScannerAdapterํ ํด๋์ค๋ก ์ถ๊ฐ. - Mond ๋คํฌ ํ ๋ง โ ๊ฐ๋ ์ฑ ๋์ ๋ฌ๋น ๋ฌด๋ (๋คํฌ ๋ค์ด๋น + ๋ณด๋ผ ๊ธ๋ก์ฐ).
โจ ํต์ฌ ๊ธฐ๋ฅ
| ๋ฉ๋ด | ๊ธฐ๋ฅ |
|---|---|
| Dashboard | ๋ณด์ ์ ์, ์์ฐ/๋ฐ๊ฒฌ ํต๊ณ, ์ต๊ทผ ์ค์บ |
| Assets | ์์ฐ ์ธ๋ฒคํ ๋ฆฌ (repo / image / host / URL / cloud / app) |
| Scans | ์ค์บ ํธ๋ฆฌ๊ฑฐ + ์ด๋ํฐ๋ณ ์คํ ์ด๋ ฅ |
| Findings | ๋ฐ๊ฒฌ์ฌํญ ์กฐํ/์ํ ๋ณ๊ฒฝ + AI ๋ถ์ ๋๋ก์ด |
| Policies | SAST / SCA / IaC / DAST / Container / Secrets / Compliance ๋ฃฐ์ |
| Policy Simulation | "์ด๋ฒ PR์ ์ด finding์ด ๋ค์ด๊ฐ๋ฉด ์ด๋ค ์ ์ฑ ์ด ๊นจ์ง๊น" ๋ฏธ๋ฆฌ๋ณด๊ธฐ |
| AI Insights | ์์ฐ์ด ์ฟผ๋ฆฌ, intent ๋ถ๋ฅ, Claude ๋ต๋ณ |
| Regulations Guide | ์ฌ์ ์๋๋ฆฌ์ค โ ์ ์ฉ ๊ท์ (K-PIPAยทGDPRยทHIPAAยทPCI-DSSยทโฆ) + ์์ ยท์๋ฌด |
| Reports | ์์ฐ๋ณ SBOM(CycloneDX 1.5 ํ์ค โ components purl + vulnerabilities) + ์๋๋ฆฌ์ค๋ณ ์ปดํ๋ผ์ด์ธ์ค ๋ฆฌํฌํธ (JSON / Markdown) |
| Integrations | ์ค์บ๋ / AI / MCP (stdio+HTTP) / ์๋ฆผ ์ฑ๋ / GitHub Webhook ์๋ด |
| Settings | ํฌ์ค / ๋ฒ์ / ํ๊ฒฝ / ์ธ์ด |
ํ๊ตญ์ด ๊ธฐ๋ณธ ยท ์์ด ๋ณด์กฐ (i18n)
UI๋ ํ๊ตญ์ด๋ฅผ ๊ธฐ๋ณธ์ผ๋ก ํ์ํ๋ฉฐ, ์ฐ์ธก ์๋จ ํ ๊ธ๋ก ์์ด๋ก ์ ํํ ์ ์์ต๋๋ค.
DEFAULT_LOCALE=ko|en๋ก ์ด๊ธฐ๊ฐ์ ๋ฐ๊ฟ ์ ์๊ณ , ์ ํ์ ๋ธ๋ผ์ฐ์ localStorage์ ์ง์๋ฉ๋๋ค.
์ ํ์๋น์ค ์๋ํ
| ๊ธฐ๋ฅ | ๋ฐฉ์ |
|---|---|
| ์๋ ์ค์บ (GitHub push) | POST /api/v1/webhooks/github โ ๋งค์นญ ๋ ํฌ ์์ฐ ์๋ trivy ์ค์บ |
| ์๋ฆผ ๋ค์ฑ๋ | ์๊ณ์น ์ด์ finding์ Slack/Discord/Teams/Generic webhook์ผ๋ก ์๋ ์ ์ก (์ฑ๋๋ณ ํ์ ๋ณํ) |
| MCP โ Claude Desktop/Code | stdio: python -m mcp_server. HTTP+SSE: /mcp ๋ง์ดํธ |
๐๏ธ ์ํคํ ์ฒ
graph LR
UI[Web UI<br/>React + Vite + Ant Design]
API[REST API<br/>FastAPI + asyncpg]
AI[AI Engine<br/>Anthropic Claude]
SCAN[Scanner Adapters<br/>Trivy ยท Semgrep ยท Nuclei]
DB[(PostgreSQL)]
R[(Redis)]
UI -->|/api/v1| API
API --> DB
API --> R
API --> AI
API --> SCAN
5๊ฐ ํต์ฌ ๋๋ฉ์ธ: Asset ยท Scan ยท Finding ยท Policy ยท AIInsight
Assetโ ๋ณดํธ ๋์ (URI + ๋ผ๋ฒจ + ํ๊ฒฝ)Scanโ ์ด๋ํฐ 1ํ ์คํ ๊ฒฐ๊ณผFindingโ fingerprint ๊ธฐ๋ฐ dedup๋ ๋ณด์ ์ด์Policyโ ๋ฃฐ์ + ์ปดํ๋ผ์ด์ธ์ค ๋งคํAIInsightโ Claude๊ฐ ๋ง๋ triage / remediation / explain
๐ Quick Start
์ฌ์ ์๊ตฌ์ฌํญ
- Docker & Docker Compose
- (์ ํ)
ANTHROPIC_API_KEYโ ์์ด๋ ๊ธฐ๋ณธ ๊ท์น ๋ชจ๋๋ก ๋ชจ๋ ํ๋ฉด์ด ๋์ํฉ๋๋ค.
์คํ
git clone https://github.com/jland-93/mond.git
cd mond
cp .env.example .env
# .env์ ANTHROPIC_API_KEY๋ฅผ ๋ฃ์ผ๋ฉด ์ค์ Claude ๋ถ์์ด ์๋ํฉ๋๋ค.
docker compose up -d
- ๋ฐฑ์๋ API: http://localhost:8000/docs
- ํ๋ก ํธ์๋: http://localhost:3000
์ฒซ ๋ถํ ์ ๋ฐ๋ชจ ์์ฐ 3๊ฐ(๋ ํฌ / ์ปจํ ์ด๋ ์ด๋ฏธ์ง / URL)์ ์ ์ฑ 3๊ฐ๊ฐ ์๋ ์๋๋ฉ๋๋ค.
์ฒซ ADMIN ๋ก๊ทธ์ธ โ ๋งํ ๋ฐฉ์ง ๊ฐ์ด๋
/login ํ๋ฉด์ ์ด๋ฉ์ผ์ ์
๋ ฅํด ์ฒซ ๋ก๊ทธ์ธํ๋ ์ฌ์ฉ์๊ฐ ์๋์ผ๋ก ADMIN์ผ๋ก ๊ฐ์
๋ฉ๋๋ค.
ADMIN์ ๊ธฐ๋ณธ MFA_REQUIRED_ROLES=admin,reviewer ์ ์ฑ
์ ๋ฐ๋ผ ์ฆ์ /mfa๋ก ์ด๋ํ๋ฉฐ,
ํจ์คํค ๋๋ TOTP ์ค ํ๋๋ฅผ ์ธ๋ผ์ธ์ผ๋ก ๋ฑ๋กํด์ผ ํฉ๋๋ค.
| ํ๊ฒฝ | ๋ฑ๋ก ๊ฐ๋ฅ ์๋จ |
|---|---|
http://localhost:3000 |
ํจ์คํค(๋ธ๋ผ์ฐ์ ์์ฒด์ธ์ฆ) + TOTP ๋ชจ๋ ๊ฐ๋ฅ |
์ฌ๋ด IP / HTTP ๋๋ฉ์ธ (์: http://192.168.1.10:3000) |
ํจ์คํค๋ ๋ธ๋ผ์ฐ์ ์ ์ฑ ์ ์ฐจ๋จ โ TOTP๋ฅผ ์ฌ์ฉํ์ธ์ (Google Authenticator ยท 1Password ยท Authy) |
| HTTPS ์ด์ ๋๋ฉ์ธ | ๋ ๋ค ์ ์ |
๋ง์ฝ ์ ๊ฒผ๋ค๋ฉด โ ์ด์์ ๋ณต๊ตฌ CLI
๋น๋ฐ๋ฒํธ ๋งค๋์ ๋ถ์ค ๋ฑ์ผ๋ก ๋ชจ๋ MFA factor์ ์ ๊ทผํ ์ ์๊ฒ ๋์ ๋:
docker compose exec backend python -m scripts.admin_unlock [email protected]
# ๋๋ ํ์ธ ํ๋กฌํํธ ์์ด:
docker compose exec backend python -m scripts.admin_unlock [email protected] --yes
ํด๋น ์ฌ์ฉ์์ ๋ชจ๋ MFA factor (ํจ์คํคยทTOTPยท๋ฐฑ์ ์ฝ๋)๊ฐ ์ญ์ ๋๊ณ , ๋ค์ ํ๋ฉด์์ ์ฒซ ๋ฑ๋ก ํ๋ฉด์ด ๋ค์ ๋ณด์ ๋๋ค. ์ฌ์ฉ์ ๋ฐ์ดํฐยท์์ฐยท์ ์ฑ ์ ๊ทธ๋๋ก ์ ์ง๋ฉ๋๋ค.
MFA ๊ฐ์ ์ํ (๊ฐ๋ฐ/๋ฐ๋ชจ ํ๊ฒฝ)
๋ฐ๋ชจ ํ๊ฒฝ์์ MFA ๊ฐ์ ๋ฅผ ๋๊ณ ์ถ๋ค๋ฉด .env์:
# ์๋ฌด๋ ๊ฐ์ ์ ํจ (์ต์
์ผ๋ก๋ง)
MFA_REQUIRED_ROLES=
# ๋๋ ADMIN๋ง ๋นผ๊ธฐ
MFA_REQUIRED_ROLES=reviewer
์ด์์์๋ ๋ฐ๋์ admin,reviewer ์ด์ ์ ์ง๋ฅผ ๊ถ์ฅํฉ๋๋ค.
๋ก์ปฌ ๊ฐ๋ฐ (๋์ปค ์์ด)
# ๋ฐฑ์๋
cd backend
python -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
DATABASE_URL=postgresql+asyncpg://mond:mond@localhost:5432/mond \
uvicorn main:app --reload
# ํ๋ก ํธ์๋
cd frontend
npm install
npm run dev
์ด์ ๋ฐฐํฌ โ Kubernetes (Helm)
ํ๊ทธ๊ฐ ํธ์๋๋ฉด ghcr.io์ mond-backend/mond-frontend ์ด๋ฏธ์ง์ OCI Helm ์ฐจํธ๊ฐ ์๋ ๋ฐฐํฌ๋ฉ๋๋ค.
# 1) ์ํฌ๋ฆฟ ๋ฏธ๋ฆฌ ์์ฑ (External-Secrets/Sealed-Secrets๋ก ๋์ฒด ๊ฐ๋ฅ)
kubectl create ns mond
kubectl -n mond create secret generic mond-secrets \
--from-literal=SECRET_KEY="$(python -c 'import secrets;print(secrets.token_urlsafe(48))')" \
--from-literal=ANTHROPIC_API_KEY="sk-ant-..." \
--from-literal=SSO_PROVIDERS="keycloak" \
--from-literal=SSO_KEYCLOAK_ISSUER="https://keycloak.your-corp.com/realms/mond" \
--from-literal=SSO_KEYCLOAK_CLIENT_ID="mond" \
--from-literal=SSO_KEYCLOAK_CLIENT_SECRET="..." \
--from-literal=DATABASE_URL="postgresql+asyncpg://user:pwd@rds.../mond" \
--from-literal=REDIS_URL="redis://elasticache.../0"
# 2) Helm ์ค์น (OCI ๋ ์ง์คํธ๋ฆฌ)
helm install mond oci://ghcr.io/jland-93/charts/mond \
--version 0.3.1 \
-n mond \
-f charts/mond/values-prod.yaml \
--set ingress.hosts[0].host=mond.your-corp.com
์์ธํ ์ต์
: charts/mond/values.yaml ยท charts/mond/values-prod.yaml
EKS ๊ฐ์ด๋
| ํญ๋ชฉ | ๊ถ์ฅ |
|---|---|
| ์ด๋ฏธ์ง | ghcr.io/jland-93/mond-backend:<ver> ยท โฆ-frontend:<ver> (multi-arch amd64/arm64) |
| DB / ์บ์ | RDS Postgres 16 + ElastiCache Redis (subchart postgresql.enabled=false) |
| Ingress | AWS Load Balancer Controller (ingressClassName: alb + ACM) |
| ์ํฌ๋ฆฟ | External-Secrets Operator โ AWS Secrets Manager / Parameter Store |
| ์ปดํจํธ | IRSA๋ก serviceAccount.annotations์ IAM Role ARN ๋ถ์ฌ |
| ๊ด์ธก | Prometheus ์คํฌ๋ ์ดํ โ backend ์ปจํ ์ด๋ 8000/metrics |
์ด์ ํ๊ฒฝ(ENVIRONMENT=production)์์๋ ์ฝํ SECRET_KEY/DEBUG=true/AUTH_MODE=dev/SESSION_SECURE=false ์กฐํฉ์ ๋ถํ
๋จ๊ณ์์ ๊ฑฐ๋ถํฉ๋๋ค (backend/app/core/config.py).
๐ค AI ๋์ ๋ฐฉ์
์๊ธฐ ํ๊ฒฝ์ AI API๋ฅผ ์ง์ ๋์ด๋ค ์๋๋ค. ๋ชจ๋ provider๊ฐ ๊ฐ์ ์ถ์ํ layer๋ฅผ ํตํด ํธ์ถ๋๋ฉฐ, .env์์ ํ ์ค๋ก ์ ํ๋ฉ๋๋ค.
| Provider | ENV | ๋ชจ๋ธ ์์ | ํ๊ตญ์์ ์๋ฏธ |
|---|---|---|---|
| Anthropic (์ง์ ) | AI_PROVIDER=anthropic + ANTHROPIC_API_KEY |
claude-haiku-4-5-20251001 |
๊ธฐ๋ณธ๊ฐ |
| OpenAI / Azure OpenAI | AI_PROVIDER=openai + OPENAI_API_KEY (+ OPENAI_BASE_URL for Azure) |
gpt-4o-mini / gpt-4o |
GPT ๋ผ์ด์ ์ค๊ฐ ์๋ ์กฐ์ง |
| AWS Bedrock | AI_PROVIDER=bedrock + IAM ์๊ฒฉ |
anthropic.claude-3-5-sonnet-20241022-v2:0 |
AWS ๋น์ฉยท์ ์ฑ ํตํฉ |
| Ollama / vLLM (๋ก์ปฌ) | AI_PROVIDER=ollama + OLLAMA_BASE_URL |
llama3.1:8b / llama3.1:70b |
ํ์๋งยท๊ธ์ตยท๊ณต๊ณตยท๋ณ์ โ ๋ฐ์ดํฐ ์ธ๋ถ ์ ์ถ ๊ธ์ง ์กฐ์ง |
ํค๋ฅผ ์ค์ ํ์ง ์์ผ๋ฉด ๊ธฐ๋ณธ ๊ท์น fallback์ผ๋ก ๋ชจ๋ UI๊ฐ ์๋ํฉ๋๋ค. ์๋ต์๋ ํญ์ {provider}:{model} ๋ผ๋ฒจ์ด ํจ๊ป ๊ธฐ๋ก๋์ด ์ถ์ฒ ์ถ์ ์ด ๊ฐ๋ฅํฉ๋๋ค.
# ์) GPT๋ฅผ ์ฐ๋ ์กฐ์ง
AI_PROVIDER=openai
OPENAI_API_KEY=sk-proj-...
OPENAI_MODEL_DEFAULT=gpt-4o-mini
# ์) ์ฌ๋ด ํ์๋ง์์ Ollama๋ก
AI_PROVIDER=ollama
OLLAMA_BASE_URL=http://ollama.internal:11434
OLLAMA_MODEL_DEFAULT=llama3.1:8b
๐งฉ ์ค์บ๋ ์ด๋ํฐ
backend/app/scanners/์์ ์ ์ด๋ํฐ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.
class MyAdapter(ScannerAdapter):
name = "my-tool"
supported_asset_types = (AssetType.REPOSITORY.value,)
async def scan(self, asset: Asset) -> ScanResult:
...
return ScanResult(findings=[...], raw_output={...})
registry.py์ ํ ์ค ๋ฑ๋กํ๋ฉด UI ๋ฉ๋ด(Integrations) + ์ค์บ ํธ๋ฆฌ๊ฑฐ(Scans)์ ์ฆ์ ๋
ธ์ถ๋ฉ๋๋ค. ๋ฐ์ด๋๋ฆฌ๊ฐ ์์ ๋๋ stub ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋๋ก ๊ตฌํํด ์ฌ์ฉ์๊ฐ ๋น ํ๋ฉด์ ๋ณด์ง ์๋๋ก ํ๋ ๊ฒ์ ๊ถ์ฅํฉ๋๋ค.
๊ธฐ๋ณธ ๋๋ด ์ด๋ํฐ:
- Trivy โ ์ปจํ ์ด๋ ์ด๋ฏธ์ง / IaC / SBOM
- Semgrep โ ์ ์ ์ฝ๋ ๋ถ์ (SAST)
- Nuclei โ ํ ํ๋ฆฟ ๊ธฐ๋ฐ ๋์ ์ค์บ (DAST)
๐บ๏ธ ๋ก๋๋งต
- 5๋๋ฉ์ธ + AI ํธ๋ฆฌ์์ง MVP
- Trivy / Semgrep / Nuclei stub ์ด๋ํฐ
- ํ๊ตญ์ด/์์ด i18n (ko ๊ธฐ๋ณธ ยท en ๋ณด์กฐ)
- Regulations Guide (K-PIPA ยท ISMS-P ยท K-EFSA ยท CSAP ยท GDPR ยท HIPAA ยท PCI-DSS ยท SOC2 ยท ISO-27001 ยท COPPA ยท EU AI Act)
- Policy Simulation (PR diff ๋ฏธ๋ฆฌ๋ณด๊ธฐ)
- SBOM / Compliance ๋ฆฌํฌํธ (JSON ยท Markdown)
- GitHub Webhook ์๋ ์ค์บ
- Slack / Discord / MS Teams / Generic Webhook ์๋ฆผ (์ฑ๋๋ณ ํฌ๋งท ๋ณํ)
- MCP ์๋ฒ (stdio + HTTP/SSE)
- ๋ฉํฐ์ ์ + RBAC + OIDC SSO (Keycloak ยท Okta ยท Google)
- MFA โ ํจ์คํค(WebAuthn/FIDO2) + TOTP + ๋ฐฑ์ ์ฝ๋
- IAM ์ ํ์๋น์ค โ AWS ยท Kubernetes ยท LDAP/AD ยท GCP ยท Azure (5์ข ์ด๋ํฐ)
- Helm ์ฐจํธ (charts/mond) + ์ด์์ฉ ๋ฉํฐ์คํ ์ด์ง Docker ์ด๋ฏธ์ง
- AI provider ์ถ์ํ โ Anthropic ยท OpenAI ยท AWS Bedrock ยท Ollama(๋ก์ปฌ)
v0.2 ๋ก๋๋งต โ ์๋ฃ (v0.2.0 ๋ฆด๋ฆฌ์ค)
ํต์ฌ ๊ธฐ๋ฅ:
- SBOM ์ค ์์กด์ฑ ์ถ์ถ โ
package.jsonยทpackage-lock.jsonยทrequirements.txtยทgo.modยทDockerfile5์ข ํ์ + Reports UI - SBOM Diff on PR โ
pull_request์ด๋ฒคํธ์ ์ ๊ท/์ ๊ฑฐ/๋ฒ์ ๋ณ๊ฒฝ ์ถ์ถ + PR comment + Slack - AI Insights RAG โ Asset ยท Finding ยท Policy ยท Knowledge 4 ์์ค ๊ฒ์ +
[N]์ธ์ฉ - ๋น๋๊ธฐ ์ค์บ ํ (Celery) โ
SCAN_QUEUE_ENABLED=true๋ก enqueue, ๋ณ๋ worker - OPA Rego ์ ์ฑ
ํ๊ฐ โ backend Dockerfile์ OPA v1.x ๋ฒ๋ค +
Policy.engine="opa"๋ก Rego ํ๊ฐ - ์์ฐ ์๋ ๋๊ธฐํ โ GitHub org (Kubernetes / AWS Auto-scaling์ v0.3)
- Webhook push ์ด๋ฒคํธ โ diff ๋ถ์ ํ ์ ์ ํ ์ค์บ๋ ์ ํ (semgrep ยท trivy ยท nuclei ์๋ ๋ผ์ฐํ )
- CI ํตํฉ ํจํค์ง โ
.github/actions/mond-scancomposite action ํ ์ค ํตํฉ - Rate limiting / abuse protection โ login ยท AI ยท webhook ยท github-sync (Redis ๊ธฐ๋ฐ)
- AI ํ๋กฌํํธ PII redaction โ ์ธ๋ถ LLM ํธ์ถ ์ ์ด๋ฉ์ผ/์ ํ/RRN/AWSํค/ํ ํฐ ์๋ ๋ง์คํน
- GCP / Azure IAM ์ด๋ํฐ ๊ถํ ๋ถ์ฌ(grant) ์์ฑ๋ ๋ณด๊ฐ โ ๋ฉฑ๋ฑ์ฑ + etag ์ถฉ๋ ์ฌ์๋
UXยท๊ฐ์ํ ๋ณด๊ฐ:
- IAM Explorer ๊ฐ์ํ โ ARN/UUID/LDAP DN์ ์ฌ๋์ด ์ฝ๋ ์ด๋ฆ์ผ๋ก(
displayName/email/ARN tail/RDN/UUID ๋จ์ถ). Source segmented ํํฐ + ํตํฉ ๊ฒ์ + Permission inline๊ถํ ์์ฒญCTA - AWS IAM Identity Center ์ง์ โ
IdentityType.SSO_USER/SSO_GROUP๋ถ๋ฆฌ + ์ํ์SSOํ๊ทธ - Access Center ํผ ์นํํ โ ์ง๋ฌธํ ๋ผ๋ฒจ('์ด๋ค ๊ถํ์ด ํ์ํ๊ฐ์?'ยท'์ผ๋ง๋ ์ค๋ ์ธ ๊ฑด๊ฐ์?'ยท'์ ํ์ํ๊ฐ์?') + ์ค์ ์ธ์๋ํธ ์์ placeholder
- Access Review ์ํ๋ ์๋ โ
critical/highํ ์ข์ธก ์๋ , AI ๊ฒฐ์ (verdict + risk + reason) ์นด๋ ํ์ - MyMond ๋น ์ํ ์นด๋ ์นํํ โ ์ ๊ท ์์ง์์ด ์ฒซ ์ง์ ์ '๋ด๋น ์์ฐ์ด ์์ต๋๋ค โ ์์ฐ ๋ณด๊ธฐ', '์์ง ์์ฒญํ ๊ถํ์ด ์์ต๋๋ค โ ๊ถํ ์์ฒญ ์์' CTA
- ์ํ๋ยท์ํ ๋ผ๋ฒจ ํ๊ตญ์ด ํต์ผ โ
risk: highโ์ํ๋: ๋์,grantedโ๊ถํ ๋ถ์ฌ ์๋ฃ๋ฑ - ๋ผ์ฐํธ๋ณ ์ฝ๋ ์คํ๋ฆฟ โ ์ฒซ ๋ก๋ 1834KB โ 684KB (63% ๊ฐ์). three.js 873KB๋ Moon3D hero ํ๋ฉด์์๋ง lazy ๋ก๋
- Scans ํ์ด์ง ๊ฐ์ํ โ ์์ฐ ID โ ์ด๋ฆ, webhook smart-router ์๋ ์ ํ ๊ฒฐ๊ณผ(์ด์ ยท์นดํ ๊ณ ๋ฆฌ ์นด์ดํธ) row expand
- Findings drawer ๊ฐ์ํ โ ๋ฐ๊ฒฌ ์์ฐ ์นด๋ + AI ์ธ์ฌ์ดํธ(severity ์ฌํ๊ฐ ํ์ดํยทconfidence Progress barยทremediation references)
- Assets owner inline edit โ '๋ด ์์ฐ์ผ๋ก' 1ํด๋ฆญ + Popover ํธ์ง
- Knowledge Hub ์ถ์ฒ ๋ช
๋ฃํ โ
๐ ๊ธฐ๋ณธ ์นด๋/๐ค AI ์์ฑ/๐ ์ง์ ์์ฑ+ AI ์นด๋ ๋ณด๋ผ ํ ๋๋ฆฌ - Regulations Guide ์นด๋ ๊ทธ๋ฆฌ๋ + ์๊ฐ ์๊ณ โ ์๋๋ฆฌ์ค ์นด๋ ๊ทธ๋ฆฌ๋, ๊ท์ ์นด๋ 2์ด(๊ดํ ์ยท์์ ยท์๋ฌดยท์ฐธ๊ณ )
- Dashboard '๋ค์ ๋จ๊ณ' ๊ฐ์ด๋ ๋ฐฐ๋ โ admin 5๋จ๊ณ / employee 3๋จ๊ณ, ์๋ฃ ์ ์๋ hide
- AI Insights citation deep-link โ
?focus=N์ผ๋ก ์์ฐ/finding/์ ์ฑ ์์ ์๋ drawer/highlight - Admin Policies โ engine ์ปฌ๋ผ + ์๊ณ์น ์ dot
- Settings โ 4 KPI ์นด๋(backendยทDBยทAIยทOPA) + ์ค์บ๋ ์ด๋ํฐ + ํ๊ฒฝ
- AI Insights '์ด์ด์ ๋ฌป๊ธฐ' follow-up chip โ intent๋ณ ํ์ค ํ๋ณด + Claude
suggested_actions - PolicySimulator โ engine + OPA deny ๋ฉ์์ง expand + ์ํ๋ ์
- Admin Users โ MFA ๋ฑ๋ก ์ํ + SSO ์ถ์ฒ + ์ต๊ทผ ๋ก๊ทธ์ธ ์๋ ํ๊ธฐ
v0.3 ๋ก๋๋งต โ ์๋ฃ (v0.3.0 ๋ฆด๋ฆฌ์ค)
- ์์ฐ ์๋ ๋๊ธฐํ ํ์ฅ โ GitLab group(
include_subgroups, self-hostGITLAB_API_URL) + Bitbucket Cloud workspace ์ผ๊ด sync. Admin โ ์ฐ๋ ๊ด๋ฆฌ์ ์นด๋ 3์ข (GitHub/GitLab/Bitbucket). K8s namespaceยทAWS Auto-scaling์ ํ์ - AI ๋ฉํฐ ํ๋ก๋ฐ์ด๋ ๋ผ์ฐํ
โ ์๋(
intent)๋ณ model ์๋ ๋ผ์ฐํ (remediation/explain/deep_analysis๋model_deep, ๊ทธ ์ธmodel_default) - SBOM CycloneDX ์ ์ ์ถ๋ ฅ โ CycloneDX 1.5 ํ์ค (
bomFormat: "CycloneDX",serialNumber: urn:uuid:โฆ,metadata.tools, REPOSITORY ์์ฐ์ default branch์์components[]์๋ ์ถ์ถ, findings โ ํ์คvulnerabilities[]) - MCP HTTP ๋ง์ดํธ ์์ ํ โ Bearer ํ ํฐ ๋ฏธ๋ค์จ์ด(
MCP_HTTP_AUTH_TOKEN),GET /integrations/mcp/health(enabled/mounted/transport/auth_required/reason/url), ๋ง์ดํธ path๋ฅผ/mcp/mcpโ/mcp/๋ก ๋จ์ํ, Claude Desktop/Code config ์์ + 7๊ฐ tools ํ (SETUP.md) - ๋ค์ค ์ํฌ์คํ์ด์ค/์กฐ์ง ๋ถ๋ฆฌ (Phase 1 โ Asset) โ
Workspace๋ชจ๋ธ(slug/name/default) + Admin CRUD + Asset์workspace_id(NULL ํ์ฉ โ ๊ธฐ์กด ๋จ์ผ ์กฐ์ง ์ด์ ํธํ). Assets ํ์ด์ง์ workspace selector(ADMIN). Policy/Finding/IAM ๋ฑ ๋๋จธ์ง ์์ ๋ถ๋ฆฌ๋ v0.4 Phase 2 - ๊ฐ์ฌ ๋ก๊ทธ ๊ฒ์ UI โ
Admin โ ๊ฐ์ฌ ๋ก๊ทธ์์ ๊ธฐ๊ฐ/actor/event/request_id ํํฐ + ์๊ณ์ด timeline - ํ๊ตญ ๊ท์ ์ธ์ฆ ์ฌ์ฌ ํจํค์ง โ
GET /admin/audit-package/isms-p?format=markdownISMS-P ํต์ฌ ํต์ 10๊ฐ(์ ์ฑ ยท์์ฐยท์ํยท์ ๊ทผยทํน์๊ณ์ ยท์ ๊ทผํต์ ยท๊ฐ์ฌ๋ก๊ทธยท์ทจ์ฝ์ ยท์ฌ๊ณ ๋์ยทprod ์์ฐ)์ Mond ์ค ๋ฐ์ดํฐ๋ฅผ ์๋ ๋งคํ. Reports ํ์ด์ง์ ADMIN ์ ์ฉ ์นด๋. ์ ์ฒด 80๊ฐ ํต์ ๋ v0.4 - ์๋ฆผ ๋ผ์ฐํ ๋ค์ฑ๋ โ Slack ์ธ Discord + MS Teams webhook ์ถ๊ฐ (severity ์์ ์ฑ๋๋ณ ๋ณํ)
- ์จํ๋ ๋ฏธ์ค LLM ๊ฒ์ดํธ์จ์ด + ํ ํฐ ์ฌ์ฉ๋ ์ถ์ โ vLLM provider (OpenAI-ํธํ base_url) +
ai_usage_logsํ ์ด๋ธ ์๋ ๊ธฐ๋ก +GET /admin/ai-providers/usage(provider/tier/intent/์ผ๋ณ ์๊ณ์ด) + Admin ์ฐ๋ ๊ด๋ฆฌ์ AI ์ฌ์ฉ๋ ์นด๋ - PR Bot โ AI ๋ถ์ PR comment โ push ์ค์บ ๊ฒฐ๊ณผ๋ฅผ PR์ ์๋ ์ฝ๋ฉํธ + AI triage 1-liner
๐งช Known Limitations
v0.1.0 ์์ ์ ํ๊ณ์ v0.2์์ ํด์๋ ํญ๋ชฉ์ ํจ๊ป ๊ธฐ๋กํฉ๋๋ค.
- SBOM โ
v0.1: CycloneDX-lite stubโ v0.2: 5์ข ecosystem ์ค ํ์ + Reports UI + PR diff โ v0.3: ํ์ค CycloneDX 1.5 (REPOSITORY ์์ฐ์ default branch์์ ์์กด์ฑ ์๋ ์ถ์ถํดcomponents[]์ฑ์, findings โ ํ์คvulnerabilities[]) - ์ค์บ๋ โ
v0.1: ๋๊ธฐ ์ธ๋ผ์ธ ์คํโ v0.2 ํด์: Celery ํ ์ต์ (SCAN_QUEUE_ENABLED) - AI Insights โ
v0.1: RAG ๋ฏธ์ ์ฉโ v0.2 ํด์: 4 ์์ค RAG + inline citation. hallucination ์ํ ์ธ์งยท์ธ๊ฐ ๊ฒํ ๊ถ์ฅ์ ์ ์ง. AI ์์ฑ ์นด๋๋ ADMIN ์ ์ฉ - IAM ์ด๋ํฐ โ
v0.1: GCP/Azure ๋ณด๊ฐ ์คโ v0.2 ํด์: 5์ข ๋ชจ๋ ๋ฉฑ๋ฑ์ฑ + etag ์ฌ์๋. capability API๋ready/coming_soon/demo๋ฅผ ๊ทธ๋๋ก ๋ ธ์ถ - ํ ์คํธ ์ปค๋ฒ๋ฆฌ์ง โ ์๋์ ์ผ๋ก ๋ฎ์ (MVP). ๊ธฐ์ฌ ํ์
- ์ ์ฑ ํ ํ๋ฆฟ์ ๊ท์ ๋งคํ โ ์ฐธ๊ณ ์ฉ ์ถ๋ฐ์ ์ด๋ฉฐ ๋ฒ์ ์๋ฌธ์ด ์๋๋๋ค
๐ค Contributing
CONTRIBUTING.md๋ฅผ ์ฐธ๊ณ ํ์ธ์. ์ ์ค์บ๋ ์ด๋ํฐ, AI ํ๋กฌํํธ ๊ฐ์ , ์ ์ฑ ์ ์ถ๊ฐ PR์ ํ์ํฉ๋๋ค.
๐ License
MIT โ LICENSE
๐งญ ๋ฌธ์ ํ๋์ ยท Doc Map
๋ฌธ์ ์ด๋์๋ ๋ค๋ฅธ ๊ณณ์ผ๋ก ํ ๋ฒ์ โ ์ฒ์์ด๋ผ๋ฉด Setup โ Part 0 ๋ถํฐ.
| ๋ฌธ์ | ์์น | ๋ฌด์ |
|---|---|---|
| ๐ ๋ฉ์ธ README (์ด ๋ฌธ์) | /README.md |
ํ๋ก์ ํธ ์๊ฐ ยท ์คํฌ๋ฆฐ์ท ยท ๋น ๋ฅธ ์์ |
| ๐ About | docs/ABOUT.md |
์ ๋ง๋ค์๋ ยท ๋ฌด์์ ํธ๋๊ฐ ยท ๋ก๋๋งต |
| ๐ ๏ธ Setup | docs/SETUP.md |
์ค์น ยท ์ด์ ยท Part 0 โ ์๋๋ฆฌ์ค ์ ํ |
| ๐๏ธ Architecture | docs/development/architecture.md |
์์คํ ๊ตฌ์กฐ ยท ๋ชจ๋ ยท ๋ฐ์ดํฐ ํ๋ฆ |
| ๐จ Brand Guidelines | docs/assets/brand-guidelines.md |
๋ก๊ณ ยท ์ปฌ๋ฌ ยท ํ์ดํฌ |
| ๐ค Contributing | CONTRIBUTING.md |
๊ธฐ์ฌ ๊ฐ์ด๋ ยท PR ๊ท์น |
| ๐ Security Policy | SECURITY.md |
์ทจ์ฝ์ ์ ๊ณ ์ ์ฐจ |
| ๐ Code of Conduct | CODE_OF_CONDUCT.md |
์ปค๋ฎค๋ํฐ ๊ท๋ฒ |
| ๐ Changelog | CHANGELOG.md |
๋ฒ์ ๋ณ ๋ณ๊ฒฝ ๋ด์ญ |
| โ Pre-release Checklist | PRE_RELEASE_CHECKLIST.md |
๋ฆด๋ฆฌ์ฆ ์ ์ ๊ฒ ํญ๋ชฉ |
| ๐ฆ Helm Chart | charts/mond/ |
values.yaml ยท values-prod.yaml |
| ๐ณ Docker Compose | docker-compose.yml |
๋ก์ปฌ ๋ฐ๋ชจ์ฉ |
| โ๏ธ ํ๊ฒฝ ๋ณ์ ์์ | .env.example |
๋ชจ๋ ENV ํค + ์ฃผ์ |
์๋๋ฆฌ์ค๋ณ ๋น ๋ฅธ ์ง์
- ๐ณ A. ๊ฐ์ธยทํ๊ฐ โ SETUP Part 1 (Docker 30์ด)
- ๐ข B. ์ฌ๋ด ๋ฐ๋ชจ โ SETUP Part 1 + Part 4 (Dev+MFA) + Part 5
- ๐ C. ์ด์ (์คํํธ์ ) โ SETUP Part 2 (Helm) + Part 3 (Anthropic) + Part 4 (SSO+MFA) + Part 6 (์ด์)
- ๐ D. ํ์๋ง (๋๊ธฐ์ /๊ณต๊ณต/๊ธ์ต) โ Part 2-C ์ํฌ๋ฆฟ(Sealed) + Part 3 (Ollama) + Part 4 (Keycloak+MFA) + Part 6 (๋ฐฑ์ )
๐ Illuminating the path to secure DevOps
No comments yet
Be the first to share your take.