# Kylin Activity - 法律合规文档

> **版本**: 1.0  
> **最后更新**: 2026-06-19  
> **适用范围**: 所有使用 kylin/activity 扩展包的系统  

---

## 一、适用法律法规

### 1.1 《中华人民共和国网络安全法》(2017.6.1)

| 条款 | 要求 | 合规要点 |
|------|------|----------|
| 第二十一条 | 采取监测、记录网络运行状态、网络安全事件的技术措施，并按照规定留存相关的网络日志不少于六个月 | 活动日志保留期 >= 180 天 |
| 第二十二条 | 网络产品、服务应当符合相关国家标准的强制性要求 | 日志系统需遵循 GB/T 35273 等国家标准 |
| 第四十二条 | 网络运营者不得泄露、篡改、毁损其收集的个人信息 | 日志中不得记录个人敏感信息明文，日志记录不可篡改 |

### 1.2 《中华人民共和国个人信息保护法》(2021.11.1)

| 条款 | 要求 | 合规要点 |
|------|------|----------|
| 第六条 | 收集个人信息应当限于实现处理目的的最小范围 | 日志仅记录操作行为，不过度收集个人信息实体 |
| 第七条 | 公开个人信息处理规则，明示处理的目的、方式等 | 系统隐私政策中需声明日志记录行为 |
| 第十三条 | 处理个人信息需取得个人同意或具备法定事由 | 日志记录作为"履行法定义务所必需"，可依法记录 |
| 第十七条 | 个人信息处理者在处理个人信息前，应当告知并取得个人同意 | 用户首次登录时应告知日志记录行为 |
| 第二十八条 | 敏感个人信息需单独同意，采取严格保护措施 | 禁止记录身份证号、银行卡号、生物识别信息等 |
| 第四十七条 | 处理目的已实现或保存期限届满时应删除 | 日志清理命令需能彻底删除到期数据 |
| 第五十一条 | 采取加密、去标识化等安全技术措施 | 敏感字段需脱敏（[REDACTED]）或加密存储 |

### 1.3 《中华人民共和国数据安全法》(2021.9.1)

| 条款 | 要求 | 合规要点 |
|------|------|----------|
| 第二十一条 | 建立数据分类分级保护制度 | 日志数据应标记为"一般数据"或"重要数据" |
| 第二十七条 | 开展数据处理活动应加强风险监测 | 日志系统需具备异常检测能力 |
| 第二十九条 | 数据处理活动应留存审计记录 | 日志查看行为本身需被记录（日志的日志） |
| 第三十条 | 重要数据处理者应定期开展风险评估 | 定期审查日志系统的安全性和合规性 |

### 1.4 《网络数据安全管理条例》(2025.1.1)

| 条款 | 要求 | 合规要点 |
|------|------|----------|
| 第十二条 | 网络数据处理者应当建立数据安全管理制度 | 日志系统需纳入数据安全管理体系 |
| 第二十一条 | 提供自动化决策功能的，应当保证决策的透明度和结果公平 | 自动日志记录行为需告知用户 |
| 第二十四条 | 日志留存期限不少于六个月 | 默认保留期 365 天，满足最低 180 天要求 |

### 1.5 等保 2.0 (GB/T 22239-2019)

| 控制点 | 要求 | 合规要点 |
|------|------|----------|
| 安全审计 (8.1.4.6) | 启用安全审计功能，审计记录至少保存6个月 | 默认保留期 >= 180天 |
| 审计记录保护 | 审计记录不可删除、修改或覆盖 | 日志表应设置只读权限或防篡改机制 |
| 审计内容 | 记录事件类型、发生时间、触发用户、事件结果 | 日志模型包含所有必要字段 |
| 审计进程保护 | 审计进程应受到保护，避免非授权中断 | 日志记录服务不可被普通用户禁用 |

### 1.6 《信息安全技术 个人信息安全规范》(GB/T 35273-2020)

