内容
# cloud-sentinel-mcp
[](https://github.com/sunilp303/cloud-sentinel-mcp/actions/workflows/ci.yml)
[](https://www.python.org/downloads/)
[](https://modelcontextprotocol.io)
[](LICENSE)
> 通过 [模型上下文协议(MCP)](https://modelcontextprotocol.io) 实现的 AI 原生云安全态势分析器。
> 直接从 Claude 或任何 MCP 客户端扫描 Kubernetes 清单、Dockerfile 和 AWS IAM 策略中的配置错误。
---
## 什么是 cloud-sentinel-mcp?
**cloud-sentinel-mcp** 是一个无状态的 MCP 服务器,通过结构化的 AI 工具公开云安全分析。将其连接到 Claude Desktop 或 Claude Code,然后询问:
> *"扫描此 Kubernetes 部署是否存在安全问题"*
> *"我的 Dockerfile 是否遵循 OWASP 容器前 10 名?"*
> *"如果 payment-service 宕机,爆炸半径是多少?"*
该服务器实施了现实世界中的安全检查,包括:
- **CIS Kubernetes 基准 v1.8** — 9 个 pod-spec 和 RBAC 控制
- **OWASP 容器前 10 名** — 10 个 Dockerfile 检查
- **AWS IAM 最小权限 / NIST AC-6** — 7 个 IAM 策略模式
- **谷歌 SRE 书** — 爆炸半径和错误预算分析
所有检查都在**本地进行,无需任何凭证** — 适用于 CI 管道、安全审查和开发人员反馈循环。
---
## 架构
```
┌─────────────────────────────────────────────────────────┐
│ MCP 客户端(Claude) │
│ "扫描此 K8s 清单是否存在 CIS 基准违规" │
└──────────────────────────┬──────────────────────────────┘
│ MCP 协议(stdio)
▼
┌─────────────────────────────────────────────────────────┐
│ cloud-sentinel-mcp 服务器 │
│ │
│ ┌──────────────┐ ┌───────────────┐ ┌──────────────┐ │
│ │ 工具 │ │ 资源 │ │ 提示 │ │
│ │ │ │ │ │ │ │
│ │ 分析 k8s │ │ cis-k8s-bench │ │ 安全审查 │ │
│ │ 分析 │ │ owasp- │ │ │ │
│ │ dockerfile │ │ container-10 │ │ │ │
│ │ 分析 iam │ │ iam-patterns │ │ 事件响应 │ │
│ │ 爆炸半径 │ │ │ │ │ │
│ └──────┬───────┘ └───────────────┘ └──────────────┘ │
│ │ │
│ ┌──────▼────────────────────────────────────────────┐ │
│ │ 安全规则引擎 │ │
│ │ kubernetes.py │ dockerfile.py │ iam.py │ │
│ │ blast_radius.py │ │
│ └───────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────┘
```
---
## MCP 功能
### 工具
| 工具 | 描述 | 检查 |
|------|-------------|--------|
| `analyze_kubernetes_manifest` | 扫描 K8s YAML 文件中的安全配置错误 | CIS K8s 基准 v1.8 §5.x |
| `analyze_dockerfile` | 扫描 Dockerfile 中的最佳实践违规 | OWASP 容器前 10 名 |
| `analyze_iam_policy` | 分析 AWS IAM 策略中的最小权限违规 | NIST AC-6,CIS AWS 基础 |
| `estimate_blast_radius` | 估计服务故障的下游影响 | SRE 故障隔离,SLO 影响 |
### 资源
| URI | 内容 |
|-----|---------|
| `security://cis-k8s-benchmarks` | CIS Kubernetes 基准 v1.8 控制摘要 |
| `security://owasp-container-top10` | OWASP Docker/容器前 10 名描述 |
| `security://iam-policy-patterns` | AWS IAM 危险模式参考表 |
### 提示
| 名称 | 描述 |
|------|-------------|
| `security-review` | 完整的姿态审查 — 接受任何工件类型 |
| `incident-response` | SRE 事件分类运行手册模板 |
---
## 安全规则参考
### Kubernetes (`analyze_kubernetes_manifest`)
| 规则 ID | 严重程度 | 检查 | CIS 控制 |
|---------|----------|-------|-------------|
| K8S-SEC-001 | 关键 | 特权容器 | §5.2.1 |
| K8S-SEC-002 | 关键 | 以 root 运行的容器 | §5.2.6 |
| K8S-SEC-003 | 高 | 缺少 CPU/内存限制 | §5.2.4 |
| K8S-SEC-004 | 高 | 未禁用 automountServiceAccountToken | §5.1.6 |
| K8S-SEC-009 | 高 | 未禁用 allowPrivilegeEscalation | §5.2.5 |
| K8S-SEC-005 | 中 | 可写根文件系统 | §5.2.3 |
| K8S-SEC-006 | 中 | 缺少存活/就绪探测 | — |
| K8S-SEC-007 | 低 | 镜像使用可变标签 | NIST SP 800-190 |
| K8S-RBAC-001 | 关键 | cluster-admin 角色绑定 | §5.1.1 |
| K8S-RBAC-002 | 高 | RBAC 中的通配符动词/资源 | §5.1.3 |
### Dockerfile (`analyze_dockerfile`)
| 规则 ID | 严重程度 | 检查 | OWASP 控制 |
|---------|----------|-------|---------------|
| DF-SEC-001 | 关键 | 没有非 root USER 指令 | D01 |
| DF-SEC-003 | 关键 | ENV 中硬编码的秘密 | D06 |
| DF-SEC-002 | 高 | 基础镜像使用可变标签 | D02 |
| DF-SEC-008 | 高 | ARG 指令中的秘密 | D09 |
| DF-SEC-009 | 高 | curl-pipe-shell 模式 | D07 |
| DF-SEC-004 | 中 | 使用 ADD 而不是 COPY | D09 |
| DF-SEC-005 | 中 | 缺少 HEALTHCHECK | D10 |
| DF-SEC-006 | 低 | 单阶段构建 | D07 |
### IAM 策略 (`analyze_iam_policy`)
| 规则 ID | 严重程度 | 检查 | 参考 |
|---------|----------|-------|-----------|
| IAM-001 | 关键 | Action:* on Resource:*(完全管理) | NIST AC-6,CIS §1.16 |
| IAM-002 | 高 | 通配符操作 | NIST AC-6 |
| IAM-003 | 高 | 资源:* 上的敏感写入操作 | NIST AC-6(9) |
| IAM-006 | 高 | 没有条件的 iam:PassRole | AWS 最佳实践 |
| IAM-004 | 中 | NotAction 逆转 | NIST AC-3 |
| IAM-005 | 中 | NotResource 逆转 | NIST AC-3 |
| IAM-007 | 中 | 没有 MFA 条件的情况下敏感操作 | CIS AWS §1.14 |
---
## 快速入门
### 选项 1:pip 安装
```bash
git clone https://github.com/sunilp303/cloud-sentinel-mcp
cd cloud-sentinel-mcp
pip install -e .
python -m cloud_sentinel.server
```
### 选项 2:Docker
```bash
docker run --rm -i ghcr.io/sunilp303/cloud-sentinel-mcp:latest
```
### 选项 3:uv(推荐)
```bash
uvx --from git+https://github.com/sunilp303/cloud-sentinel-mcp cloud-sentinel
```
---
## Claude Desktop 集成
将以下内容添加到 `~/Library/Application Support/Claude/claude_desktop_config.json`(macOS)或
`%APPDATA%\Claude\claude_desktop_config.json`(Windows):
```json
{
"mcpServers": {
"cloud-sentinel": {
"command": "python",
"args": ["-m", "cloud_sentinel.server"],
"env": {}
}
}
}
```
然后重启 Claude Desktop。现在可以直接在对话中使用所有工具。
---
## Claude Code 集成
```bash
claude mcp add cloud-sentinel -- python -m cloud_sentinel.server
```
---
## 示例用法
### 扫描示例坏部署
询问 Claude:
> *"使用 analyze_kubernetes_manifest 扫描此清单:"*
然后粘贴 [`examples/bad-deployment.yaml`](examples/bad-deployment.yaml) 的内容。
**示例输出:**
```json
{
"target": "Deployment/vulnerable-app",
"passed": false,
"summary": {
"CRITICAL": 2,
"HIGH": 3,
"MEDIUM": 3,
"LOW": 1,
"INFO": 1
},
"findings": [
{
"rule_id": "K8S-SEC-001",
"severity": "CRITICAL",
"title": "容器 'app':启用特权模式",
"description": "特权容器对主机内核具有完全访问权限...",
"remediation": "删除 securityContext.privileged: true...",
"reference": "CIS Kubernetes 基准 v1.8 §5.2.1"
},
...
]
}
```
### 估计爆炸半径
```
analyze_kubernetes_manifest: 如果 payment-service 失败会发生什么?
```
### 触发 security-review 提示
在 Claude Code 中:`/mcp__cloud-sentinel__security-review`,并提供您的清单内容。
---
## 开发
```bash
# 安装开发依赖
pip install -e ".[dev]"
# 运行测试
pytest tests/ -v
# 校验
ruff check src/ tests/
# 类型检查
mypy src/
```
### 项目结构
```
src/cloud_sentinel/
├── server.py # MCP 服务器 — 注册工具、资源、提示
├── models.py # Pydantic 模型:Finding、Severity、ScanResult
├── tools/
│ ├── kubernetes.py # CIS K8s 基准检查
│ ├── dockerfile.py # OWASP 容器前 10 名检查
│ ├── iam.py # AWS IAM 最小权限检查
│ └── blast_radius.py # SRE 爆炸半径分析
├── resources/
│ └── benchmarks.py # CIS/OWASP/IAM 参考数据
└── prompts/
└── templates.py # security-review + incident-response 模板
```
---
## 为什么使用 MCP?
[模型上下文协议(MCP)](https://modelcontextprotocol.io) 是 Anthropic 的开放标准,用于为 LLM 提供结构化的工具、数据和提示访问。 与临时函数调用不同,MCP 提供:
- **可发现性** — 客户端在运行时枚举工具/资源
- **可组合性** — 在一个 Claude 会话中组合多个 MCP 服务器
- **标准化** — 一个服务器适用于 Claude Desktop、Claude Code 和任何 MCP 兼容的客户端
- **设计无状态** — 每个工具调用都是独立的,使服务器水平可扩展且易于容器化
---
## License
MIT — 见 [LICENSE](LICENSE)。