# ISO 27001 資產盤點系統

基於 ISO 27001:2022 標準的資訊安全管理系統 (ISMS)，專注於資產清單管理功能。

## 🎯 專案簡介

這是一個為中小企業設計的 ISO 27001 合規管理系統，採用 Django + PostgreSQL + React 技術棧，提供完整的資產管理功能，並能擴展支援文件管理、控制措施、風險評估、稽核管理等模組。

### 目前實作進度

✅ **Phase 1 - 資產清單管理 (已完成)**
- 資產 CRUD 操作
- 資產分類管理 (硬體/軟體/資料/人員/設施)
- CIA 等級評估 (機密性/完整性/可用性)
- 資產關係與依賴管理
- 資產依賴關係圖視覺化
- 資產影響分析
- 關鍵資產識別
- 統計儀表板 API
- 批次匯入/匯出功能 (CSV)
- 搜尋與篩選

✅ **Phase 2 - 前端應用 (已完成)**
- React + TypeScript 架構
- Ant Design UI 元件庫
- 資產列表頁面 (表格、分頁、排序)
- 資產詳情與編輯頁面
- 資產新增表單
- 資產依賴關係圖 (React Flow)
- 資產影響分析頁面
- 資產搜尋與多條件篩選
- 統計儀表板 (卡片顯示)
- 匯出功能
- 響應式佈局設計

✅ **Phase 3 - 認證與權限 (已完成)**
- JWT Token 認證
- 使用者登入/登出
- 角色基礎權限控制 (RBAC)
- API 權限驗證
- 前端權限保護

✅ **Phase 4 - 風險管理 (已完成)**
- 風險登記表 CRUD
- 風險評估 (可能性 × 影響度)
- 風險等級自動計算
- 風險處理計畫
- 風險監控儀表板
- 風險統計與分析
- 風險報告生成
- 整體風險評估報告

🔄 **計劃中**
- 文件管理模組
- 控制措施管理 (93項 Annex A)
- 風險評估模組
- 稽核管理

## 🏗️ 技術架構

### 後端
- **Framework**: Django 4.2.7
- **API**: Django REST Framework 3.14.0
- **Database**: PostgreSQL 15
- **快取**: Redis 7
- **任務佇列**: Celery 5.3.4

### 前端
- **Framework**: React 19 + TypeScript
- **UI Library**: Ant Design 5
- **State Management**: React Hooks
- **HTTP Client**: Axios
- **Router**: React Router 6
- **Build Tool**: Create React App

### 容器化
- Docker + Docker Compose

## 📦 安裝與設定

### 1. 環境需求

- Python 3.11+
- PostgreSQL 15+
- Redis 7+
- Docker (optional)

### 2. 使用 Docker Compose (推薦)

```bash
# 啟動所有服務
docker-compose up -d

# 建立資料庫表格
docker-compose exec backend python manage.py migrate

# 建立超級使用者
docker-compose exec backend python manage.py createsuperuser

# 查看日誌
docker-compose logs -f backend
```

服務會在以下端口啟動：
- Backend API: http://localhost:8000
- Frontend: http://localhost:3000
- PostgreSQL: localhost:5432
- Redis: localhost:6379

### 3. 本地開發設定

```bash
# 安裝後端依賴
cd backend
pip install -r requirements.txt

# 設定環境變數
cp .env.example .env
# 編輯 .env 設定資料庫連線資訊

# 執行資料庫遷移
python manage.py migrate

# 建立超級使用者
python manage.py createsuperuser

# 啟動開發伺服器
python manage.py runserver
```

## 🚀 API 使用指南

### 資產管理 API

#### 取得資產清單
```http
GET /api/assets/
```

支援查詢參數：
- `asset_type`: 資產類型 (hardware, software, data, people, facility)
- `status`: 狀態 (active, inactive, maintenance, decommissioned)
- `search`: 搜尋 (資產編號、名稱、描述、位置)
- `ordering`: 排序 (asset_number, name, created_at, updated_at)

範例：
```http
GET /api/assets/?asset_type=hardware&status=active&search=server
```

#### 取得資產詳情
```http
GET /api/assets/{id}/
```

#### 建立資產
```http
POST /api/assets/
Content-Type: application/json

{
  "asset_number": "AST-001",
  "name": "Web Server 01",
  "description": "主要網站伺服器",
  "asset_type": "hardware",
  "asset_subtype": "server",
  "owner": 1,
  "location": "機房A-機櫃3",
  "confidentiality": "high",
  "integrity": "high",
  "availability": "medium",
  "status": "active",
  "technical_details": {
    "os": "Ubuntu 22.04",
    "ip": "192.168.1.10",
    "cpu": "8 cores",
    "ram": "32GB"
  }
}
```

#### 更新資產
```http
PATCH /api/assets/{id}/
Content-Type: application/json

{
  "status": "maintenance",
  "location": "機房B-機櫃5"
}
```

#### 刪除資產 (軟刪除)
```http
DELETE /api/assets/{id}/
```

#### 取得統計資訊
```http
GET /api/assets/statistics/
```

回應範例：
```json
{
  "total": 156,
  "by_type": [
    {"asset_type": "hardware", "count": 45},
    {"asset_type": "software", "count": 67},
    {"asset_type": "data", "count": 44}
  ],
  "by_status": [
    {"status": "active", "count": 140},
    {"status": "maintenance", "count": 10},
    {"status": "decommissioned", "count": 6}
  ],
  "by_risk": {
    "high": 25,
    "medium": 78,
    "low": 53
  }
}
```

