---
# System prepended metadata

title: student counseling records

---

 # 學生輔導紀錄

議題：

1. [需求評估](#需求評估)
    - [身份驗證與權限控管](#身份驗證與權限控管)
    - [<font color=#FF0000>調閱檔案</font>](#調閱檔案)
    - [使用人數與角色](#使用人數與角色)
    - [配合退場資料庫](#配合退場資料庫)
    - [<font color=#FF0000>評估檔案使用空間與數量</font>](#評估檔案使用空間與數量)

2. [系統架構](#系統架構)
3. [<font color=#FF0000>雲端轉移</font>](#雲端轉移)
    - [<font color=#FF0000>資訊安全</font>](#資訊安全)
    - [<font color=#FF0000>效能與成本</font>](#效能與成本)
    - [<font color=#FF0000>不同環境下的安全性</font>](#不同環境下的安全性)
    - [<font color=#FF0000>雲端服務</font>](#雲端服務)

5. [硬體需求](#硬體需求)
    - [資科司](#資科司)
    - [<font color=#FF0000>混合環境(含雲端)</font>](#混合環境)
    - [<font color=#FF0000>雲端環境</font>](#雲端環境)
    - [<font color=#FF0000>效能與成本一覽</font>](#效能與成本一覽)

5. [功能性要求](#功能性要求)
    - [帳號驗證與權限](#帳號驗證與權限)
    - [檔案加密](#檔案加密)
    - [<font color=#FF0000>特定人員存取</font>](#特定人員存取)
    - [金鑰更新](#金鑰更新)

6. [非功能性要求](#非功能性要求)
    - [<font color=#FF0000>個資法</font>](#個資法)
    - [<font color=#FF0000>資料交付</font>](#資料交付)
    - [帳號權限控管](#帳號權限控管)
    - [<font color=#FF0000>存取檔案</font>](#存取檔案)
    - [保存與銷毀檔案](#保存與銷毀檔案)
    - [<font color=#FF0000>金鑰更換週期</font>](#金鑰更換週期)
7. [<font color=#FF0000>資料結構</font>](#資料結構)
8. [成本估算](#成本估算)
    - [<font color=#FF0000>雲端資料庫費用估算</font>](#雲端資料庫費用估算)
    - [<font color=#FF0000>雲端儲存體費用估算</font>](#雲端儲存體費用估算)
    - [<font color=#FF0000>雲端金鑰服務費用估算</font>](#雲端金鑰服務費用估算)
9. [相關連結](#相關連結)
        
        
## 需求評估

### 身份驗證與權限控管

1. 人數控管
2. 身份驗證
3. 帳號申請程序
4. 存取紀錄

### 調閱檔案

1. 提供串流加密，線上瀏覽檔案
2. 不提供下載至client
3. 僅特定人員可使用
4. 需持有實體金鑰

### 使用人數與角色

1. 人數於20人以內
2. 角色
    - 雲科大作業小組
    - 教育部承辦人
    - 特定人員
    - 學校

### 配合退場資料庫

- 需與退場資料庫比對學生資料並刪除不在收集範圍內的檔案與資料

### 評估檔案使用空間與數量
- 參數：
    - 學校數目：目前4間
    - 人數取樣： 4間學校正式學籍學生人數10年，取平均值，3000人
    - 檔案大小：20張40頁雙面全彩最高解析度600dpi，75mb
    - 檔案種類：4種，(學生心理測驗資料、學生個別諮商資料、個案管理紀錄、轉銜學生處理紀錄)
    - 期間：10年
    
**計算最大儲存需求 (不含作業系統、資料庫)約35TB** :
    $$ 4 \times 3000 \times 75 \times 4 \times 10= 36000000MB   $$ 

**計算最大檔案數量約48萬份** : $$ 4 \times 3000  \times 4 \times 10 = 480000  $$ 

:::info
退場資料庫目前情形已使用1TB，每位學生約1-3頁檔案，300kb至1M
:::

**最大存取次數** : 8次

## 系統架構

```mermaid
C4Context
    title System Context diagram for Psychological Counseling Record System
    Enterprise_Boundary(s0,"RecordBoundary0")
    {
        Person(customerA,"雲科大","作業小組")
        Person(customerB,"教育部","承辦人")
        Person(customerC,"specific user","")

    
        System(SystemA, "Internet Counseling Record System", "提供使用者上傳與瀏覽學生輔導記錄")

        Enterprise_Boundary(b1,"RecordBoundary")
        {
            SystemDb(SystemD, "Record System Database", "帳號、檔案列表")
            System_Ext(SystemC, "Storage", "File storage")
        }
        
        Enterprise_Boundary(c1,"Cloud")
        {
            System_Ext(SystemE, "Secret Manager", "金鑰管理")
        }
    }
    Rel(customerA, SystemA, "管理帳號")
    Rel(customerC, SystemA, "瀏覽學生輔導紀錄")
    Rel(customerB, SystemA, "管理帳號、瀏覽學生輔導紀錄")
    BiRel(SystemA, SystemD, "Uses")
    BiRel(SystemA, SystemC, "Access")
    BiRel(SystemA, SystemE, "Get")
    
    UpdateLayoutConfig($c4ShapeInRow="3", $c4BoundaryInRow="2")
```

:::info
較安全考量，操作權限完全分離的情況
Record.Web 提供操作
Resource.API 擁有儲存體權限
Record.API 擁有 資料庫權限
Identity.API 擁有 金鑰倉庫權限
:::

## 雲端轉移

轉移至雲端服務可以增強安全性、效能和可擴展性，同時降低整體成本。

### 資訊安全

- 內建安全性：遵循[ISO-27001](https://cloud.google.com/security/compliance/iso-27001)，確保服務遵循國際安全標準。
    
- 預設加密：預設情況下，GCP上儲存的所有資料均使用[強加密協定](https://cloud.google.com/docs/security/encryption/default-encryption)在靜態和傳輸過程中進行加密。降低資料暴露和遺失的風險，無需額外的使用者配置，從而降低配置錯誤的風險。.
    
- 身分和存取管理(IAM):GCP提供詳細的[IAM](https://cloud.google.com/iam/docs/using-iam-securely)功能，協助組織對資實施細粒度的存取控制，確保只有授權的使用者和服務才能存取特定資源。減少未經授權的資料存取和潛在的洩漏的風險，另外GCP提供詳細的最佳實踐和指引。

### 效能與成本

- 降低初始和持續成本 : 雲端減少對硬體和基礎設施的大量資本支出的需求，改為可根據組織需求進行擴展的即用即付模式。達到降低初始成本與後續硬體維護和升級相關的費用。

- 效能優化：GCP的全球基礎設施可確保資源在靠近需要的地方使用，最大限度減少延遲並提高效能。

:::warning
若使用者距離伺服器過遠，雲端可能會遇到更高的延遲
**最近GCP資料中心位置：臺灣彰濱資料中心**
:::

- 可擴展性：雲端服務提供高可擴展性，資源可以動態調整以滿足需求，不受本地基礎設施的硬體和預算限制。

### 不同環境下的安全性

- 本地：本地環境通常受到組織資本投入和更新安全措施的能力的限制。如災難復原是重大風險之一。**(需系統人員前往資科司重新部署)**

- 混合：混合模型允許敏感操作保留在本地，同時利用雲端進行可擴展儲存和安全性功能。可將本地基礎架構與雲端儲存和金鑰管理結合提高安全性。

- 雲端：雲端環境可最大限度地提高安全性，因為基礎設施的各個方面都在嚴格的安全標準下進行管理。包括不斷更新安全協定和針對新出現威脅的措施。

### 雲端服務

- GCP Secret Manager:
提供管理、存取和儲存 API 金鑰、密碼和憑證等敏感資料。自動更換、集中管理和嚴格存取控制等功能可大幅降低與手動金鑰管理實務相關的風險。

- Google Cloud Key Management Service (KMS):
管理雲端服務的加密金鑰。可以產生、使用、更換和銷毀 AES256、RSA、ECDSA等金鑰。進階控制確保金鑰只能由授權人員訪問，並且與IAM整合提供精細的存取策略。加強資安和保護敏感資料，提供所有關鍵使用情況的詳細日誌，有助事後分析。

- GCP Cloud Storage:
提供內建冗餘和自動故障轉移，確保即使在組件發生故障時也始終可以存取資料。

- Google Kubernetes Engine (GKE):
提供部署、管理和擴展容器化應用程式。與Kubernetes整合並進行簡化，可以自動管理容器部署、擴充和操作。
    - 安全性：
        自動安全性升級：GKE自動使用最新的安全性修補程式使叢集的軟體保持最新狀態。
    - 內建網路策略：您可以定義特定規則來管理叢集內容器之間的入口和出口流量來增強安全性。
## 硬體需求

:::info
測試環境皆使用測試資料與測試檔案
:::

| 服務       | 資科司三辦| 混合| 雲端|
|-----------------|------------------------------|------------------------------------------------------|--------------------------------------------------|
| 網站 | 資科司| 資科司|  GKE|
| 資料庫| 資科司| 資科司| GCP Cloud SQL |
| 儲存體     | 資科司| GCP Cloud Storage |  GCP Cloud Storage|
| 金鑰管理  | 資科司 | Cloud Secret Manager|  Cloud Secret Manager|

### 效能與成本一覽

<font color=#FF0000>**本系統對於儲存空間可能有高需求**</font>

#### 本地部署

- **初始成本** : 對硬體、設施成本要求較高，受限資科司硬體設施.
- **持續成本** : 無法估算資科司資本投入，包括維護、電力和人員配備.
- **效能** : 視基礎設施是否健全決定，內部使用者低延遲。
- **可擴展性** : 受資科司硬體設施限制與預算投入限制。
- **安全性** : 符合ISO27001
- **災難復原、備份** : 有單點失效的風險，且需前往資科司重新部署與設定。
- **高可用性** : 依照資科司SLA。

#### 混合
- **初始成本** : 由於儲存體由雲端提供，所需的硬體限制更少.
- **持續成本** : 僅雲端儲存體費用。
- **效能** : 平衡兩者，本地關鍵應用程式低延遲、可擴展的雲端服務。
- **可擴展性** : 比完全本地部署靈活，儲存體在雲端環境中更容易擴展。
- **安全性** : 符合ISO27001，所有安全性政策皆可進行組態設定並調整。
- **災難復原、備份** : 服務仍有單點失效風險，僅儲存體可選擇單一地區或多地區(友善國家)備份，15 分鐘恢復點目標內的雙區域的兩個區域，而不考慮物件大小。
- **高可用性** : 儲存體保證99.999999999% (11個9)高可用性。

#### 雲端
- **初始成本** : 較少的硬體限制，沒有購置或租賃硬體或設施成本
- **持續成本** : 可預測;基於服務等級和使用率。
- **效能** : 取決於網路連線；如果使用者遠離雲端伺服器，則可能存在較高的延遲。
- **可擴展性** : 高，可根據需求擴大或縮小規模。
- **安全性** : 符合ISO27001，安全性政策皆可進行組態設定並調整。
- **災難復原、備份** : 可選擇單一地區或多地區(友善國家)備份，15 分鐘恢復點目標內的雙區域的兩個區域。
- **高可用性** : 99.999999999% (11個9)高可用性。

### 資科司

包含應用服務、資料庫、儲存體

- Productoin environment
    - 1. 1臺 (Application Server & Database Server)
    - 2. Windows Server 2022 Standard和以上更新版本
    - 3. IIS 10
    - 4. CPU 2.2GHZ 以上6核心、12個執行緒
    - 5. RAM 16GB
    - 6. Storage 35T以上
    - 7. SQL Server 2019
        
- Testing environment
    - 1. GKE
    - 2. Docker swarm
    - 3. SQL Server 2019

### 混合環境

資科司：應用服務、資料庫
雲端服務：儲存體、金鑰管理

- Productoin environment
    - 1. 1臺 (Application Server & Database Server)
    - 2. Windows Server 2022 Standard和以上更新版本
    - 3. IIS 10
    - 4. CPU 2.2GHZ 以上6核心、12個執行緒
    - 5. RAM 16GB
    - 6. SQL Server 2022
    - 7. GCP Cloud Storage (雲端)
    - 8. GCP Secret Manager (金鑰管理)
        
- Testing environment
    - 1. GKE
    - 2. Docker swarm
    - 3. SQL Server 2022
        
### 雲端環境

- Productoin environment 
    - 1. GKE (應用服務叢集)
    - 2. GCP Secret Manager (金鑰管理)
    - 3. GCP Cloud SQL (資料庫)
    - 4. GCP Cloud Storage (儲存體)
        
- Testing environment
    - 1. GKE
    - 2. Docker swarm
    - 3. SQL Server 2022


## 功能性要求

### 帳號驗證與權限

1. 帳號建立與授權需教育部承辦人
2. 不刪除任何帳號，保留所有帳號資料
    
### 檔案加密

1. 透過GCP Secret Manager，產生當期使用的非對稱金鑰(一週期一組)。
2. 每一個檔案都產生一組隨機對稱金鑰進行加密(不同檔案不同金鑰)。
3. 建立儲存體檔案資料夾並設定非對稱金鑰驗證。
4. 每個檔案使用guid做為檔名，,並將解密用的對稱金鑰使用非對稱金鑰進行混淆後，將已混淆金鑰與檔案資訊存入資料庫。
5. 已加密已改名的檔案上傳至檔案伺服器。
6. 非對稱金鑰的公鑰，僅系統人員可以存取 (specific iam service account or specific ip)。
7. 非對稱金鑰的私鑰，僅擁有實體金鑰的特定人員可以存取。
8. 金鑰儲存在GCP Secret Manager，加密後的檔案在GCP Storage。

### 特定人員存取

1. 使用帳號密碼登入，雙因子驗證。
2. 特定人員有使用此功能權限並擁有實體金鑰。
3. 實體金鑰驗證通過後，取得非對稱金鑰私鑰。
4. 從雲端儲存區取回已加密的檔案 (bucket iam service account )。
5. 進行解密提供瀏覽(應可不下載檔案，類似ascx, server side即時轉譯)，涉及串流加密，需要javascript package支援(開源無後門)或商業軟體。
6. 僅提供線上瀏覽，無法下載。
7. 以上動作皆記錄過程。

### 金鑰更新

1. 重新產生非對稱金鑰
2. 更換雲端儲存區金鑰驗證
3. 更換雲端金鑰存區金鑰驗證

## 非功能性要求

### 個資法

依個資法最小化搜集原則，本系統儲存以下欄位

- 學號
- 學年
- 學期
- 學生輔導紀錄種類
- 輔導紀錄檔名(加密後，使用GUID取代原檔名)

:::info
退場資料庫已儲存詳細學生資料，本系統僅記錄學號與檔案間的關聯
:::

### 資料交付

- 系統未完成上傳功能
    1. 購置加密硬碟給學校，學校作業完成後，由雲科大作業團隊前往親自點交並簽收
    2. 檔案加密處理
        - 每個檔案均使用獨立隨機對稱金鑰進行加密
        - (雲端儲存體)，上傳加密檔案至雲端
        - (資料司)，親自攜帶加密硬碟前往資科司上傳
    3. 檔案完成上傳後，發文至教育部，並前往教育部與負責人點交原件加密硬碟 

- 系統完成上傳功能
    1. 學校使用系統上傳檔案至系統
    2. 檔案完成上傳後，發文至教育部，並前往教育部與負責人點交原件加密硬碟

:::warning
使用網站服務上傳檔案，會產生以下議題
1. 檔案可能過大，單檔上傳時間可能很長
2. 透過網際網路上傳，有洩露風險，學校作業需制定作業流程
:::

### 帳號權限控管

- 帳號密碼原則
    - 字長元度限制
    - 定期更換
- 雙因子驗證
- 使用者帳號不刪除，並保留系統操作存取紀錄

```mermaid
flowchart  TB
    學生輔導紀錄 --> 雲科大作業團隊
    學生輔導紀錄 --> 特殊使用者
    學生輔導紀錄 --> 教育部承辦人
    雲科大作業團隊 --> 帳號權限管理
    雲科大作業團隊 --> 上傳加密後檔案
    特殊使用者 --> 存取加密檔案
    教育部承辦人 --> 存取加密檔案

```

### 存取檔案

- 僅特殊權限可使用，並且需搭配實體金鑰驗證
- 使用實體金鑰驗證後，才可取得非對稱金鑰針對檔案解密
- 串流加密，無法下載檔案至Client

![圖片](https://hackmd.io/_uploads/SyKAdIAgC.png)

### 保存與銷毀檔案

- 學生畢業後或離校後保存10年，每年銷毀超過年限10年的檔案
- 加密後的學生輔導紀錄檔案
- 資料庫中的學生資料

<!-- data retention and deletion 資料保存與刪除 -->
### 金鑰更換週期

- 每三個月更換一次非對稱金鑰
- 需透過非對稱金鑰驗證才能取得加密檔案

### ISO27001

- 帳號申請程序
- 檔案加密程序
- 金鑰重新更換程序
- 存取檔案程序
- 銷毀檔案程序
- 雲端使用政策(假設採用雲端)

<!-- 系統人員擁有 GCP Secret manager iam 帳號密碼
Web application 擁有 GCP bucket iam 權限，資料庫權限
特定人員擁有 Application server中的private key存取權限 -->

<!--     3.1. authentication and authorization

    3.2. number or users , volume of data and file

    3.3. minimize personality information ( required columns )

    3.4. data encryption and security ( SSL/TLS , authentication and 
    authorization mechanisms , encrypt and decrypt , destruction of records after the defined period)

    3.5. access control and  file management 

    3.6. infrastructure capacity
        5. 使用雲端服務的話，Amazon的是object storage，要確認一下GCP 除了bucket server還有沒有其他的物件儲存體以及安全性相關的設定
    
    3.7. integration with external system (退場) -->

## 資料結構

```mermaid
erDiagram
    
    Students || --o{ CounselingRecords: have
    
    Students {
        byte Key PK "UUID"
        string StatId "統計處學校代號 varchar(4)"
        string Id "學號 varchar(25)"
    }
    
    CounselingRecords{
        byte FileId PK "UUID"
        int version "版本"
        int AcademicYear "學年度"
        int Semester "學期"
        string StudentId FK "學號 varchar(25)"
        int RecordType "輔導記錄類型"
        string Name "檔名 varchar(36)"
        string EncryptedKey "已混淆金鑰 varchar(1024)"
    }
```

## 成本估算

### 雲端資料庫費用估算

學生資料表: 約 0.52 MB
輔導紀錄資料表: 約 1022.84 MB

<font color=#FF0000>**預估資料庫佔用空間 約 1023.36 MB (約1 GB)**</font>

:::warning
以下計算以假設參數計算全部數據。實際空間與費用會根據實際使用情況而變化。
:::

- 參數
    - 全部學生數:
    - 學校數: 4間
    - 每校平均學生: 3000個
    - 總學生數 :12,000個 $$4 \times 3000 = 12,000 $$
    - 輔導紀錄種類 : 4種
    - 學期數: 2 (上下學期)
    - 期間 : 10 年
    - 學生最大輔導紀錄檔案數量 : $$ 4  \times 2 \times 10 = 80 $$
    - 總輔導紀錄數量:960,000份 $$ 12,000 \times 80 = 960,000 $$

- 學生資料表總佔用空間 $$ 12,000 \times 45 = 540,000 (約 0.52 MB) $$

- 輔導紀錄資料表總佔用空間 $$ 960,000 \times 1117 = 1,072,320,000 (約 1022.84 MB 或 1 GB) $$


### 雲端儲存體費用估算

假設金鑰週期為3個月進行更換，一年全部存取4次

初期採用Standard等級: $$ 283853 + 4 \times (158.4+6.3) = 284510.2 $$

<font color=#FF0000>初期採用Nearline等級</font> : $$ 141927 + 4 \times (317+16) = 143259 $$

<font color=#FF0000>初期採用Coldline等級</font> : $$ 70963 + 4 \times (633+158) = 74127 $$

初期採用Archive等級: $$ 21289 + 4 \times (1584+792) = 222393 $$

#### 雲端各級費用估算

**儲存費用(單位:台幣)**

- Standard Cloud Storage
    $$ 0.020 \times 1024 \times 35 \times 12 \times 33 = 283852.8 $$

- Nearline Cloud Storage
    $$ 0.010  \times 1024 \times 35 \times 12 \times 33 = 141926.4 $$

- Coldline Cloud Storage
    $$ 0.005 \times 1024 \times 35 \times 12 \times 33 = 70963.2 $$

- Archive Cloud Storage

    $$ 0.0015 \times 1024 \times 35 \times 12 \times 33 = 21288.96 $$

**存取費用(單位:台幣)**

- 參數：
    - 學校數目：目前4間
    - 人數取樣： 4間學校正式學籍學生人數10年，取平均值，3000人
    - 檔案種類：4種，(學生心理測驗資料、學生個別諮商資料、個案管理紀錄、轉銜學生處理紀錄)
    - 期間：10年

檔案數量約48萬份 : $$ 4 \times 3000  \times 4 \times 10 = 480000  $$ 

:::warning
以下計算假設整年存儲和一次性檢索全部數據。實際費用會根據實際使用情況（如存儲時間和檢索頻率）而變化。
:::

![圖片](https://hackmd.io/_uploads/S1W3qI0g0.png)

![圖片](https://hackmd.io/_uploads/ryI39UAgR.png)

A級作業(新增，更新)

Standard Storage ：$$　480000 \div 1000 \times 0.01 \times 33= 158.4 $$

Nearline Storage ：$$ 480000 \div 1000 \times 0.02  \times 33 = 316.8 $$ 

Coldline Storage ：$$ 480000 \div 1000 \times 0.04 \times 33 = 633.6 $$ 

Archive Storage ：$$ 480000 \div 1000 \times 0.1 \times 33 = 1584 $$ 

B級作業(讀取)

Standard Storage ：$$　480000 \div 1000 \times 0.0004 \times 33= 6.336 $$

Nearline Storage ：$$ 480000 \div 1000 \times 0.001 \times 33 = 15.84 $$ 

Coldline Storage ：$$ 480000 \div 1000 \times 0.01 \times 33 = 158.4 $$ 

Archive Storage ：$$ 480000 \div 1000 \times 0.05 \times 33 = 792 $$ 

:::info
每月免費用量限制，超過即按照收費標準進行收費
Standard Storage	每月 5 GB
A 級作業	5,000 次
B 級作業	50,000 次
:::

### 雲端金鑰服務費用估算

#### Key Management Service
啟用管理版本與自動更換金鑰版本
金鑰成本 (ex: RSA 4096):
每個月一個已啟用RSA 4096金鑰版本:$1.00
金鑰週期為3個月，一年更換4次，每年費用: 132元 $$　4 \times $1.00 \times 33 = 132　$$

假設所有檔案皆更換加密對稱金鑰並自動更換
~~每年成本，48000個檔案，每年更換4次：約633萬元 $$ $4 \times 48,000 \times 33  = 6336000  $$~~

:::warning
需查看價目表與收費標準，確認KMS的金鑰更換作業是否涉汲Storage的存取作業相關或另外收費。
:::

#### Secret Manager

每個啟用的金鑰版本每個月 : 2元 $$ 0.06 \times 33 = 1.98 $$
金鑰週期為3個月，一年更換4次，每年費用: 65元 $$　4 \times $0.06 \times 33 = 64.35　$$

## 相關連結

[fido2金錀](https://www.twca.com.tw/product/c0281542-f034-4ba9-8164-c517ebc5e0c0)
[Passwordless - FIDO2 for .NET ](https://fido2-net-lib.passwordless.dev/passwordless#heroFoot)
[GCP ISO/IEC 27001](https://cloud.google.com/security/compliance/iso-27001?hl=zh-tw)
[GCP Cloud Setup Checklist](https://cloud.google.com/docs/enterprise/setup-checklist)
[GCP IAM](https://cloud.google.com/iam/docs/using-iam-securely)
[GCP encryption](https://cloud.google.com/docs/security/encryption/default-encryption?hl=en)
[GCP firewall policies](https://cloud.google.com/firewall/docs/configure-global-fw-policies)
[GCP Storage availability and durability](https://cloud.google.com/storage/docs/availability-durability)
[GCP Secret Manager](https://cloud.google.com/security/products/secret-manager?hl=zh-tw)
[Cloud Storage 定價](https://cloud.google.com/storage/pricing?hl=zh-tw)
