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,184 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: data-security
|
|
3
|
+
description: 数据安全。加密、隐私保护、合规。当用户提到数据安全、加密、隐私、GDPR、合规时使用。
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 🏗 阵法秘典 · 数据安全
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
## 数据分类
|
|
10
|
+
|
|
11
|
+
```yaml
|
|
12
|
+
公开数据:
|
|
13
|
+
- 公开信息
|
|
14
|
+
- 营销材料
|
|
15
|
+
|
|
16
|
+
内部数据:
|
|
17
|
+
- 内部文档
|
|
18
|
+
- 业务数据
|
|
19
|
+
|
|
20
|
+
机密数据:
|
|
21
|
+
- 客户信息
|
|
22
|
+
- 财务数据
|
|
23
|
+
- 商业秘密
|
|
24
|
+
|
|
25
|
+
敏感数据:
|
|
26
|
+
- PII (个人身份信息)
|
|
27
|
+
- PHI (健康信息)
|
|
28
|
+
- 支付卡数据
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## 加密
|
|
32
|
+
|
|
33
|
+
### 传输加密
|
|
34
|
+
```yaml
|
|
35
|
+
TLS 配置:
|
|
36
|
+
- TLS 1.2+ (禁用 1.0/1.1)
|
|
37
|
+
- 强密码套件
|
|
38
|
+
- 证书管理
|
|
39
|
+
- HSTS
|
|
40
|
+
|
|
41
|
+
推荐密码套件:
|
|
42
|
+
- TLS_AES_256_GCM_SHA384
|
|
43
|
+
- TLS_CHACHA20_POLY1305_SHA256
|
|
44
|
+
- ECDHE-RSA-AES256-GCM-SHA384
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### 存储加密
|
|
48
|
+
```python
|
|
49
|
+
# 对称加密 (AES-256-GCM)
|
|
50
|
+
from cryptography.hazmat.primitives.ciphers.aead import AESGCM
|
|
51
|
+
import os
|
|
52
|
+
|
|
53
|
+
key = os.urandom(32) # 256-bit key
|
|
54
|
+
nonce = os.urandom(12)
|
|
55
|
+
aesgcm = AESGCM(key)
|
|
56
|
+
|
|
57
|
+
ciphertext = aesgcm.encrypt(nonce, plaintext, associated_data)
|
|
58
|
+
plaintext = aesgcm.decrypt(nonce, ciphertext, associated_data)
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### 密钥管理
|
|
62
|
+
```yaml
|
|
63
|
+
原则:
|
|
64
|
+
- 密钥与数据分离
|
|
65
|
+
- 定期轮换
|
|
66
|
+
- 最小权限访问
|
|
67
|
+
- 审计日志
|
|
68
|
+
|
|
69
|
+
方案:
|
|
70
|
+
- AWS KMS
|
|
71
|
+
- HashiCorp Vault
|
|
72
|
+
- Azure Key Vault
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### 密码存储
|
|
76
|
+
```python
|
|
77
|
+
# 使用 bcrypt 或 argon2
|
|
78
|
+
import bcrypt
|
|
79
|
+
|
|
80
|
+
# 哈希
|
|
81
|
+
password = b"user_password"
|
|
82
|
+
salt = bcrypt.gensalt(rounds=12)
|
|
83
|
+
hashed = bcrypt.hashpw(password, salt)
|
|
84
|
+
|
|
85
|
+
# 验证
|
|
86
|
+
bcrypt.checkpw(password, hashed)
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
## 隐私保护
|
|
90
|
+
|
|
91
|
+
### 数据脱敏
|
|
92
|
+
```python
|
|
93
|
+
# 姓名脱敏
|
|
94
|
+
def mask_name(name):
|
|
95
|
+
if len(name) <= 1:
|
|
96
|
+
return "*"
|
|
97
|
+
return name[0] + "*" * (len(name) - 1)
|
|
98
|
+
|
|
99
|
+
# 手机号脱敏
|
|
100
|
+
def mask_phone(phone):
|
|
101
|
+
return phone[:3] + "****" + phone[-4:]
|
|
102
|
+
|
|
103
|
+
# 邮箱脱敏
|
|
104
|
+
def mask_email(email):
|
|
105
|
+
local, domain = email.split("@")
|
|
106
|
+
return local[0] + "***@" + domain
|
|
107
|
+
|
|
108
|
+
# 身份证脱敏
|
|
109
|
+
def mask_id_card(id_card):
|
|
110
|
+
return id_card[:6] + "********" + id_card[-4:]
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
### 数据最小化
|
|
114
|
+
```yaml
|
|
115
|
+
原则:
|
|
116
|
+
- 只收集必要数据
|
|
117
|
+
- 限制保留期限
|
|
118
|
+
- 定期清理
|
|
119
|
+
- 匿名化/假名化
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
## 合规要求
|
|
123
|
+
|
|
124
|
+
### GDPR
|
|
125
|
+
```yaml
|
|
126
|
+
核心要求:
|
|
127
|
+
- 合法性、公平性、透明性
|
|
128
|
+
- 目的限制
|
|
129
|
+
- 数据最小化
|
|
130
|
+
- 准确性
|
|
131
|
+
- 存储限制
|
|
132
|
+
- 完整性和保密性
|
|
133
|
+
- 问责制
|
|
134
|
+
|
|
135
|
+
数据主体权利:
|
|
136
|
+
- 知情权
|
|
137
|
+
- 访问权
|
|
138
|
+
- 更正权
|
|
139
|
+
- 删除权 (被遗忘权)
|
|
140
|
+
- 限制处理权
|
|
141
|
+
- 数据可携带权
|
|
142
|
+
- 反对权
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
### 安全控制
|
|
146
|
+
```yaml
|
|
147
|
+
技术措施:
|
|
148
|
+
- 加密
|
|
149
|
+
- 访问控制
|
|
150
|
+
- 日志审计
|
|
151
|
+
- 数据备份
|
|
152
|
+
|
|
153
|
+
组织措施:
|
|
154
|
+
- 安全政策
|
|
155
|
+
- 员工培训
|
|
156
|
+
- 事件响应
|
|
157
|
+
- 供应商管理
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
## 数据安全检查清单
|
|
161
|
+
|
|
162
|
+
```yaml
|
|
163
|
+
分类与发现:
|
|
164
|
+
- [ ] 数据资产清单
|
|
165
|
+
- [ ] 敏感数据识别
|
|
166
|
+
- [ ] 数据流映射
|
|
167
|
+
|
|
168
|
+
保护:
|
|
169
|
+
- [ ] 传输加密
|
|
170
|
+
- [ ] 存储加密
|
|
171
|
+
- [ ] 访问控制
|
|
172
|
+
- [ ] 数据脱敏
|
|
173
|
+
|
|
174
|
+
监控:
|
|
175
|
+
- [ ] 访问日志
|
|
176
|
+
- [ ] 异常检测
|
|
177
|
+
- [ ] DLP
|
|
178
|
+
|
|
179
|
+
合规:
|
|
180
|
+
- [ ] 隐私政策
|
|
181
|
+
- [ ] 数据处理协议
|
|
182
|
+
- [ ] 事件响应计划
|
|
183
|
+
```
|
|
184
|
+
|
|
@@ -0,0 +1,329 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: message-queue
|
|
3
|
+
description: 消息队列秘典。Kafka、RabbitMQ、Redis Streams、事件驱动架构。当用户提到消息队列、Kafka、RabbitMQ、事件驱动、CQRS、Saga时路由到此。
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 🏗 阵法秘典 · 消息队列
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
## 核心概念
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
Producer → Broker → Consumer
|
|
13
|
+
发送 存储 消费
|
|
14
|
+
|
|
15
|
+
模式:
|
|
16
|
+
点对点 (Queue): 1 Producer → 1 Consumer
|
|
17
|
+
发布订阅 (Topic): 1 Producer → N Consumers
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
| 概念 | 含义 | 类比 |
|
|
21
|
+
|------|------|------|
|
|
22
|
+
| Producer | 消息生产者 | 发令者 |
|
|
23
|
+
| Consumer | 消息消费者 | 执行者 |
|
|
24
|
+
| Broker | 消息中间件 | 传令阵 |
|
|
25
|
+
| Topic/Queue | 消息通道 | 传音符 |
|
|
26
|
+
| Partition | 分区(并行单元) | 阵眼 |
|
|
27
|
+
| Offset | 消费位置 | 修行进度 |
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## Kafka
|
|
32
|
+
|
|
33
|
+
### 架构
|
|
34
|
+
|
|
35
|
+
```
|
|
36
|
+
Producer ──→ Broker Cluster ──→ Consumer Group
|
|
37
|
+
│
|
|
38
|
+
┌────┴────┐
|
|
39
|
+
│ Topic-A │
|
|
40
|
+
│ P0 P1 P2 │ (3 Partitions)
|
|
41
|
+
└──────────┘
|
|
42
|
+
|
|
43
|
+
Replication: Leader + Followers
|
|
44
|
+
ZooKeeper/KRaft: 元数据管理
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### 生产者
|
|
48
|
+
|
|
49
|
+
```python
|
|
50
|
+
from confluent_kafka import Producer
|
|
51
|
+
|
|
52
|
+
conf = {
|
|
53
|
+
'bootstrap.servers': 'kafka:9092',
|
|
54
|
+
'acks': 'all', # 等待所有副本确认
|
|
55
|
+
'retries': 3,
|
|
56
|
+
'retry.backoff.ms': 1000,
|
|
57
|
+
'enable.idempotence': True, # 幂等生产者
|
|
58
|
+
'linger.ms': 5, # 批量发送延迟
|
|
59
|
+
'batch.size': 16384, # 批量大小
|
|
60
|
+
'compression.type': 'snappy', # 压缩
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
producer = Producer(conf)
|
|
64
|
+
|
|
65
|
+
def delivery_report(err, msg):
|
|
66
|
+
if err:
|
|
67
|
+
print(f"Delivery failed: {err}")
|
|
68
|
+
|
|
69
|
+
producer.produce(
|
|
70
|
+
topic='orders',
|
|
71
|
+
key=order_id.encode(), # 相同 key → 相同 partition → 有序
|
|
72
|
+
value=json.dumps(order).encode(),
|
|
73
|
+
callback=delivery_report
|
|
74
|
+
)
|
|
75
|
+
producer.flush()
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### 消费者
|
|
79
|
+
|
|
80
|
+
```python
|
|
81
|
+
from confluent_kafka import Consumer
|
|
82
|
+
|
|
83
|
+
conf = {
|
|
84
|
+
'bootstrap.servers': 'kafka:9092',
|
|
85
|
+
'group.id': 'order-processor',
|
|
86
|
+
'auto.offset.reset': 'earliest',
|
|
87
|
+
'enable.auto.commit': False, # 手动提交
|
|
88
|
+
'max.poll.interval.ms': 300000,
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
consumer = Consumer(conf)
|
|
92
|
+
consumer.subscribe(['orders'])
|
|
93
|
+
|
|
94
|
+
try:
|
|
95
|
+
while True:
|
|
96
|
+
msg = consumer.poll(1.0)
|
|
97
|
+
if msg is None:
|
|
98
|
+
continue
|
|
99
|
+
if msg.error():
|
|
100
|
+
handle_error(msg.error())
|
|
101
|
+
continue
|
|
102
|
+
|
|
103
|
+
process_message(msg.value())
|
|
104
|
+
consumer.commit(asynchronous=False) # 处理成功后提交
|
|
105
|
+
finally:
|
|
106
|
+
consumer.close()
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
### Kafka 关键配置
|
|
110
|
+
|
|
111
|
+
```yaml
|
|
112
|
+
Broker:
|
|
113
|
+
num.partitions: 6 # 默认分区数
|
|
114
|
+
default.replication.factor: 3 # 副本数
|
|
115
|
+
min.insync.replicas: 2 # 最小同步副本
|
|
116
|
+
log.retention.hours: 168 # 保留 7 天
|
|
117
|
+
log.segment.bytes: 1073741824 # 1GB 段文件
|
|
118
|
+
|
|
119
|
+
Topic 设计:
|
|
120
|
+
分区数 = max(生产吞吐/单分区写入能力, 消费者数)
|
|
121
|
+
副本数 = 3 (生产环境)
|
|
122
|
+
Key 选择: 业务ID (保证同一实体有序)
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
---
|
|
126
|
+
|
|
127
|
+
## RabbitMQ
|
|
128
|
+
|
|
129
|
+
### Exchange 类型
|
|
130
|
+
|
|
131
|
+
| 类型 | 路由规则 | 适用场景 |
|
|
132
|
+
|------|----------|----------|
|
|
133
|
+
| Direct | 精确匹配 routing key | 点对点 |
|
|
134
|
+
| Fanout | 广播到所有绑定队列 | 发布订阅 |
|
|
135
|
+
| Topic | 通配符匹配 routing key | 灵活路由 |
|
|
136
|
+
| Headers | 匹配消息头 | 复杂路由 |
|
|
137
|
+
|
|
138
|
+
```
|
|
139
|
+
Producer → Exchange → Binding → Queue → Consumer
|
|
140
|
+
│
|
|
141
|
+
routing_key 匹配
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
### 可靠性保证
|
|
145
|
+
|
|
146
|
+
```yaml
|
|
147
|
+
生产者:
|
|
148
|
+
- Publisher Confirms (确认模式)
|
|
149
|
+
- 持久化消息 (delivery_mode=2)
|
|
150
|
+
- 事务模式 (性能差,不推荐)
|
|
151
|
+
|
|
152
|
+
Broker:
|
|
153
|
+
- 持久化队列 (durable=True)
|
|
154
|
+
- 镜像队列 / Quorum Queue
|
|
155
|
+
- 磁盘持久化
|
|
156
|
+
|
|
157
|
+
消费者:
|
|
158
|
+
- 手动 ACK (auto_ack=False)
|
|
159
|
+
- 预取限制 (prefetch_count)
|
|
160
|
+
- 死信队列 (DLX) 处理失败消息
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
### 死信队列 (DLQ)
|
|
164
|
+
|
|
165
|
+
```
|
|
166
|
+
正常队列 ──(消费失败/TTL过期/队列满)──→ 死信交换机 → 死信队列
|
|
167
|
+
│
|
|
168
|
+
人工处理 / 重试
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
---
|
|
172
|
+
|
|
173
|
+
## Redis Streams
|
|
174
|
+
|
|
175
|
+
```bash
|
|
176
|
+
# 生产
|
|
177
|
+
XADD orders * user_id "123" amount "99.99"
|
|
178
|
+
|
|
179
|
+
# 消费组
|
|
180
|
+
XGROUP CREATE orders order-group $ MKSTREAM
|
|
181
|
+
XREADGROUP GROUP order-group consumer-1 COUNT 10 BLOCK 5000 STREAMS orders >
|
|
182
|
+
|
|
183
|
+
# 确认
|
|
184
|
+
XACK orders order-group <message-id>
|
|
185
|
+
|
|
186
|
+
# 查看待处理
|
|
187
|
+
XPENDING orders order-group
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
| 特性 | 适用 | 不适用 |
|
|
191
|
+
|------|------|--------|
|
|
192
|
+
| 轻量级 | 中小规模、低延迟 | 海量数据持久化 |
|
|
193
|
+
| 消费组 | 多消费者并行 | 复杂路由 |
|
|
194
|
+
| 内存存储 | 实时处理 | 长期存储 |
|
|
195
|
+
|
|
196
|
+
---
|
|
197
|
+
|
|
198
|
+
## 事件驱动架构
|
|
199
|
+
|
|
200
|
+
### Event Sourcing
|
|
201
|
+
|
|
202
|
+
```
|
|
203
|
+
传统: 只存最终状态
|
|
204
|
+
Account { balance: 100 }
|
|
205
|
+
|
|
206
|
+
Event Sourcing: 存储所有事件
|
|
207
|
+
AccountCreated { initial: 0 }
|
|
208
|
+
MoneyDeposited { amount: 200 }
|
|
209
|
+
MoneyWithdrawn { amount: 100 }
|
|
210
|
+
→ 重放得到 balance: 100
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
### CQRS (Command Query Responsibility Segregation)
|
|
214
|
+
|
|
215
|
+
```
|
|
216
|
+
Command (写) ──→ Write Model ──→ Event Store
|
|
217
|
+
│
|
|
218
|
+
Event Bus
|
|
219
|
+
│
|
|
220
|
+
Query (读) ←── Read Model ←── Projection
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
### Saga 模式
|
|
224
|
+
|
|
225
|
+
```
|
|
226
|
+
分布式事务编排:
|
|
227
|
+
|
|
228
|
+
Choreography (编舞):
|
|
229
|
+
Order → Payment → Inventory → Shipping
|
|
230
|
+
每个服务监听事件,自主决策
|
|
231
|
+
|
|
232
|
+
Orchestration (编排):
|
|
233
|
+
Saga Orchestrator
|
|
234
|
+
├→ Order Service: 创建订单
|
|
235
|
+
├→ Payment Service: 扣款
|
|
236
|
+
├→ Inventory Service: 扣库存
|
|
237
|
+
└→ Shipping Service: 发货
|
|
238
|
+
|
|
239
|
+
失败补偿:
|
|
240
|
+
Shipping失败 → 补偿Inventory → 补偿Payment → 补偿Order
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
---
|
|
244
|
+
|
|
245
|
+
## 选型对比
|
|
246
|
+
|
|
247
|
+
| 维度 | Kafka | RabbitMQ | Redis Streams |
|
|
248
|
+
|------|-------|----------|---------------|
|
|
249
|
+
| 吞吐量 | 极高 (百万/s) | 高 (万/s) | 高 (十万/s) |
|
|
250
|
+
| 延迟 | ms 级 | μs-ms 级 | μs 级 |
|
|
251
|
+
| 持久化 | 磁盘 | 磁盘/内存 | 内存+AOF |
|
|
252
|
+
| 消息顺序 | 分区内有序 | 队列内有序 | 流内有序 |
|
|
253
|
+
| 消息回溯 | ✅ 支持 | ❌ 不支持 | ✅ 支持 |
|
|
254
|
+
| 协议 | 自有协议 | AMQP | Redis协议 |
|
|
255
|
+
| 适用 | 大数据/日志/流处理 | 业务消息/RPC | 轻量级实时 |
|
|
256
|
+
|
|
257
|
+
### 选型决策树
|
|
258
|
+
|
|
259
|
+
```
|
|
260
|
+
需要消息回溯?
|
|
261
|
+
├─ 是 → Kafka / Redis Streams
|
|
262
|
+
└─ 否 → 需要复杂路由?
|
|
263
|
+
├─ 是 → RabbitMQ
|
|
264
|
+
└─ 否 → 吞吐量要求?
|
|
265
|
+
├─ 极高 (>10万/s) → Kafka
|
|
266
|
+
├─ 中等 → RabbitMQ
|
|
267
|
+
└─ 轻量 → Redis Streams
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
---
|
|
271
|
+
|
|
272
|
+
## 常见问题
|
|
273
|
+
|
|
274
|
+
### 消息丢失
|
|
275
|
+
|
|
276
|
+
```yaml
|
|
277
|
+
防丢三板斧:
|
|
278
|
+
生产端: acks=all + retries + 幂等
|
|
279
|
+
Broker: replication + 持久化 + min.insync.replicas
|
|
280
|
+
消费端: 手动提交 + 处理后确认
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
### 消息重复
|
|
284
|
+
|
|
285
|
+
```yaml
|
|
286
|
+
幂等处理:
|
|
287
|
+
- 数据库唯一约束 (message_id)
|
|
288
|
+
- Redis SETNX 去重
|
|
289
|
+
- 业务层幂等设计 (状态机)
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
### 消息积压
|
|
293
|
+
|
|
294
|
+
```yaml
|
|
295
|
+
应急:
|
|
296
|
+
- 增加消费者实例
|
|
297
|
+
- 临时扩大分区 (Kafka)
|
|
298
|
+
- 跳过非关键消息
|
|
299
|
+
|
|
300
|
+
根治:
|
|
301
|
+
- 优化消费者处理速度
|
|
302
|
+
- 合理设置分区数
|
|
303
|
+
- 监控消费 lag 告警
|
|
304
|
+
```
|
|
305
|
+
|
|
306
|
+
---
|
|
307
|
+
|
|
308
|
+
## 最佳实践
|
|
309
|
+
|
|
310
|
+
```yaml
|
|
311
|
+
设计:
|
|
312
|
+
- 消息体尽量小,大数据用引用
|
|
313
|
+
- 消息必须包含唯一ID和时间戳
|
|
314
|
+
- 定义清晰的消息 Schema (Avro/Protobuf)
|
|
315
|
+
- 版本兼容 (向后兼容)
|
|
316
|
+
|
|
317
|
+
运维:
|
|
318
|
+
- 监控消费 lag
|
|
319
|
+
- 死信队列告警
|
|
320
|
+
- 定期清理过期消息
|
|
321
|
+
- 容量规划 (磁盘/内存)
|
|
322
|
+
|
|
323
|
+
安全:
|
|
324
|
+
- TLS 加密传输
|
|
325
|
+
- SASL 认证
|
|
326
|
+
- ACL 授权
|
|
327
|
+
- 审计日志
|
|
328
|
+
```
|
|
329
|
+
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: security-arch
|
|
3
|
+
description: 安全架构设计。零信任、身份认证、威胁建模。当用户提到安全架构、零信任、IAM、身份认证、威胁建模时使用。
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 🏗 阵法秘典 · 安全架构设计
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
## 零信任架构
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
13
|
+
│ 零信任原则 │
|
|
14
|
+
├─────────────────────────────────────────────────────────────┤
|
|
15
|
+
│ 1. 永不信任,始终验证 │
|
|
16
|
+
│ 2. 最小权限访问 │
|
|
17
|
+
│ 3. 假设已被入侵 │
|
|
18
|
+
│ 4. 显式验证每个请求 │
|
|
19
|
+
│ 5. 持续监控和验证 │
|
|
20
|
+
└─────────────────────────────────────────────────────────────┘
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
### 核心组件
|
|
24
|
+
```yaml
|
|
25
|
+
身份验证:
|
|
26
|
+
- 多因素认证 (MFA)
|
|
27
|
+
- 单点登录 (SSO)
|
|
28
|
+
- 证书认证
|
|
29
|
+
|
|
30
|
+
设备信任:
|
|
31
|
+
- 设备健康检查
|
|
32
|
+
- 端点检测响应 (EDR)
|
|
33
|
+
- 移动设备管理 (MDM)
|
|
34
|
+
|
|
35
|
+
网络分段:
|
|
36
|
+
- 微分段
|
|
37
|
+
- 软件定义边界 (SDP)
|
|
38
|
+
- 网络访问控制
|
|
39
|
+
|
|
40
|
+
数据保护:
|
|
41
|
+
- 加密传输/存储
|
|
42
|
+
- 数据分类
|
|
43
|
+
- DLP
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## 身份与访问管理 (IAM)
|
|
47
|
+
|
|
48
|
+
### 认证方式
|
|
49
|
+
```yaml
|
|
50
|
+
密码认证:
|
|
51
|
+
- 强密码策略
|
|
52
|
+
- 密码哈希 (bcrypt/argon2)
|
|
53
|
+
- 防暴力破解
|
|
54
|
+
|
|
55
|
+
多因素认证:
|
|
56
|
+
- TOTP (Google Authenticator)
|
|
57
|
+
- FIDO2/WebAuthn
|
|
58
|
+
- 短信/邮件验证码
|
|
59
|
+
|
|
60
|
+
单点登录:
|
|
61
|
+
- SAML 2.0
|
|
62
|
+
- OAuth 2.0 / OIDC
|
|
63
|
+
- Kerberos
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
### 授权模型
|
|
67
|
+
```yaml
|
|
68
|
+
RBAC (基于角色):
|
|
69
|
+
用户 → 角色 → 权限
|
|
70
|
+
示例:
|
|
71
|
+
- admin: [read, write, delete]
|
|
72
|
+
- editor: [read, write]
|
|
73
|
+
- viewer: [read]
|
|
74
|
+
|
|
75
|
+
ABAC (基于属性):
|
|
76
|
+
策略 = f(主体属性, 资源属性, 环境属性)
|
|
77
|
+
示例:
|
|
78
|
+
- 部门=财务 AND 级别>=3 → 访问财务报表
|
|
79
|
+
|
|
80
|
+
PBAC (基于策略):
|
|
81
|
+
使用策略语言定义复杂规则
|
|
82
|
+
示例: OPA/Rego
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### JWT 最佳实践
|
|
86
|
+
```yaml
|
|
87
|
+
签名算法:
|
|
88
|
+
- 使用 RS256 或 ES256
|
|
89
|
+
- 避免 HS256 (共享密钥)
|
|
90
|
+
- 禁止 none 算法
|
|
91
|
+
|
|
92
|
+
Token 管理:
|
|
93
|
+
- 短期访问令牌 (15分钟)
|
|
94
|
+
- 长期刷新令牌 (7天)
|
|
95
|
+
- 令牌轮换
|
|
96
|
+
- 黑名单机制
|
|
97
|
+
|
|
98
|
+
Claims:
|
|
99
|
+
- iss: 签发者
|
|
100
|
+
- sub: 主题
|
|
101
|
+
- aud: 受众
|
|
102
|
+
- exp: 过期时间
|
|
103
|
+
- iat: 签发时间
|
|
104
|
+
- jti: 唯一标识
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
## 威胁建模
|
|
108
|
+
|
|
109
|
+
### STRIDE 模型
|
|
110
|
+
```yaml
|
|
111
|
+
S - Spoofing (欺骗):
|
|
112
|
+
威胁: 冒充用户身份
|
|
113
|
+
缓解: 强认证、MFA
|
|
114
|
+
|
|
115
|
+
T - Tampering (篡改):
|
|
116
|
+
威胁: 修改数据
|
|
117
|
+
缓解: 完整性校验、签名
|
|
118
|
+
|
|
119
|
+
R - Repudiation (抵赖):
|
|
120
|
+
威胁: 否认操作
|
|
121
|
+
缓解: 审计日志、数字签名
|
|
122
|
+
|
|
123
|
+
I - Information Disclosure (信息泄露):
|
|
124
|
+
威胁: 数据泄露
|
|
125
|
+
缓解: 加密、访问控制
|
|
126
|
+
|
|
127
|
+
D - Denial of Service (拒绝服务):
|
|
128
|
+
威胁: 服务不可用
|
|
129
|
+
缓解: 限流、冗余
|
|
130
|
+
|
|
131
|
+
E - Elevation of Privilege (权限提升):
|
|
132
|
+
威胁: 获取更高权限
|
|
133
|
+
缓解: 最小权限、输入验证
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
### 威胁建模流程
|
|
137
|
+
```
|
|
138
|
+
1. 识别资产
|
|
139
|
+
└─ 数据、服务、基础设施
|
|
140
|
+
|
|
141
|
+
2. 绘制数据流图
|
|
142
|
+
└─ 信任边界、数据流向
|
|
143
|
+
|
|
144
|
+
3. 识别威胁
|
|
145
|
+
└─ 使用 STRIDE 分析
|
|
146
|
+
|
|
147
|
+
4. 评估风险
|
|
148
|
+
└─ 可能性 × 影响
|
|
149
|
+
|
|
150
|
+
5. 制定缓解措施
|
|
151
|
+
└─ 技术控制、流程控制
|
|
152
|
+
|
|
153
|
+
6. 验证和迭代
|
|
154
|
+
└─ 渗透测试、代码审计
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
## 安全设计原则
|
|
158
|
+
|
|
159
|
+
```yaml
|
|
160
|
+
纵深防御:
|
|
161
|
+
- 多层安全控制
|
|
162
|
+
- 单点失效不致命
|
|
163
|
+
|
|
164
|
+
最小权限:
|
|
165
|
+
- 仅授予必要权限
|
|
166
|
+
- 定期审查权限
|
|
167
|
+
|
|
168
|
+
安全默认:
|
|
169
|
+
- 默认拒绝
|
|
170
|
+
- 显式允许
|
|
171
|
+
|
|
172
|
+
失败安全:
|
|
173
|
+
- 失败时拒绝访问
|
|
174
|
+
- 不泄露敏感信息
|
|
175
|
+
|
|
176
|
+
分离职责:
|
|
177
|
+
- 关键操作需多人
|
|
178
|
+
- 开发/运维分离
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
## 安全架构检查清单
|
|
182
|
+
|
|
183
|
+
```yaml
|
|
184
|
+
认证:
|
|
185
|
+
- [ ] 实施 MFA
|
|
186
|
+
- [ ] 密码策略
|
|
187
|
+
- [ ] 会话管理
|
|
188
|
+
- [ ] 账户锁定
|
|
189
|
+
|
|
190
|
+
授权:
|
|
191
|
+
- [ ] 最小权限
|
|
192
|
+
- [ ] RBAC/ABAC
|
|
193
|
+
- [ ] API 授权
|
|
194
|
+
|
|
195
|
+
数据保护:
|
|
196
|
+
- [ ] 传输加密 (TLS)
|
|
197
|
+
- [ ] 存储加密
|
|
198
|
+
- [ ] 密钥管理
|
|
199
|
+
|
|
200
|
+
日志审计:
|
|
201
|
+
- [ ] 安全事件日志
|
|
202
|
+
- [ ] 访问日志
|
|
203
|
+
- [ ] 日志保护
|
|
204
|
+
|
|
205
|
+
网络:
|
|
206
|
+
- [ ] 网络分段
|
|
207
|
+
- [ ] 防火墙规则
|
|
208
|
+
- [ ] WAF
|
|
209
|
+
```
|
|
210
|
+
|