#### 取得資產關係
```http
GET /api/assets/{id}/relationships/
```

#### 批次匯入資產
```http
POST /api/assets/bulk_import/
Content-Type: application/json

[
  {
    "asset_number": "AST-001",
    "name": "資產1",
    ...
  },
  {
    "asset_number": "AST-002",
    "name": "資產2",
    ...
  }
]
```

#### 匯出資產清單
```http
GET /api/assets/export/?format=csv
```

## 📊 資料模型

### Asset (資產)

| 欄位 | 類型 | 說明 |
|------|------|------|
| id | UUID | 主鍵 |
| asset_number | String | 資產編號 (唯一, 例如: AST-001) |
| name | String | 資產名稱 |
| description | Text | 描述 |
| asset_type | String | 資產類型 (hardware/software/data/people/facility) |
| asset_subtype | String | 資產子類型 |
| owner | FK(User) | 資產擁有者 |
| custodian | FK(User) | 資產管理者 |
| location | String | 所在位置 |
| network_segment | String | 網路區段 |
| confidentiality | String | 機密性等級 (low/medium/high) |
| integrity | String | 完整性等級 (low/medium/high) |
| availability | String | 可用性等級 (low/medium/high) |
| status | String | 狀態 (active/inactive/maintenance/decommissioned) |
| technical_details | JSON | 技術細節 |
| acquisition_date | Date | 取得日期 |
| risk_level | Property | 整體風險等級 (computed) |
| created_at | DateTime | 建立時間 |
| updated_at | DateTime | 更新時間 |
| deleted_at | DateTime | 刪除時間 (軟刪除) |

### AssetRelationship (資產關係)

| 欄位 | 類型 | 說明 |
|------|------|------|
| id | UUID | 主鍵 |
| from_asset | FK(Asset) | 來源資產 |
| to_asset | FK(Asset) | 目標資產 |
| relationship_type | String | 關係類型 (depends_on/connected_to/hosts/uses/backed_up_by) |
| description | Text | 描述 |
| created_at | DateTime | 建立時間 |

## 🔐 管理介面

Django Admin 管理介面：http://localhost:8000/admin/

登入後可以：
- 管理資產清單
- 查看資產關係
- 管理使用者帳號
- 匯入/匯出資料

## 📖 規格文件

專案規格文件位於 `spec/` 目錄：

- `ISO27001-MVP10規劃.md` - MVP 前 10 項優先措施規劃
- `ISO27001-MVP10-1實作.md` - 詳細實作指南
- `ISO27001資安文件管理系統詳細規劃.md` - 完整系統規劃
- `ISO27001-資料庫設計（Database Schema Design）.md` - 資料庫架構設計
- `ISO27001-合規管理系統-主頁面 UI 設計.md` - UI/UX 設計規範

## 🛣️ 開發路線圖

### Phase 1: MVP - 資產管理 (✅ 已完成)
- ✅ 資產 CRUD API
- ✅ 資產分類與狀態管理
- ✅ CIA 等級評估
- ✅ 資產關係管理
- ✅ 統計與報表 API
- ✅ 批次匯入/匯出

### Phase 2: 核心功能擴展 (✅ 基礎完成)
- ✅ 前端 React 應用
  - 資產列表與統計頁面
  - 搜尋與篩選功能
  - 響應式佈局
  - 主選單與導航
- 🔄 資產詳情與編輯 (進行中)
  - 資產詳情頁面
  - 資產編輯表單
  - 資產新增功能
  - 資產關係視覺化圖表
- ⏳ 文件管理模組
  - 政策文件範本
  - 版本控制
  - 電子簽核
- ⏳ 控制措施管理
  - ISO 27001 Annex A 93 項控制措施
  - 實作狀態追蹤
  - 適用性聲明 (SOA)

### Phase 3: 進階功能 (計劃中)
- ⏳ 風險管理模組
- ⏳ 稽核管理模組
- ⏳ 事件管理
- ⏳ 人員訓練管理
- ⏳ 報表產生器

### Phase 4: 企業版功能 (未來)
- ⏳ 多租戶支援
- ⏳ SSO 整合 (Keycloak)
- ⏳ 工作流引擎
- ⏳ 自動化工具整合 (Ansible, OpenVAS)
- ⏳ 行動應用

## 🤝 貢獻指南

歡迎提交 Issue 或 Pull Request！

### 開發流程

1. Fork 本專案
2. 建立功能分支 (`git checkout -b feature/amazing-feature`)
3. 提交變更 (`git commit -m 'Add amazing feature'`)
4. 推送到分支 (`git push origin feature/amazing-feature`)
5. 開啟 Pull Request

### 程式碼風格

- Python: PEP 8
- JavaScript: ESLint + Prettier
- Commit 訊息: Conventional Commits

## 📝 授權

本專案採用 MIT License - 詳見 [LICENSE](LICENSE) 檔案

## 📧 聯絡資訊

如有任何問題或建議，請開 Issue 或聯絡專案維護者。

## 🙏 致謝

感謝以下資源與專案：

- [ISO/IEC 27001:2022](https://www.iso.org/standard/27001) - 資訊安全管理系統標準
- [Django](https://www.djangoproject.com/) - Web framework
- [Django REST Framework](https://www.django-rest-framework.org/) - API framework
- [React](https://react.dev/) - Frontend library

---

**注意**: 本系統為教育與參考用途，實際部署前請諮詢資訊安全專家，確保符合您組織的合規要求。