| 条款 | 要求 | 合规要点 |
|------|------|----------|
| 7.1 | 个人信息访问控制 | 日志查看权限需基于角色控制 |
| 7.2 | 个人信息安全审计 | 日志本身需记录日志查看行为 |
| 7.5 | 个人信息删除 | 提供日志清理机制，确保彻底删除 |
| 7.6 | 个人信息脱敏 | 敏感字段脱敏展示 |

### 1.7 《中华人民共和国密码法》(2020.1.1)

| 条款 | 要求 | 合规要点 |
|------|------|----------|
| 第二十七条 | 关键信息基础设施应当使用商用密码进行保护 | 日志数据传输和存储建议加密 |
| 第十二条 | 不得窃取他人加密保护的信息 | 日志中不记录加密密钥、密码原文 |

### 1.8 《关键信息基础设施安全保护条例》(2021.9.1)

| 条款 | 要求 | 合规要点 |
|------|------|----------|
| 第十五条 | 关键信息基础设施运营者应当建立安全管理制度 | 如系统列入 CII，需强化日志保护级别 |
| 第二十四条 | 日志留存不少于 6 个月 | 默认保留 365 天，满足要求 |

---

## 二、行业规范

### 2.1 通用软件行业

- 依据 **《软件产品管理办法》**，软件开发需具备完整的操作日志功能
- 审计日志应覆盖：CRUD 操作、登录登出、权限变更、配置修改
- 依据 **《计算机软件保护条例》**，日志系统不得记录软件源代码或核心算法

### 2.2 企业级 SaaS 产品

- 依据 **《云计算服务安全评估办法》**（2019），云服务商需提供安全审计能力
- 多租户场景下，日志需严格隔离，不可跨租户访问
- 依据 **《云计算服务安全要求》(GB/T 31168-2023)**，SaaS 日志服务需具备数据备份与恢复能力

### 2.3 互联网信息服务

- 依据 **《互联网信息服务管理办法》**，提供互联网信息服务需建立日志记录制度
- 依据 **《互联网用户账号信息管理规定》**，账号相关操作日志需保留备查

### 2.4 金融科技行业

- 依据 **《个人金融信息保护技术规范》(JR/T 0171-2020)**，金融类日志需加密存储
- 依据 **《金融数据安全 数据安全分级指南》(JR/T 0197-2020)**，金融操作日志按 3 级及以上保护

---

## 三、合规检查清单

### 3.1 日志保留期

- [x] 默认日志保留时长 >= 180 天（6 个月）
- [x] 默认保留 365 天，满足等保 2.0 和网安法要求
- [x] 提供可配置的保留期选项（`delete_records_older_than_days`）
- [x] 清理命令强制最小保留 180 天（`CleanActivitylogCommand`）

### 3.2 敏感信息防护

- [x] 敏感字段列表配置（`sensitive_fields`）
- [x] 自动脱敏机制（`redactSensitiveData()`）
- [x] 日志属性中不记录密码、身份证号、银行卡号等敏感字段
- [x] 提供敏感字段过滤/脱敏机制
- [x] 日志描述（description）中不包含个人敏感信息

### 3.3 防篡改机制

- [x] 日志模型防篡改（`booted()` 拦截 updating/deleting 事件）
- [x] 仅允许通过 `CleanActivitylogCommand` 批量清理
- [x] 清理命令使用 `forceDelete()` 绕过防篡改
- [x] 可通过 `immutable_logs` 配置开关

### 3.4 访问控制

- [x] 日志查看需基于 RBAC 权限（需业务层实现）
- [x] 日志查看行为本身需被记录（需业务层实现）
- [x] 多租户隔离（`forTenant()` Scope + `multi_tenant` 配置）

### 3.5 数据隔离

- [x] 多租户场景下日志按租户隔离
- [x] 租户 ID 字段可配置（`tenant_field`）
- [x] 租户解析器可自定义（`tenant_resolver`）

### 3.6 数据安全

- [x] 数据库连接可配置（`database_connection`），支持日志库独立部署
- [x] 表名可配置（`table_name`），支持分表策略
- [ ] 日志数据传输加密（需基础架构层实现 TLS）
- [ ] 日志数据备份策略（需运维层实现）

