code-abyss 1.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +197 -0
- package/bin/install.js +193 -0
- package/bin/uninstall.js +42 -0
- package/config/AGENTS.md +247 -0
- package/config/CLAUDE.md +207 -0
- package/config/settings.example.json +27 -0
- package/output-styles/abyss-cultivator.md +399 -0
- package/package.json +41 -0
- package/skills/SKILL.md +115 -0
- package/skills/ai/SKILL.md +29 -0
- package/skills/ai/agent-dev.md +242 -0
- package/skills/ai/llm-security.md +288 -0
- package/skills/architecture/SKILL.md +41 -0
- package/skills/architecture/api-design.md +225 -0
- package/skills/architecture/caching.md +299 -0
- package/skills/architecture/cloud-native.md +285 -0
- package/skills/architecture/compliance.md +299 -0
- package/skills/architecture/data-security.md +184 -0
- package/skills/architecture/message-queue.md +329 -0
- package/skills/architecture/security-arch.md +210 -0
- package/skills/development/SKILL.md +43 -0
- package/skills/development/cpp.md +246 -0
- package/skills/development/go.md +323 -0
- package/skills/development/java.md +277 -0
- package/skills/development/python.md +288 -0
- package/skills/development/rust.md +313 -0
- package/skills/development/shell.md +313 -0
- package/skills/development/typescript.md +277 -0
- package/skills/devops/SKILL.md +36 -0
- package/skills/devops/cost-optimization.md +272 -0
- package/skills/devops/database.md +217 -0
- package/skills/devops/devsecops.md +198 -0
- package/skills/devops/git-workflow.md +181 -0
- package/skills/devops/observability.md +280 -0
- package/skills/devops/performance.md +273 -0
- package/skills/devops/testing.md +186 -0
- package/skills/gen-docs/SKILL.md +114 -0
- package/skills/gen-docs/scripts/doc_generator.py +491 -0
- package/skills/multi-agent/SKILL.md +268 -0
- package/skills/run_skill.py +88 -0
- package/skills/security/SKILL.md +51 -0
- package/skills/security/blue-team.md +379 -0
- package/skills/security/code-audit.md +265 -0
- package/skills/security/pentest.md +226 -0
- package/skills/security/red-team.md +321 -0
- package/skills/security/threat-intel.md +322 -0
- package/skills/security/vuln-research.md +369 -0
- package/skills/tests/README.md +225 -0
- package/skills/tests/SUMMARY.md +362 -0
- package/skills/tests/__init__.py +3 -0
- package/skills/tests/test_change_analyzer.py +558 -0
- package/skills/tests/test_doc_generator.py +538 -0
- package/skills/tests/test_module_scanner.py +376 -0
- package/skills/tests/test_quality_checker.py +516 -0
- package/skills/tests/test_security_scanner.py +426 -0
- package/skills/verify-change/SKILL.md +138 -0
- package/skills/verify-change/scripts/change_analyzer.py +529 -0
- package/skills/verify-module/SKILL.md +125 -0
- package/skills/verify-module/scripts/module_scanner.py +321 -0
- package/skills/verify-quality/SKILL.md +158 -0
- package/skills/verify-quality/scripts/quality_checker.py +481 -0
- package/skills/verify-security/SKILL.md +141 -0
- package/skills/verify-security/scripts/security_scanner.py +368 -0
|
@@ -0,0 +1,285 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: cloud-native
|
|
3
|
+
description: 云原生架构。容器、Kubernetes、Serverless、微服务。当用户提到云原生、容器、Docker、Kubernetes、K8s、Serverless时使用。
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 🏗 阵法秘典 · 云原生架构
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
## Docker
|
|
10
|
+
|
|
11
|
+
### Dockerfile
|
|
12
|
+
```dockerfile
|
|
13
|
+
# 多阶段构建
|
|
14
|
+
FROM node:18-alpine AS builder
|
|
15
|
+
WORKDIR /app
|
|
16
|
+
COPY package*.json ./
|
|
17
|
+
RUN npm ci
|
|
18
|
+
COPY . .
|
|
19
|
+
RUN npm run build
|
|
20
|
+
|
|
21
|
+
FROM node:18-alpine
|
|
22
|
+
WORKDIR /app
|
|
23
|
+
COPY --from=builder /app/dist ./dist
|
|
24
|
+
COPY --from=builder /app/node_modules ./node_modules
|
|
25
|
+
EXPOSE 3000
|
|
26
|
+
USER node
|
|
27
|
+
CMD ["node", "dist/main.js"]
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
### Docker Compose
|
|
31
|
+
```yaml
|
|
32
|
+
version: '3.8'
|
|
33
|
+
services:
|
|
34
|
+
app:
|
|
35
|
+
build: .
|
|
36
|
+
ports:
|
|
37
|
+
- "3000:3000"
|
|
38
|
+
environment:
|
|
39
|
+
- DATABASE_URL=postgres://db:5432/mydb
|
|
40
|
+
depends_on:
|
|
41
|
+
- db
|
|
42
|
+
healthcheck:
|
|
43
|
+
test: ["CMD", "curl", "-f", "http://localhost:3000/health"]
|
|
44
|
+
interval: 30s
|
|
45
|
+
timeout: 10s
|
|
46
|
+
retries: 3
|
|
47
|
+
|
|
48
|
+
db:
|
|
49
|
+
image: postgres:15-alpine
|
|
50
|
+
volumes:
|
|
51
|
+
- postgres_data:/var/lib/postgresql/data
|
|
52
|
+
environment:
|
|
53
|
+
POSTGRES_DB: mydb
|
|
54
|
+
POSTGRES_PASSWORD: ${DB_PASSWORD}
|
|
55
|
+
|
|
56
|
+
volumes:
|
|
57
|
+
postgres_data:
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### 安全最佳实践
|
|
61
|
+
```yaml
|
|
62
|
+
镜像安全:
|
|
63
|
+
- 使用官方基础镜像
|
|
64
|
+
- 最小化镜像 (alpine/distroless)
|
|
65
|
+
- 扫描漏洞 (Trivy)
|
|
66
|
+
- 固定版本标签
|
|
67
|
+
|
|
68
|
+
运行时安全:
|
|
69
|
+
- 非 root 用户运行
|
|
70
|
+
- 只读文件系统
|
|
71
|
+
- 限制资源
|
|
72
|
+
- 禁用特权模式
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## Kubernetes
|
|
76
|
+
|
|
77
|
+
### 基础资源
|
|
78
|
+
```yaml
|
|
79
|
+
# Deployment
|
|
80
|
+
apiVersion: apps/v1
|
|
81
|
+
kind: Deployment
|
|
82
|
+
metadata:
|
|
83
|
+
name: myapp
|
|
84
|
+
spec:
|
|
85
|
+
replicas: 3
|
|
86
|
+
selector:
|
|
87
|
+
matchLabels:
|
|
88
|
+
app: myapp
|
|
89
|
+
template:
|
|
90
|
+
metadata:
|
|
91
|
+
labels:
|
|
92
|
+
app: myapp
|
|
93
|
+
spec:
|
|
94
|
+
containers:
|
|
95
|
+
- name: myapp
|
|
96
|
+
image: myapp:1.0.0
|
|
97
|
+
ports:
|
|
98
|
+
- containerPort: 3000
|
|
99
|
+
resources:
|
|
100
|
+
requests:
|
|
101
|
+
memory: "128Mi"
|
|
102
|
+
cpu: "100m"
|
|
103
|
+
limits:
|
|
104
|
+
memory: "256Mi"
|
|
105
|
+
cpu: "200m"
|
|
106
|
+
livenessProbe:
|
|
107
|
+
httpGet:
|
|
108
|
+
path: /health
|
|
109
|
+
port: 3000
|
|
110
|
+
initialDelaySeconds: 10
|
|
111
|
+
periodSeconds: 10
|
|
112
|
+
readinessProbe:
|
|
113
|
+
httpGet:
|
|
114
|
+
path: /ready
|
|
115
|
+
port: 3000
|
|
116
|
+
initialDelaySeconds: 5
|
|
117
|
+
periodSeconds: 5
|
|
118
|
+
---
|
|
119
|
+
# Service
|
|
120
|
+
apiVersion: v1
|
|
121
|
+
kind: Service
|
|
122
|
+
metadata:
|
|
123
|
+
name: myapp
|
|
124
|
+
spec:
|
|
125
|
+
selector:
|
|
126
|
+
app: myapp
|
|
127
|
+
ports:
|
|
128
|
+
- port: 80
|
|
129
|
+
targetPort: 3000
|
|
130
|
+
type: ClusterIP
|
|
131
|
+
---
|
|
132
|
+
# Ingress
|
|
133
|
+
apiVersion: networking.k8s.io/v1
|
|
134
|
+
kind: Ingress
|
|
135
|
+
metadata:
|
|
136
|
+
name: myapp
|
|
137
|
+
annotations:
|
|
138
|
+
nginx.ingress.kubernetes.io/ssl-redirect: "true"
|
|
139
|
+
spec:
|
|
140
|
+
tls:
|
|
141
|
+
- hosts:
|
|
142
|
+
- myapp.example.com
|
|
143
|
+
secretName: myapp-tls
|
|
144
|
+
rules:
|
|
145
|
+
- host: myapp.example.com
|
|
146
|
+
http:
|
|
147
|
+
paths:
|
|
148
|
+
- path: /
|
|
149
|
+
pathType: Prefix
|
|
150
|
+
backend:
|
|
151
|
+
service:
|
|
152
|
+
name: myapp
|
|
153
|
+
port:
|
|
154
|
+
number: 80
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
### 配置管理
|
|
158
|
+
```yaml
|
|
159
|
+
# ConfigMap
|
|
160
|
+
apiVersion: v1
|
|
161
|
+
kind: ConfigMap
|
|
162
|
+
metadata:
|
|
163
|
+
name: myapp-config
|
|
164
|
+
data:
|
|
165
|
+
APP_ENV: production
|
|
166
|
+
LOG_LEVEL: info
|
|
167
|
+
---
|
|
168
|
+
# Secret
|
|
169
|
+
apiVersion: v1
|
|
170
|
+
kind: Secret
|
|
171
|
+
metadata:
|
|
172
|
+
name: myapp-secret
|
|
173
|
+
type: Opaque
|
|
174
|
+
stringData:
|
|
175
|
+
DATABASE_URL: postgres://user:pass@db:5432/mydb
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
### 安全策略
|
|
179
|
+
```yaml
|
|
180
|
+
# NetworkPolicy
|
|
181
|
+
apiVersion: networking.k8s.io/v1
|
|
182
|
+
kind: NetworkPolicy
|
|
183
|
+
metadata:
|
|
184
|
+
name: myapp-network-policy
|
|
185
|
+
spec:
|
|
186
|
+
podSelector:
|
|
187
|
+
matchLabels:
|
|
188
|
+
app: myapp
|
|
189
|
+
policyTypes:
|
|
190
|
+
- Ingress
|
|
191
|
+
- Egress
|
|
192
|
+
ingress:
|
|
193
|
+
- from:
|
|
194
|
+
- podSelector:
|
|
195
|
+
matchLabels:
|
|
196
|
+
app: frontend
|
|
197
|
+
ports:
|
|
198
|
+
- port: 3000
|
|
199
|
+
egress:
|
|
200
|
+
- to:
|
|
201
|
+
- podSelector:
|
|
202
|
+
matchLabels:
|
|
203
|
+
app: database
|
|
204
|
+
ports:
|
|
205
|
+
- port: 5432
|
|
206
|
+
---
|
|
207
|
+
# PodSecurityPolicy (已废弃,使用 Pod Security Standards)
|
|
208
|
+
# Pod Security Admission
|
|
209
|
+
apiVersion: v1
|
|
210
|
+
kind: Namespace
|
|
211
|
+
metadata:
|
|
212
|
+
name: myapp
|
|
213
|
+
labels:
|
|
214
|
+
pod-security.kubernetes.io/enforce: restricted
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
## Serverless
|
|
218
|
+
|
|
219
|
+
### AWS Lambda
|
|
220
|
+
```python
|
|
221
|
+
import json
|
|
222
|
+
|
|
223
|
+
def handler(event, context):
|
|
224
|
+
body = json.loads(event.get('body', '{}'))
|
|
225
|
+
|
|
226
|
+
return {
|
|
227
|
+
'statusCode': 200,
|
|
228
|
+
'headers': {'Content-Type': 'application/json'},
|
|
229
|
+
'body': json.dumps({'message': 'Hello!'})
|
|
230
|
+
}
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
### Serverless Framework
|
|
234
|
+
```yaml
|
|
235
|
+
service: myapp
|
|
236
|
+
|
|
237
|
+
provider:
|
|
238
|
+
name: aws
|
|
239
|
+
runtime: python3.9
|
|
240
|
+
region: us-east-1
|
|
241
|
+
environment:
|
|
242
|
+
TABLE_NAME: ${self:service}-${sls:stage}
|
|
243
|
+
|
|
244
|
+
functions:
|
|
245
|
+
hello:
|
|
246
|
+
handler: handler.hello
|
|
247
|
+
events:
|
|
248
|
+
- http:
|
|
249
|
+
path: /hello
|
|
250
|
+
method: get
|
|
251
|
+
|
|
252
|
+
process:
|
|
253
|
+
handler: handler.process
|
|
254
|
+
events:
|
|
255
|
+
- sqs:
|
|
256
|
+
arn: !GetAtt MyQueue.Arn
|
|
257
|
+
|
|
258
|
+
resources:
|
|
259
|
+
Resources:
|
|
260
|
+
MyQueue:
|
|
261
|
+
Type: AWS::SQS::Queue
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
## 微服务模式
|
|
265
|
+
|
|
266
|
+
```yaml
|
|
267
|
+
服务发现:
|
|
268
|
+
- DNS (Kubernetes Service)
|
|
269
|
+
- Service Mesh (Istio)
|
|
270
|
+
|
|
271
|
+
负载均衡:
|
|
272
|
+
- 客户端负载均衡
|
|
273
|
+
- 服务端负载均衡
|
|
274
|
+
|
|
275
|
+
熔断器:
|
|
276
|
+
- Circuit Breaker
|
|
277
|
+
- Retry with backoff
|
|
278
|
+
- Timeout
|
|
279
|
+
|
|
280
|
+
可观测性:
|
|
281
|
+
- 日志聚合 (ELK)
|
|
282
|
+
- 指标监控 (Prometheus)
|
|
283
|
+
- 分布式追踪 (Jaeger)
|
|
284
|
+
```
|
|
285
|
+
|
|
@@ -0,0 +1,299 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: compliance
|
|
3
|
+
description: 合规审计秘典。GDPR、SOC2、审计日志、数据治理、合规即代码。当用户提到合规、GDPR、SOC2、审计、数据治理、隐私时路由到此。
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 🏗 阵法秘典 · 合规审计
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
## 合规框架总览
|
|
10
|
+
|
|
11
|
+
| 框架 | 适用范围 | 核心要求 | 处罚 |
|
|
12
|
+
|------|----------|----------|------|
|
|
13
|
+
| GDPR | 欧盟用户数据 | 数据保护、用户权利 | 营收4%或€2000万 |
|
|
14
|
+
| SOC 2 | SaaS/云服务 | 安全、可用、机密、隐私、处理完整性 | 失去客户信任 |
|
|
15
|
+
| HIPAA | 医疗健康数据 | PHI保护 | $50K-$1.5M/次 |
|
|
16
|
+
| PCI DSS | 支付卡数据 | 持卡人数据保护 | $5K-$100K/月 |
|
|
17
|
+
| ISO 27001 | 信息安全管理 | ISMS体系 | 认证失败 |
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## GDPR
|
|
22
|
+
|
|
23
|
+
### 七大原则
|
|
24
|
+
|
|
25
|
+
| 原则 | 含义 | 技术实现 |
|
|
26
|
+
|------|------|----------|
|
|
27
|
+
| 合法性 | 有合法基础处理数据 | 同意管理系统 |
|
|
28
|
+
| 目的限制 | 仅用于声明目的 | 数据用途标记 |
|
|
29
|
+
| 数据最小化 | 仅收集必要数据 | 字段级权限控制 |
|
|
30
|
+
| 准确性 | 数据准确且及时更新 | 数据校验流程 |
|
|
31
|
+
| 存储限制 | 不超期保留 | 自动过期删除 |
|
|
32
|
+
| 完整性与机密性 | 安全保护 | 加密、访问控制 |
|
|
33
|
+
| 问责制 | 可证明合规 | 审计日志 |
|
|
34
|
+
|
|
35
|
+
### 用户权利 (DSAR)
|
|
36
|
+
|
|
37
|
+
| 权利 | API 实现 | SLA |
|
|
38
|
+
|------|----------|-----|
|
|
39
|
+
| 访问权 | `GET /api/users/{id}/data-export` | 30天 |
|
|
40
|
+
| 删除权 | `DELETE /api/users/{id}/data` | 30天 |
|
|
41
|
+
| 可携带权 | `GET /api/users/{id}/data-export?format=json` | 30天 |
|
|
42
|
+
| 更正权 | `PATCH /api/users/{id}/data` | 30天 |
|
|
43
|
+
| 限制处理 | `POST /api/users/{id}/restrict` | 72小时 |
|
|
44
|
+
| 反对权 | `POST /api/users/{id}/opt-out` | 即时 |
|
|
45
|
+
|
|
46
|
+
### 技术实现
|
|
47
|
+
|
|
48
|
+
```python
|
|
49
|
+
# 数据删除 (Right to Erasure)
|
|
50
|
+
async def delete_user_data(user_id: str):
|
|
51
|
+
# 1. 标记删除(软删除)
|
|
52
|
+
await db.execute(
|
|
53
|
+
"UPDATE users SET status='deleted', deleted_at=NOW() WHERE id = %s",
|
|
54
|
+
user_id
|
|
55
|
+
)
|
|
56
|
+
|
|
57
|
+
# 2. 匿名化关联数据
|
|
58
|
+
await db.execute(
|
|
59
|
+
"UPDATE orders SET user_name='[REDACTED]', email='[REDACTED]' WHERE user_id = %s",
|
|
60
|
+
user_id
|
|
61
|
+
)
|
|
62
|
+
|
|
63
|
+
# 3. 清除缓存
|
|
64
|
+
await redis.delete(f"user:{user_id}")
|
|
65
|
+
|
|
66
|
+
# 4. 通知下游服务
|
|
67
|
+
await event_bus.publish("user.data.deleted", {"user_id": user_id})
|
|
68
|
+
|
|
69
|
+
# 5. 记录审计日志
|
|
70
|
+
await audit_log.record(
|
|
71
|
+
action="GDPR_ERASURE",
|
|
72
|
+
subject=user_id,
|
|
73
|
+
actor="system",
|
|
74
|
+
details={"reason": "DSAR request"}
|
|
75
|
+
)
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
## SOC 2
|
|
81
|
+
|
|
82
|
+
### 五大信任原则
|
|
83
|
+
|
|
84
|
+
| 原则 | 关注点 | 关键控制 |
|
|
85
|
+
|------|--------|----------|
|
|
86
|
+
| 安全 (必选) | 防止未授权访问 | 访问控制、加密、防火墙 |
|
|
87
|
+
| 可用性 | 系统可用性承诺 | SLA、灾备、监控 |
|
|
88
|
+
| 处理完整性 | 数据处理准确完整 | 输入验证、对账 |
|
|
89
|
+
| 机密性 | 机密信息保护 | 加密、分类、DLP |
|
|
90
|
+
| 隐私 | 个人信息保护 | 隐私政策、同意管理 |
|
|
91
|
+
|
|
92
|
+
### 关键控制措施
|
|
93
|
+
|
|
94
|
+
```yaml
|
|
95
|
+
访问控制:
|
|
96
|
+
- MFA 强制启用
|
|
97
|
+
- RBAC / ABAC
|
|
98
|
+
- 最小权限原则
|
|
99
|
+
- 定期访问审查 (季度)
|
|
100
|
+
- 离职即撤权
|
|
101
|
+
|
|
102
|
+
变更管理:
|
|
103
|
+
- 代码审查 (PR approval)
|
|
104
|
+
- 分环境部署 (dev → staging → prod)
|
|
105
|
+
- 变更审批流程
|
|
106
|
+
- 回滚方案
|
|
107
|
+
|
|
108
|
+
监控与告警:
|
|
109
|
+
- 安全事件监控
|
|
110
|
+
- 异常登录检测
|
|
111
|
+
- 数据访问审计
|
|
112
|
+
- 定期漏洞扫描
|
|
113
|
+
|
|
114
|
+
事件响应:
|
|
115
|
+
- IR 计划文档化
|
|
116
|
+
- 定期演练
|
|
117
|
+
- 通知流程 (72小时内)
|
|
118
|
+
- 事后复盘
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
---
|
|
122
|
+
|
|
123
|
+
## 审计日志
|
|
124
|
+
|
|
125
|
+
### 日志设计
|
|
126
|
+
|
|
127
|
+
```json
|
|
128
|
+
{
|
|
129
|
+
"id": "audit-uuid-001",
|
|
130
|
+
"timestamp": "2024-01-15T10:30:00.123Z",
|
|
131
|
+
"actor": {
|
|
132
|
+
"id": "user-123",
|
|
133
|
+
"type": "user",
|
|
134
|
+
"ip": "192.168.x.x",
|
|
135
|
+
"user_agent": "Mozilla/5.0..."
|
|
136
|
+
},
|
|
137
|
+
"action": "user.data.export",
|
|
138
|
+
"resource": {
|
|
139
|
+
"type": "user_data",
|
|
140
|
+
"id": "user-456"
|
|
141
|
+
},
|
|
142
|
+
"result": "success",
|
|
143
|
+
"details": {
|
|
144
|
+
"reason": "DSAR request",
|
|
145
|
+
"fields_exported": ["name", "email", "orders"]
|
|
146
|
+
},
|
|
147
|
+
"metadata": {
|
|
148
|
+
"request_id": "req-789",
|
|
149
|
+
"service": "user-service",
|
|
150
|
+
"version": "1.2.3"
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
### 必须审计的事件
|
|
156
|
+
|
|
157
|
+
```yaml
|
|
158
|
+
认证:
|
|
159
|
+
- 登录成功/失败
|
|
160
|
+
- MFA 验证
|
|
161
|
+
- 密码变更
|
|
162
|
+
- Token 签发/撤销
|
|
163
|
+
|
|
164
|
+
授权:
|
|
165
|
+
- 权限变更
|
|
166
|
+
- 角色分配
|
|
167
|
+
- 访问拒绝
|
|
168
|
+
|
|
169
|
+
数据:
|
|
170
|
+
- 敏感数据访问
|
|
171
|
+
- 数据导出
|
|
172
|
+
- 数据删除
|
|
173
|
+
- 批量操作
|
|
174
|
+
|
|
175
|
+
系统:
|
|
176
|
+
- 配置变更
|
|
177
|
+
- 部署事件
|
|
178
|
+
- 安全策略变更
|
|
179
|
+
- 管理员操作
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
### 存储要求
|
|
183
|
+
|
|
184
|
+
```yaml
|
|
185
|
+
保留期限:
|
|
186
|
+
- 安全事件: ≥ 1年
|
|
187
|
+
- 访问日志: ≥ 90天
|
|
188
|
+
- 变更日志: ≥ 3年
|
|
189
|
+
- 合规审计: ≥ 7年
|
|
190
|
+
|
|
191
|
+
存储策略:
|
|
192
|
+
- 不可篡改 (WORM / append-only)
|
|
193
|
+
- 加密存储
|
|
194
|
+
- 异地备份
|
|
195
|
+
- 访问控制 (仅审计员可读)
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
---
|
|
199
|
+
|
|
200
|
+
## 数据治理
|
|
201
|
+
|
|
202
|
+
### 数据分类
|
|
203
|
+
|
|
204
|
+
| 级别 | 类型 | 保护措施 | 示例 |
|
|
205
|
+
|------|------|----------|------|
|
|
206
|
+
| 公开 | Public | 无特殊要求 | 产品文档 |
|
|
207
|
+
| 内部 | Internal | 访问控制 | 内部Wiki |
|
|
208
|
+
| 机密 | Confidential | 加密+审计 | 客户数据 |
|
|
209
|
+
| 受限 | Restricted | 加密+审计+MFA | 密钥、PII |
|
|
210
|
+
|
|
211
|
+
### 数据生命周期
|
|
212
|
+
|
|
213
|
+
```
|
|
214
|
+
创建 → 存储 → 使用 → 共享 → 归档 → 销毁
|
|
215
|
+
│ │ │ │ │ │
|
|
216
|
+
分类 加密 审计 脱敏 压缩 安全删除
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
### 数据血缘 (Data Lineage)
|
|
220
|
+
|
|
221
|
+
```
|
|
222
|
+
数据源 → ETL → 数据仓库 → 报表
|
|
223
|
+
│ │ │
|
|
224
|
+
└── 追踪数据流向,确保合规处理
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
---
|
|
228
|
+
|
|
229
|
+
## 合规即代码 (Compliance as Code)
|
|
230
|
+
|
|
231
|
+
### OPA (Open Policy Agent)
|
|
232
|
+
|
|
233
|
+
```rego
|
|
234
|
+
# 策略: 禁止公开 S3 Bucket
|
|
235
|
+
deny[msg] {
|
|
236
|
+
input.resource_type == "aws_s3_bucket"
|
|
237
|
+
input.resource.acl == "public-read"
|
|
238
|
+
msg := sprintf("S3 bucket %s must not be public", [input.resource.name])
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
# 策略: 强制加密
|
|
242
|
+
deny[msg] {
|
|
243
|
+
input.resource_type == "aws_s3_bucket"
|
|
244
|
+
not input.resource.server_side_encryption_configuration
|
|
245
|
+
msg := sprintf("S3 bucket %s must have encryption enabled", [input.resource.name])
|
|
246
|
+
}
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
### CI/CD 集成
|
|
250
|
+
|
|
251
|
+
```yaml
|
|
252
|
+
# 合规检查 Pipeline
|
|
253
|
+
compliance-check:
|
|
254
|
+
stage: validate
|
|
255
|
+
steps:
|
|
256
|
+
- name: Terraform Plan
|
|
257
|
+
run: terraform plan -out=plan.tfplan
|
|
258
|
+
|
|
259
|
+
- name: OPA Check
|
|
260
|
+
run: |
|
|
261
|
+
terraform show -json plan.tfplan > plan.json
|
|
262
|
+
opa eval -d policies/ -i plan.json "data.terraform.deny"
|
|
263
|
+
|
|
264
|
+
- name: Secret Scan
|
|
265
|
+
run: gitleaks detect --source .
|
|
266
|
+
|
|
267
|
+
- name: License Check
|
|
268
|
+
run: license-checker --production --failOn "GPL"
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
---
|
|
272
|
+
|
|
273
|
+
## 合规检查清单
|
|
274
|
+
|
|
275
|
+
```yaml
|
|
276
|
+
GDPR:
|
|
277
|
+
- [ ] 隐私政策更新
|
|
278
|
+
- [ ] 同意管理实现
|
|
279
|
+
- [ ] DSAR 流程就绪 (30天SLA)
|
|
280
|
+
- [ ] 数据加密 (传输+存储)
|
|
281
|
+
- [ ] 数据保留策略
|
|
282
|
+
- [ ] 数据泄露通知流程 (72小时)
|
|
283
|
+
- [ ] DPO 指定
|
|
284
|
+
|
|
285
|
+
SOC 2:
|
|
286
|
+
- [ ] 访问控制 + MFA
|
|
287
|
+
- [ ] 变更管理流程
|
|
288
|
+
- [ ] 事件响应计划
|
|
289
|
+
- [ ] 漏洞管理
|
|
290
|
+
- [ ] 安全培训记录
|
|
291
|
+
- [ ] 供应商评估
|
|
292
|
+
|
|
293
|
+
审计:
|
|
294
|
+
- [ ] 审计日志覆盖关键操作
|
|
295
|
+
- [ ] 日志不可篡改
|
|
296
|
+
- [ ] 保留期限符合要求
|
|
297
|
+
- [ ] 定期审计审查
|
|
298
|
+
```
|
|
299
|
+
|