seguvera45-netizen/SecureMesh_web-2-
GitHub: seguvera45-netizen/SecureMesh_web-2-
SecureMesh 是一个基于 Kubernetes 和 Istio 构建的零信任微服务平台演示,实现了 mTLS 加密通信、细粒度访问控制及全链路可观测性。
Stars: 0 | Forks: 0
# SecureMesh - 零信任微服务平台
一个生产就绪的 Web 应用程序,展示了基于 Istio service mesh 的零信任架构,具有现代 React 前端、Node.js 微服务和全面的安全控制。



## 🎯 概述
SecureMesh 实现了完整的零信任安全模型,包括:
- **双向 TLS (mTLS)** - 加密的服务间通信
- **JWT 验证** - 对所有请求进行基于令牌的身份验证
- **RBAC** - 基于角色的访问控制,具备细粒度权限
- **速率限制** - 防止滥用和 DDoS 攻击
- **可观测性** - 使用 Prometheus、Grafana 和 Jaeger 进行全面监控
- **现代 UI** - 用于安全监控的 React + Tailwind CSS 仪表板
## 📁 项目结构
```
securemesh/
├── src/app/ # React Frontend
│ ├── components/ # Reusable UI components
│ │ └── Sidebar.tsx # Navigation sidebar
│ ├── contexts/ # React contexts
│ │ └── AuthContext.tsx # Authentication state
│ ├── layouts/ # Layout components
│ │ └── RootLayout.tsx # Main app layout
│ ├── lib/ # Libraries and utilities
│ │ └── supabase.ts # Supabase client
│ ├── pages/ # Application pages
│ │ ├── AuthPage.tsx # Login & Signup
│ │ ├── DashboardPage.tsx # System overview
│ │ ├── ServiceMonitorPage.tsx # Service health
│ │ ├── RequestAnalyzerPage.tsx # Request logs
│ │ └── SecurityControlPage.tsx # Security policies
│ ├── routes.tsx # Route configuration
│ └── App.tsx # App entry point
│
├── backend/ # Microservices
│ ├── auth-service/ # Authentication service
│ │ ├── src/index.js # Auth API
│ │ └── package.json # Dependencies
│ ├── user-service/ # User management
│ │ ├── src/index.js # User API
│ │ └── package.json
│ ├── order-service/ # Order processing
│ │ ├── src/index.js # Order API
│ │ └── package.json
│ └── payment-service/ # Payment processing
│ ├── src/index.js # Payment API
│ └── package.json
│
├── kubernetes/ # Kubernetes Manifests
│ ├── namespace.yaml # Namespace with Istio injection
│ └── deployments/ # Service deployments
│ ├── auth-service.yaml
│ ├── user-service.yaml
│ ├── order-service.yaml
│ └── payment-service.yaml
│
├── istio/ # Istio Configuration
│ ├── peer-authentication.yaml # mTLS enforcement
│ ├── request-authentication.yaml # JWT validation
│ ├── authorization-policies.yaml # RBAC rules
│ ├── virtual-services.yaml # Traffic routing
│ ├── destination-rules.yaml # Circuit breaking
│ ├── rate-limiting.yaml # Rate limits
│ └── egress-control.yaml # Egress policies
│
├── observability/ # Monitoring Configuration
│ ├── prometheus.yaml # Metrics collection
│ ├── grafana-dashboard.json # Dashboard definition
│ └── jaeger.yaml # Distributed tracing
│
└── docs/ # Documentation
├── SETUP.md # Setup instructions
├── ARCHITECTURE.md # Architecture details
└── DEPLOYMENT.md # Deployment guide
```
## 🚀 快速开始
### 前置条件
- **Node.js 18+** 和 **pnpm**
- **Docker** 和 **Kubernetes** (minikube, k3s 或云提供商)
- **Istio 1.20+**
- **kubectl** CLI
- **Supabase** 账户(用于身份验证)
### 1. 前端设置
```
# 安装依赖
pnpm install
# 配置 Supabase (可选 - 见下文)
# 创建包含 Supabase 凭证的 .env 文件
echo "VITE_SUPABASE_URL=your-project-url" > .env
echo "VITE_SUPABASE_ANON_KEY=your-anon-key" >> .env
# 启动开发服务器
pnpm run dev
```
**注意:** 前端可以使用模拟数据在没有 Supabase 的情况下工作。要启用真实的身份验证:
1. 从 **Make 设置页面** 连接您的 Supabase 项目
2. Supabase 将自动配置身份验证
### 2. 后端服务设置
```
# 为每个服务安装依赖
cd backend/auth-service && npm install
cd ../user-service && npm install
cd ../order-service && npm install
cd ../payment-service && npm install
# 设置 JWT secret (所有服务使用相同的 secret)
export JWT_SECRET="your-production-secret-key-change-this"
# 启动服务 (在单独的终端中)
cd auth-service && npm start # Port 3001
cd user-service && npm start # Port 3002
cd order-service && npm start # Port 3003
cd payment-service && npm start # Port 3004
```
### 3. Kubernetes 部署
```
# 安装 Istio
curl -L https://istio.io/downloadIstio | sh -
cd istio-*
export PATH=$PWD/bin:$PATH
istioctl install --set profile=demo -y
# 创建启用了 Istio 注入的 namespace
kubectl apply -f kubernetes/namespace.yaml
# 创建 JWT secret
kubectl create secret generic jwt-secret \
--from-literal=secret="your-production-secret-key" \
-n securemesh
# 部署服务
kubectl apply -f kubernetes/deployments/
# 应用 Istio 配置
kubectl apply -f istio/peer-authentication.yaml
kubectl apply -f istio/request-authentication.yaml
kubectl apply -f istio/authorization-policies.yaml
kubectl apply -f istio/virtual-services.yaml
kubectl apply -f istio/destination-rules.yaml
kubectl apply -f istio/rate-limiting.yaml
kubectl apply -f istio/egress-control.yaml
# 验证部署
kubectl get pods -n securemesh
kubectl get svc -n securemesh
```
### 4. 可观测性设置
```
# 部署 Prometheus
kubectl apply -f observability/prometheus.yaml
# 安装 Grafana
kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.20/samples/addons/grafana.yaml
# 导入 dashboard
kubectl create configmap grafana-dashboard \
--from-file=observability/grafana-dashboard.json \
-n istio-system
# 部署 Jaeger
kubectl apply -f observability/jaeger.yaml
# 访问 dashboard
kubectl port-forward -n istio-system svc/grafana 3000:3000
kubectl port-forward -n istio-system svc/jaeger-query 16686:16686
kubectl port-forward -n istio-system svc/prometheus 9090:9090
```
## 🔐 安全特性
### 1. 双向 TLS (mTLS)
所有服务间通信均使用 STRICT mTLS 模式进行加密:
```
apiVersion: security.istio.io/v1beta1
kind: PeerAuthentication
metadata:
name: default-mtls
namespace: securemesh
spec:
mtls:
mode: STRICT
```
### 2. JWT 验证
每个请求必须包含由 auth-service 颁发的有效 JWT 令牌:
- 边缘令牌验证
- 自动验证签名、过期时间和签发者
- 基于声明 (Claims) 的授权
### 3. 基于角色的访问控制 (RBAC)
基于用户角色的细粒度权限:
- **User role**:可以访问自己的资源
- **Admin role**:完全访问所有资源
- 强制执行服务间权限
### 4. 零信任模型
- 默认拒绝所有策略
- 每个服务的显式允许规则
- 最小权限访问
- 服务之间没有隐式信任
### 5. 速率限制
防止滥用:
- Auth service:100 请求/分钟
- Payment service:50 请求/分钟
- 每个服务可自定义限制
### 6. 出口控制
限制外部 API 访问:
- 仅允许白名单外部域名
- 默认阻止 (REGISTRY_ONLY 模式)
- 所有外部调用的审计跟踪
## 📊 监控与可观测性
### 指标
- 每个服务的请求量
- 错误率和状态码
- 延迟百分位数 (P50, P95, P99)
- mTLS 连接状态
- 熔断器事件
### 仪表板
- 服务健康概览
- 安全指标(认证拒绝、速率限制)
- 性能趋势
- 实时警报
### 分布式追踪
- 端到端请求追踪
- 服务依赖图
- 延迟瓶颈识别
- 错误传播分析
## 🎨 前端功能
### 身份验证页面
- 邮箱/密码登录
- 用户注册
- JWT 令牌管理
- 错误处理和验证
### 仪表板
- 系统健康概览
- 关键性能指标
- 活跃服务状态
- 最近的安全警报
### 服务监控器
- 实时服务健康
- 资源使用情况(CPU,内存)
- 请求速率和延迟
- 副本状态
### 请求分析器
- API 请求日志
- ALLOW/DENY 决策
- 按服务、状态、时间筛选
- 导出日志
### 安全控制面板
- 查看活动的 Istio 策略
- 用于测试的模拟模式
- 被阻止的请求历史
- 策略配置
## 🔧 配置
### 环境变量
**Frontend (.env):**
```
VITE_SUPABASE_URL=https://your-project.supabase.co
VITE_SUPABASE_ANON_KEY=your-anon-key
```
**Backend (所有服务):**
```
PORT=3001-3004 # Service port
JWT_SECRET=secret-key # JWT signing key (same for all)
NODE_ENV=production # Environment
```
### Istio 配置
在 `istio/` 目录中自定义安全策略:
- **mTLS 模式**:STRICT、PERMISSIVE 或 DISABLE
- **JWT 签发者**:配置受信任的身份验证提供者
- **RBAC 规则**:添加自定义授权策略
- **速率限制**:调整每个服务的限制
- **熔断器**:配置阈值
## 🧪 测试
### 测试 JWT 身份验证
```
# 获取 token
TOKEN=$(curl -X POST http://localhost:3001/api/v1/auth/login \
-H "Content-Type: application/json" \
-d '{"email":"admin@securemesh.io","password":"password"}' \
| jq -r '.token')
# 测试经过身份验证的请求
curl -H "Authorization: Bearer $TOKEN" \
http://localhost:3002/api/v1/users/profile
```
### 测试速率限制
```
# 发送大量请求以触发速率限制
for i in {1..150}; do
curl -X POST http://localhost:3001/api/v1/auth/login \
-H "Content-Type: application/json" \
-d '{"email":"test@example.com","password":"test"}'
done
```
### 测试熔断器
```
# 模拟服务故障
kubectl scale deployment payment-service --replicas=0 -n securemesh
# 触发熔断器
for i in {1..20}; do
curl -H "Authorization: Bearer $TOKEN" \
http://localhost:3003/api/v1/orders
done
```
## 📚 API 文档
### Auth Service (端口 3001)
- `POST /api/v1/auth/register` - 用户注册
- `POST /api/v1/auth/login` - 用户登录
- `POST /api/v1/auth/validate` - 验证 JWT 令牌
- `GET /health` - 健康检查
### User Service (端口 3002)
- `GET /api/v1/users/profile` - 获取当前用户
- `GET /api/v1/users/:userId` - 按 ID 获取用户
- `PUT /api/v1/users/:userId` - 更新用户
- `GET /api/v1/users` - 列出用户 (admin)
- `DELETE /api/v1/users/:userId` - 删除用户 (admin)
### Order Service (端口 3003)
- `GET /api/v1/orders` - 列出用户订单
- `GET /api/v1/orders/:orderId` - 获取订单详情
- `POST /api/v1/orders` - 创建订单
- `PUT /api/v1/orders/:orderId` - 更新订单
- `DELETE /api/v1/orders/:orderId` - 取消订单
### Payment Service (端口 3004)
- `POST /api/v1/payments/validate` - 验证支付方式
- `POST /api/v1/payments/charge` - 处理支付
- `GET /api/v1/payments/:paymentId` - 获取支付详情
- `GET /api/v1/payments` - 列出用户支付
- `POST /api/v1/payments/:paymentId/refund` - 退款 (admin)
## 🚀 生产环境部署
### Docker 镜像
构建并推送 Docker 镜像:
```
# 构建服务
docker build -t securemesh/auth-service:latest backend/auth-service
docker build -t securemesh/user-service:latest backend/user-service
docker build -t securemesh/order-service:latest backend/order-service
docker build -t securemesh/payment-service:latest backend/payment-service
# 推送到 registry
docker push securemesh/auth-service:latest
docker push securemesh/user-service:latest
docker push securemesh/order-service:latest
docker push securemesh/payment-service:latest
```
### Helm 部署(可选)
创建 Helm chart 以便于部署:
```
helm create securemesh
# 使用服务配置自定义 values.yaml
helm install securemesh ./securemesh -n securemesh
```
### 云部署
部署到托管的 Kubernetes:
- **AWS EKS**:使用 AWS Application Load Balancer
- **Google GKE**:在 GKE 插件上启用 Istio
- **Azure AKS**:通过 Azure CLI 安装 Istio
## 🔄 CI/CD 流水线
GitHub Actions 工作流示例:
```
name: Deploy SecureMesh
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Build and push images
run: |
docker build -t securemesh/auth-service:${{ github.sha }} backend/auth-service
docker push securemesh/auth-service:${{ github.sha }}
- name: Deploy to Kubernetes
run: |
kubectl set image deployment/auth-service \
auth-service=securemesh/auth-service:${{ github.sha }} \
-n securemesh
```
## 🛡️ 安全最佳实践
1. 定期轮换 JWT 密钥
2. 对敏感数据使用 Kubernetes secrets
3. 对所有 API 调用启用审计日志
4. 监控授权拒绝以发现可疑活动
5. 保持 Istio 更新到最新稳定版本
6. 实施备份和灾难恢复
7. 对容器镜像运行安全扫描
8. 除 Istio RBAC 外,还使用网络策略
## 📖 其他资源
- [Istio 文档](https://istio.io/latest/docs/)
- [Kubernetes 安全最佳实践](https://kubernetes.io/docs/concepts/security/)
- [零信任架构](https://www.nist.gov/publications/zero-trust-architecture)
- [Supabase 身份验证](https://supabase.com/docs/guides/auth)
## 📄 许可证
MIT License - 有关详细信息,请参阅 LICENSE 文件
## 🆘 支持
- 文档:`/docs` 目录
- 问题:GitHub Issues
- 安全:security@securemesh.io
使用 ❤️ 基于 React、Istio、Kubernetes 和零信任原则构建
标签:API集成, Dashboard, DDoS防护, DevSecOps, GNU通用公共许可证, Grafana, Istio, Jaeger, JWT, MITM代理, mTLS, Node.js, RBAC, React, Streamlit, StruQ, Supabase, Syscalls, WSL, 上游代理, 前后端分离, 双向TLS, 可观测性, 子域名突变, 微服务安全, 授权, 服务网格, 生产级应用, 监控, 网络安全, 自定义请求头, 访问控制, 请求拦截, 链路追踪, 限流, 隐私保护, 零信任架构