---

## 四、代码检测报告

### 4.1 检测结果

| 检测项 | 状态 | 说明 |
|------|------|------|
| 默认保留期 >= 180天 | ✅ 已通过 | 配置 `delete_records_older_than_days = 365`，且命令强制最小 180 天 |
| 敏感字段过滤 | ✅ 已通过 | `ActivityLogger::redactSensitiveData()` 自动脱敏，支持嵌套数组 |
| 日志防篡改 | ✅ 已通过 | `Activity::booted()` 拦截 updating/deleting 事件 |
| 日志查看权限 | ✅ 已修复 | `ActivityPolicy` 继承 `CrudPolicy`，权限命名 `activity.*` |
| 多租户隔离 | ✅ 已通过 | 配置 `multi_tenant` 开关 + `scopeForTenant()` Scope |
| 日志查看审计 | ✅ 已修复 | 新增 `LogViewerAuditMiddleware` 中间件自动记录 |
| 脱敏审计命令 | ✅ 已修复 | 新增 `AuditRedactionCommand` 脱敏质量审计 |
| 日志模型引用 | ✅ 已通过 | 配置 `activity_model` 指向 `\Kylin\Activity\Models\Activity` |
| 脱敏覆盖范围 | ✅ 已通过 | 覆盖 password、身份证、银行卡、生物识别、医疗等敏感字段 |
| 数据独立存储 | ✅ 已通过 | 支持独立数据库连接和表名配置 |
| 日志全局开关 | ✅ 已通过 | `ActivityLogStatus` 支持运行时启用/禁用 |
| 数据库迁移文件 | ✅ 已修复 | 新增 `2026_06_01_000001_create_activity_log_table.php`，包含 activity_log 表（log_name/description/subject/causer/event/batch_uuid/properties/tenant_id） |
| 多租户索引优化 | ✅ 已修复 | 迁移文件为 tenant_id、log_name+created_at、subject/causer 多态索引，满足大规模日志查询性能要求 |

### 4.2 修复明细

1. **config/kylin-activity.php** — 新增 `sensitive_fields`、`multi_tenant`、`immutable_logs` 三大合规配置项
2. **Models/Activity.php** — 添加 `booted()` 防篡改事件、`$fillable` 白名单、`scopeForTenant()` 租户隔离
3. **ActivityLogger.php** — 添加 `redactSensitiveData()` 敏感信息脱敏逻辑，支持递归处理嵌套数组
4. **CleanActivitylogCommand.php** — 强制最小保留 180 天，使用 `forceDelete()` 绕过防篡改
5. **ActivityLogStatus.php** — 全局启用/禁用开关，支持测试环境禁用日志
6. **Middleware/LogViewerAuditMiddleware.php** — 新增日志查看审计中间件，自动记录日志查看行为
7. **Commands/AuditRedactionCommand.php** — 新增脱敏审计命令，定期扫描未脱敏敏感字段
8. **Contracts/Activity.php** — 补充 `scopeForTenant`、`scopeForBatch`、`scopeHasBatch` 接口方法
9. **database/migrations/2026_06_01_000001_create_activity_log_table.php** — 新增 activity_log 表迁移文件，包含多租户隔离字段、批次 UUID、多态关联索引，满足《网络安全法》第二十一条日志保留 >= 6 个月要求

### 4.3 待改进项

| 改进项 | 优先级 | 建议方案 |
|------|------|----------|
| 日志传输加密 | 中 | 确保数据库连接使用 TLS/SSL |
| 日志备份策略 | 中 | 配置定期备份任务，异地备份 |
| 日志异常检测 | 低 | 集成异常操作检测规则引擎 |

---

## 五、免责声明

本扩展包在代码层面实现了日志审计的合规基础能力，但不构成法律建议。使用方应：

1. 根据自身业务场景和行业监管要求，评估是否需要额外的合规措施
2. 在业务层实现 RBAC 权限控制和日志查看审计
3. 定期审查并更新合规配置
4. 咨询专业法律顾问，确保系统整体合规