RealPhantomLee/azure-security-monitoring-lab
GitHub: RealPhantomLee/azure-security-monitoring-lab
一个端到端的 Azure 安全加固与监控实验室,通过 NSG 加固、集中化日志、KQL 检测和告警规则实现完整的云安全运营流程。
Stars: 0 | Forks: 0
# Cell B — Azure 安全加固与监控实验室
**端到端的 Azure 安全:NSG IP 白名单限制、仅限密钥的 SSH、通过 Azure Monitor Agent 将 syslog 集中接入 Log Analytics、针对 SSH 成功/失败/暴力破解的 KQL 检测,以及针对暴力破解阈值和心跳停滞的告警规则。**
这是 Cloud Cells 系列的 **Cell B** — 参见[相关项目](#related-projects)。
## 生命周期
```
Provision → Harden → Monitor → Detect → Respond → Improve
```
本实验室涵盖了 Azure 中完整的安全运营生命周期:搭建基础设施(Cell A),对其进行加固(NSG、仅限密钥的 SSH),为其安装监控工具(Log Analytics + AMA + DCR),编写 KQL 检测规则,配置告警,并通过触发告警来进行验证。
## 构建与验证的内容
| 能力 | 实现方式 | 验证证据 |
|------------|----------------|-------|
| 网络暴露控制 | NSG `nsg-cloudcells-mgmt` 配置了限定为 `/32` 的 `Allow-SSH-MyIP` | NSG 规则截图 |
| 仅限密钥的 SSH 访问 | 禁用密码认证;要求使用 SSH 密钥 | sshd_config + 登录证明 |
| 集中化日志记录 | Log Analytics Workspace `law-cloudcells-b` + AMA + DCR `dcr-cloudcell-b-linux`(`LOG_AUTH`, `LOG_AUTHPRIV`) | DCR + LAW 截图 |
| 心跳验证 | Heartbeat 表格返回了 VM 行记录 | KQL 输出截图 |
| Syslog 验证 | Syslog 表格返回了 auth / authpriv 行记录 | KQL 输出截图 |
| SSH 成功检测 | 在 `Syslog` 上针对 `Accepted publickey/password` 进行 KQL 查询 | KQL 输出 |
| SSH 失败检测 | 在 `Syslog` 上针对 `Invalid user`, `Failed publickey/password` 进行 KQL 查询 | KQL 输出 |
| 暴力破解检测 | 阈值查询:5分钟内失败次数 ≥ 5 次 | KQL 输出 + 触发的告警 |
| 心跳停滞告警 | 当 `LastSeen < ago(5m)` 时触发 `heartbeat-stale-5m` Sev 3 | 告警详情截图 |
## 环境
- 资源组:`rg-cloudcells-a`
- VM:`vm-mgmt-ubuntu-01`
- 公网 IP:``(请替换为您部署时分配的 IP)
- 内网 IP:`10.0.2.4`
- NSG:`nsg-cloudcells-mgmt`
- 规则:`Allow-SSH-MyIP` (22/TCP)
- 源 IP:`/32`(必须在 IP 变更时进行更新)
- 目标 IP:`10.0.2.4`
## 检测 (KQL)
完整查询位于 [`logs/detections.md`](logs/detections.md):
- Heartbeat 接入检查
- SSH 成功(`Accepted publickey/password`)
- SSH 失败(`Invalid user` / `Failed publickey/password`)
- 暴力破解阈值查询(5分钟内失败次数 ≥ 5 次)
## 告警
完整规则定义位于 [`alerts/alert-rules.md`](alerts/alert-rules.md):
| 告警 | 严重程度 | 触发条件 |
|-------|----------|---------|
| `ssh-bruteforce-5in5m` | Sev 3 | KQL 暴力破解查询返回结果 > 0 |
| `heartbeat-stale-5m` | Sev 3 | `LastSeen < ago(5m)`(agent 停止报告) |
## 证据
截图位于 [`screenshots/`](screenshots/) — 关键的验证产物:
- 显示 SSH 限制为 `/32` 的 NSG 规则
- Network Watcher **IP Flow Verify = Allowed**
- DCR 创建 + LAW 工作区创建
- KQL 查询结果(Heartbeat / Syslog / SSH 成功 / SSH 失败)
- 触发的告警及告警详情面板
## 简历要点
可直接复制/粘贴:
- 通过 NSG IP 白名单限制入站 SSH 并强制实施仅限密钥的认证,从而加固了 Azure VM 的访问安全。
- 使用 Azure Monitor Agent + Data Collection Rule 将 Linux 认证日志集中接入 Log Analytics Workspace。
- 构建并验证了针对 SSH 成功/失败的 KQL 检测,并针对暴力破解行为和心跳停滞配置了告警规则。
## 仓库结构
| 路径 | 用途 |
|------|---------|
| [`hardening/`](hardening/) | NSG 配置和 SSH 加固说明 |
| [`monitoring/`](monitoring/) | Log Analytics + AMA + DCR 设置 |
| [`logs/detections.md`](logs/detections.md) | KQL 检测(heartbeat、SSH 成功/失败、暴力破解) |
| [`alerts/alert-rules.md`](alerts/alert-rules.md) | 告警规则定义 |
| [`incident-simulation/`](incident-simulation/) | 触发告警的暴力破解演练 |
| [`remediation/`](remediation/) | 响应措施与经验教训 |
| [`screenshots/`](screenshots/) | 验证产物 |
| `lessons-learned.md` | 实践笔记 |
| `review_cellb.sh` | 自我审查检查器 |
## 相关项目
- [azure-fundamentals-cell](https://github.com/RealPhantomLee/azure-fundamentals-cell) — Cell A:基础设施(前置条件)
- **azure-security-monitoring-lab**(本仓库) — Cell B:加固 + 监控 + 检测
- [logging-siem-wazuh](https://github.com/RealPhantomLee/logging-siem-wazuh) — 本地部署的对应方案(Wazuh 单节点)
- [vulnerability-management-lab](https://github.com/RealPhantomLee/vulnerability-management-lab) — 本地部署的漏洞管理
## 作者
**RealPhantomLee Tucker** — [github.com/RealPhantomLee](https://github.com/RealPhantomLee)
标签:Azure, KQL, PB级数据处理, 安全运维, 应用安全, 系统加固