
오픈소스 Azure CSPM - 잘못된 구성과 양자-안전하지 않은 암호화를 스캔하고, 발견 사항을 CIS/NIST/ISO27001/SOC2에 매핑하며, 단일 명령으로 수정합니다.
릴리스 아티팩트에는 SHA-256 체크섬, SBOM 및 ID 바인딩 출처 증명(provenance attestation)이 포함됩니다. 릴리스 검증을 참조하세요.
Wiz, Prisma Cloud, Microsoft Defender for Cloud 같은 엔터프라이즈 클라우드 보안 도구는 연간 $50,000~$500,000의 비용이 듭니다.
스타트업, 중소기업, 대학 및 학생 팀은 Azure 보안 태세에 대한 가시성이 전혀 없는 상태로 남게 됩니다. 잘못 구성된 스토리지 blob, 과도한 권한의 서비스 주체 또는 열린 NSG 규칙이 수개월 동안 탐지되지 않은 채 방치될 수 있습니다.
OpenShield가 이를 바꿉니다.
공격자들은 오늘날 암호화된 Azure 트래픽을 수집하여 양자 컴퓨터가 실용화되었을 때 복호화하려 하고 있습니다. 이를 "지금 수확, 나중에 복호화(Harvest Now Decrypt Later)" 공격이라고 하며, 지금 바로 진행되고 있습니다.
OpenShield는 너무 늦기 전에 마이그레이션이 필요한 고전적 암호화 자산을 Azure에서 스캔합니다:
탐지 결과는 NIST FIPS 203(ML-KEM), FIPS 204(ML-DSA), FIPS 205(SLH-DSA)에 매핑되며 포스트퀀텀 마이그레이션 계획에 직접 활용됩니다.
| 기능 | 설명 |
|---|---|
| 오설정 스캐너 | 스토리지, 네트워크, ID, 데이터베이스, 컴퓨팅, Key Vault, AKS, 포스트퀀텀 암호화, 백업, 서버리스, 프라이빗 엔드포인트 및 공급망 태세 전반에 걸쳐 95개의 Azure 보안 규칙 실행 |
| 규정 준수 매퍼 | 탐지 결과를 CIS Benchmarks, NIST CSF, ISO 27001 및 SOC 2 프레임워크 JSON 파일에 매핑 |
| 스캔 기록 API | 스캔 및 탐지 결과를 PostgreSQL에 저장하고 REST를 통해 탐지 결과, 점수, 스캔 기록, 규정 준수 태세, 드리프트 및 리소스 인벤토리 노출 |
| 수정 플레이북 | 모든 규칙에 일치하는 Azure CLI 수정 스크립트 포함(95개 플레이북) |
| 보안 대시보드 | Vercel에 배포된 전체 React 대시보드 - 실시간 모니터링, 탐지 결과, 규정 준수, 드리프트, 우선순위 및 AI 계층 보기 |
| 프로젝트 웹사이트 | openshield-org.github.io/openshield의 문서 및 참조 사이트 - 블로그, 규칙 갤러리, 아키텍처, 증거 가이드, 로드맵 및 릴리스 |
| Sentinel 통합 | 탐지 결과를 정규화하고 Log Analytics 사용자 지정 테이블 및 KQL 분석 규칙을 통해 Microsoft Sentinel로 전송 |
OpenShield는 OpenSSF Best Practices Passing 배지를 획득하여 프로젝트 거버넌스, 변경 관리, 보고, 품질, 보안 및 코드 분석 전반에 걸쳐 적용 가능한 Passing 수준 기준의 100%를 충족했습니다.
OpenSSF Best Practices - Passing
프로젝트의 OpenSSF 상태는 공식 OpenSSF Best Practices 프로젝트 기록을 통해 공개적으로 검증할 수 있습니다. OpenShield는 더 높은 수준의 기준을 진행하면서 엔지니어링, 보안 보증 및 오픈소스 거버넌스 관행을 지속적으로 강화하고 있습니다.
프로젝트 정책 및 보증 증거:
flowchart TD
A["React Dashboard\nVercel · Live"]
B["Flask REST API\nJWT · CORS · Blueprints"]
C["Scanner Engine\n95 Python rules"]
D["Azure Subscription\nScanned via Azure SDK + Graph"]
E["Compliance Framework JSON\nCIS · NIST · ISO 27001 · SOC 2"]
F["PostgreSQL Database\nFindings · Scans"]
G["Azure CLI Playbooks\n95 remediation scripts"]
H["sentinel/ingest.py\nNormalise + HMAC upload"]
I["Microsoft Sentinel\nOpenShieldFindings_CL · KQL rules"]
A -->|REST calls| B
B -->|trigger scans| C
B -->|read/write| F
B -->|compliance score| E
C -->|Azure SDK + Graph| D
C -->|findings| F
C -->|scan output JSON| H
G -->|manual fixes| D
H -->|Data Collector API| I
I -->|alerts| A| 서비스 | URL |
|---|---|
| 보안 대시보드 (Vercel) | https://openshield-gules.vercel.app |
| REST API (Render) | https://openshield-api.onrender.com |
| 프로젝트 웹사이트 | https://openshield-org.github.io/openshield/ |
참고: API는 Render에서 호스팅됩니다. 대시보드는 로드 시 자동으로 연결되어 PostgreSQL 데이터베이스의 실시간 데이터를 표시합니다.
[!IMPORTANT] 보안 요구사항: 프로덕션 배포는
JWT_SECRET이 없거나, 안전하지 않은 기본값으로 설정되었거나, 32자 미만인 경우 시작 시 실패합니다. 강력한 비밀 키를 생성하려면:python -c "import secrets; print(secrets.token_urlsafe(32))"이 강제 적용을 활성화하려면
OPENSHIELD_ENV=production을 설정하세요(또는 Render의 자동RENDER=true에 의존). 이러한 신호 없이 실행되는 로컬 개발은 경고와 함께 기본값 사용이 허용됩니다.
| 계층 | 기술 | 비용 |
|---|---|---|
| 프로젝트 웹사이트 | 정적 HTML + Tailwind CDN, Vercel에 배포 | 무료 |
| 보안 대시보드 | React + Vite + Tailwind, Vercel에 배포 | 무료 |
| 백엔드 API | Python + Flask | 무료 |
| 데이터베이스 | PostgreSQL | Render 관리형 PostgreSQL |
| 클라우드 스캐너 | Python + Azure SDK | 무료 |
| 수정 | Azure CLI 플레이북 | 무료 |
| SIEM | Microsoft Sentinel | 90일 무료 체험 |
| CI/CD | GitHub Actions | 무료 |
| 저장소 | GitHub | 무료 |
openshield/
├── scanner/ # Azure 오설정 규칙 엔진
│ ├── rules/ # 개별 스캔 규칙 (여기에 기여하세요!)
│ ├── engine.py # 핵심 스캔 오케스트레이션
│ └── azure_client.py # Azure SDK 래퍼
├── compliance/ # 프레임워크 매핑 엔진
│ └── frameworks/ # CIS, NIST, ISO 27001, SOC 2 매핑
├── playbooks/ # 수정 플레이북
│ ├── arm/ # 향후 ARM 템플릿용 예약
│ ├── terraform/ # 향후 Terraform 수정용 예약
│ └── cli/ # Azure CLI 스크립트
├── api/ # Flask REST API
│ ├── routes/
│ └── models/
├── frontend/ # React 보안 대시보드 (Vercel)
├── website/ # 프로젝트 웹사이트 - 문서, 블로그, 규칙 갤러리 (Vercel)
├── sentinel/ # Sentinel 통합 및 KQL 규칙
├── .github/workflows/ # CI 검사
├── docs/ # 문서
├── CONTRIBUTING.md
└── README.md
백엔드 (Flask API + 스캐너)
# 저장소 복제
git clone https://github.com/openshield-org/openshield.git
cd openshield
# Python 종속성 설치
pip install -r requirements.txt
# Azure 자격 증명 설정
export AZURE_SUBSCRIPTION_ID=your-subscription-id
export AZURE_CLIENT_ID=your-client-id
export AZURE_CLIENT_SECRET=your-client-secret
export AZURE_TENANT_ID=your-tenant-id
export JWT_SECRET=your-strong-secret # 쓰기 엔드포인트 보호에 사용 (스캔 트리거, AI)
export DATABASE_URL=postgresql://openshield:openshield@localhost:5432/openshield
# 데이터베이스 스키마 생성 또는 업데이트
alembic upgrade head
# 스캔 실행
python -c "
from scanner.engine import ScanEngine
import json, os
result = ScanEngine(os.environ['AZURE_SUBSCRIPTION_ID']).run_scan()
print(json.dumps(result, indent=2))
"
# API 시작
FLASK_APP=api/app.py flask run
스키마 변경 및 기존 프로덕션 데이터베이스에 필요한 일회성 온보딩 단계는 데이터베이스 마이그레이션을 참조하세요.
로컬 컨테이너 (Compose)
# PostgreSQL 16 시작, 마이그레이션 적용 후 API, worker 및 대시보드 시작
docker compose --profile local up --build
# 데이터베이스 인식 API 준비 상태 확인
curl --fail http://127.0.0.1:8000/ready
프로필은 의도적으로 local로 명명되었습니다. 데이터베이스 자격 증명과 JWT 비밀 키는 개발 전용 값이며, 포트는 루프백에 바인딩되고 대시보드는 http://localhost:8000과 통신합니다. worker가 실제 스캔을 실행하려면 Compose를 시작하기 전에 셸에서 네 개의 AZURE_* 변수를 설정하세요. 스택을 중지하려면 docker compose --profile local down을 사용하고, 로컬 데이터베이스 및 프론트엔드 종속성 데이터를 의도적으로 제거하려는 경우에만 --volumes를 추가하세요.
프론트엔드 (React 대시보드)
cd frontend
npm install
# 로컬 개발 - 기본적으로 http://localhost:5000을 가리킴
npm run dev
# 라이브 Render 백엔드에 대해 개발하려면:
VITE_API_URL=https://openshield-api.onrender.com npm run dev
공개 데모 모드에서는 토큰이 필요하지 않습니다. 기본적으로 API 엔드포인트는 JWT를 요구하며, POST 엔드포인트는 항상 JWT를 요구합니다.
우리는 모든 수준의 학생과 개발자의 기여를 적극적으로 환영합니다.
기여 방법:
30분 이내에 첫 규칙을 추가하는 방법을 포함한 전체 가이드는 CONTRIBUTING.md를 참조하세요.
기여자는 아래에 명시됩니다.
MIT - 자유롭게 사용, 수정 및 배포할 수 있습니다.
클라우드 보안 도구는 모든 사람이 접근할 수 있어야 한다고 믿는 보안 엔지니어와 학생들이 만들었습니다.
OpenShield 학습(Learn OpenShield)은 다음을 다룹니다:
라이브 학습 포털: https://openshieldlearn.netlify.app/learn/ 전체 문서, 보안 규칙 갤러리, 아키텍처 가이드, 증거 가이드 및 블로그는 프로젝트 웹사이트에서 확인할 수 있습니다:
전체 API 문서는 docs/api-reference.md에서 확인할 수 있습니다.
전체 릴리스 기록은 CHANGELOG.md를 참조하세요.