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 Architecture](https://img.shields.io/badge/Architecture-Zero%20Trust-blue) ![Istio](https://img.shields.io/badge/Service%20Mesh-Istio-blue) ![Kubernetes](https://img.shields.io/badge/Platform-Kubernetes-blue) ## 🎯 概述 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, 可观测性, 子域名突变, 微服务安全, 授权, 服务网格, 生产级应用, 监控, 网络安全, 自定义请求头, 访问控制, 请求拦截, 链路追踪, 限流, 隐私保护, 零信任架构