ydsveluvolu2996/Sutra

GitHub: ydsveluvolu2996/Sutra

Sutra 是一个面向 MSP 的多租户 AWS CMDB 与云安全态势管理平台,提供跨客户账户的只读资源清单、配置合规检查和证据驱动的安全发现。

Stars: 0 | Forks: 0

# Sutra Sutra 是一个多租户 MSP AWS 的生产级基础架构基石 配置管理数据库 (CMDB) 和云安全态势管理 (CSPM) 服务。首个预定版本为 MSP 团队及其客户提供 只读清单、资源关系、有证据支撑的配置检查, 以及对发现结果的限定访问权限。 本仓库是一个实现基础,并以 EKS 为先的私有预览版形式存在, 而非一个正式发布 (GA)、经过独立渗透测试或提供服务等级协议 (SLA) 支持的 服务。它不能替代 Amazon Inspector、Amazon GuardDuty、AWS Security Hub、EDR agent 或人工事件响应。除了确定性的 配置检查外,私有预览版现在还通过绑定集群的摄取 路径,接受来自 Trivy Operator、Falco、Kyverno 和 Cilium/Hubble 的有限真实证据。缺失的遥测数据始终会被报告为未配置、部分或过期。 已验证的本地演练现在还包括租户范围的 Cost Explorer 证据; CUR 2.0 和 FOCUS 1.0 的摄取、分配、预算和异常信号; 版本化的、受限的公共 API v1;以及签名的双向 Jira/ServiceNow 同步。CMDB 查询/批注工作流、基于发现结果的案例管理、 受审批控制的合规性例外、有限的 CloudTrail LookupEvents 规范化/检测,以及针对 EBS、ENI、ALB/NLB、 KMS、DynamoDB 和 ECR 的扩展元数据收集器也已实现。Lambda 清单功能仍然保持关闭,因为 `ListFunctions` 可能会暴露环境变量的值。这些本地功能 并未通过下方列出的托管生产门控,因此不应将其视为 Cloudaware、GuardDuty、Inspector、Security Hub、SIEM、账单对账或 经过厂商认证的 ITSM 替代品。 托管的身份基础现在包含了真实的 Cognito/OIDC PKCE 回调 边界,以及受 MFA 保护的一次性组织邀请生命周期。 由于下文记录的剩余租户隔离、恢复、 速率限制和代理门控尚未完成,托管版本的发布仍被阻塞。 Kubernetes 私有预览版的能力矩阵、验证序列和剩余的 正式发布 (GA) 门控记录在 [`docs/enterprise-kubernetes-private-beta.md`](docs/enterprise-kubernetes-private-beta.md) 中。 ## 有限的首发版本范围 首个生产切片被特意设计为只读。 目标切片包含: - MSP 组织、客户工作区、成员资格、邀请以及明确的 客户级角色。 - 通过客户拥有的 IAM 信任角色进行的单账户接入,并配备唯一的 平台生成的 ExternalId 以及确切的厂商收集器主体。 - 规范化的、带时间戳的 AWS 资源清单、标签、关系、变更、 收集覆盖率和数据新鲜度。 - 对 EC2 和 VPC 网络、安全组、负载均衡器、 RDS、S3 配置元数据、ECS/EKS、IAM 元数据、CloudTrail 及相关的 账户级安全态势信号的初始收集。每个适配器在启用前, 必须附带分页、限流、权限、区域和部分结果测试。 - 版本化的、确定性的 CSPM 控制,包含证据、严重性理由、 `pass`/`fail`/`unknown`/`error` 结果、发现结果、抑制过期和审计 历史。 - 可选地以只读方式导入客户已启用的原生 AWS 安全服务的发现结果。 Sutra 不会启用或配置这些 计费服务。 - 在通过托管网关、托管密钥、交付工作进程和厂商沙箱门控后, 提供租户范围的公共 API 访问和 Jira/ServiceNow 案例同步。 明确不在首个切片范围内: - 资源变更、自动修复、shell 访问、`iam:PassRole`、凭据 创建,或客户账户中的任何其他变更操作。 - 相当于 Inspector 的主机/Lambda 依赖覆盖或托管漏洞 情报。已注册的 Kubernetes 集群可使用 Trivy 镜像/配置/SBOM 证据。 - 相当于 GuardDuty 的威胁情报、异常检测或托管检测 运营。Falco 运行时事件和受限的 Hubble 元数据是可选的集群 证据来源,并不等同于 GuardDuty 的功能。 - 相当于 Security Hub 的标准覆盖、委托管理、ASFF 联合或跨产品规范化。 - 客户计费、市场计量、SAML/SCIM、PSA 集成、数据 驻留选择或客户管理的密钥。本地 FinOps 分析和 Jira/ServiceNow 同步已实现,但它们并非计费级别的 对账或经厂商认证的生产集成。支持邮件、Slack 和 Teams 通知的配置/出箱功能,但提供商的投递 需要托管的密钥和工作负载身份适配器。 未来的资源管理必须是一个独立的修复平面,并使用不同的 客户角色、严格限定的单操作权限、试运行/diff、审批、 升级认证、幂等性、回滚指南以及不可变的前后 审计证据。绝对不能向 CMDB 收集器角色添加写入权限。 ## 架构 生产设计特意将面向互联网的控制平面 与 AWS 凭证和 STS 访问分离开来: ``` flowchart LR U["MSP and customer users"] --> C["Cloudflare control plane
UI, API, tenant authorization"] C --> D["D1
hot scoped state"] C --> Q["Durable queue / workflow"] Q -->|"signed, scoped job with opaque IDs"| B["AWS-hosted broker and collectors
workload IAM role"] B -->|"STS AssumeRole + unique ExternalId"| R["Customer-owned read-only IAM role"] R --> A["AWS metadata APIs"] B -->|"signed manifests and normalized evidence"| I["Authenticated ingestion"] I --> D I --> O["R2
bounded raw evidence"] ``` Cloudflare 控制平面负责用户交互、租户授权、CMDB 查询、发现结果查看和任务协调。D1 是热关系型索引;R2 是 计划中用于存储压缩的原始快照和大型证据的存储。 持久任务在 Web 请求之外处理收集和评估。 AWS broker 是一个独立的 AWS 托管服务(例如 Lambda、ECS 和/或 Step Functions),拥有自己的工作负载 IAM 角色。它在服务端 解析已注册的连接,获取短期的 STS 凭证,仅收集白名单中的元数据, 并且绝不会将凭证返回给控制平面或浏览器。代理端点必须 对控制平面进行身份验证,拒绝重放,强制执行租户/连接范围, 并对工作进行速率限制。浏览器、通用 Web 处理程序、D1 行或 Cloudflare 变量绝不能包含持久的厂商 AWS 访问密钥。 该图是托管的目标架构。本仓库实现了其本地 等价物:租户范围的控制平面 API、D1 快照、已签名的抗重放 环回代理边界、加密的连接材料、行为信任探测、 特定的服务清单适配器,以及租户范围的持久任务、 重试/退避、租约和 DLQ 原语。它尚未包含已部署的托管 队列/工作流工作进程、托管密钥服务、R2 证据路径、已部署的 AWS 工作进程集群,或生产多租户身份和授权平面。 ## 信任角色接入 预期的接入合同如下: 1. 经授权的 MSP 管理员创建一个待处理的连接。服务器 生成该连接唯一的高熵 ExternalId。 2. 客户审查并部署版本化的 CloudFormation 模板。其信任 策略指定确切的厂商收集器工作负载角色 ARN,并要求使用 生成的 ExternalId。它不能信任厂商账户根或 `*`。 3. AWS broker——而不是浏览器——解析存储的角色 ARN 和 ExternalId,调用 `AssumeRole`,然后要求 `GetCallerIdentity` 与已注册的账户和分区匹配。 4. 验证还必须证明,当 ExternalId 被省略或错误时,代入会失败。 通过任一负面探测的角色将被拒绝。 5. 临时的 STS 凭证仅保留在收集器内存中。它们永远不会被写入 D1/R2、队列、日志、追踪、浏览器响应或支持工件中。 6. 只有完整、经过身份验证和校验的集合才能替换当前的 CMDB 快照。部分或失败的运行不能淘汰未见的资源。 `infrastructure/customer-role.yaml` 中的模板是用于审查和 受控沙箱测试的设计工件。它不能证明厂商代理、租户 隔离、验证探测或运营控制已经存在。 ## 生产暂停:P0 门控 **在所有 P0 门控都已实现、经过独立测试并获得批准之前,请勿 将客户角色模板部署到生产 AWS 账户,不要注册 实际的生产角色 ARN,也不要接入生产客户数据。** 在此暂停期间, 请使用合成/样本数据或一次性沙箱。 最低限度的 P0 出口门控包括: | 领域 | 生产 AWS 访问权限所需的证据 | | --- | --- | | 身份 | 生产 OIDC/会话生命周期、MFA/升级策略、CSRF 保护、邀请过期和撤销 | | 租户隔离 | 集中的服务器授权以及对至少两个组织和客户的每个路由、任务、缓存、对象和导出进行的负面测试 | | AWS broker | 已部署的 AWS 工作负载身份、经过身份验证/抗重放的代理协议、固定的操作/角色白名单、短暂的 STS 会话,且无长期 AWS 密钥 | | 信任验证 | 规范的 ARN/账户/分区检查、限制性的 STS 会话策略、获取的角色/信任策略证明、`GetCallerIdentity`、相同字段的正确/缺失/错误 ExternalId 探测、禁用以及真实的本地注销测试。在实施两阶段的 AWS 端工作流之前,轮换将被拒绝。 | | 任务完整性 | 持久化发件箱/队列、受限的不透明 payload、租约、幂等性、重试/退避、截止时间、取消、DLQ 和经过审计的重放 | | CMDB 完整性 | 分页的收集器、模式/大小验证、清单/校验和、原子化完整运行提升、来源、部分覆盖和安全淘汰行为 | | 密钥和隐私 | 托管加密和密钥轮换、环境隔离、白名单日志/脱敏测试、保留/删除行为以及金丝雀凭据扫描 | | 控制质量 | 版本化的确定性规则、测试夹具、权限契约、缺失证据时的 `unknown`、误报说明和修复审查 | | 运营 | 监控/SLO、审计导出、备份/恢复和恢复演练、配额、事件响应、受损角色撤销以及客户注销运行手册 | | 发布保障 | 必需的 CI、依赖/IaC/密钥扫描、暂存和沙箱验收测试、威胁模型审查、渗透测试闭环以及明确的发布批准 | 完整的架构和验收标准位于 [`docs/architecture.md`](docs/architecture.md)、 [`docs/aws-integration.md`](docs/aws-integration.md) 和 [`docs/security-and-quality.md`](docs/security-and-quality.md) 中。 ## 本地开发 前提条件: - 当前的 Node.js 22 LTS 补丁(`>=22.13.0` 是包引擎的最低要求) - pnpm 11.13.1(仓库的标准安装输入是 `pnpm-lock.yaml`) ``` corepack enable corepack prepare pnpm@11.13.1 --activate pnpm install --frozen-lockfile pnpm pilot:setup pnpm dev:pilot ``` 打开 `http://localhost:3000/login`,使用 `pnpm local:bootstrap-token` 输出的一次性 令牌创建第一个本地所有者,并注册 MFA。然后打开 `http://localhost:3000/operations` 以运行并发布已签名的模拟账户 快照。设置过程会在被忽略的 `.dev.vars` 中创建权限受限的密钥,并在 被忽略的 `.sutra/` 下创建持久本地状态。Fixture 模式是默认设置, 不需要 AWS 账户。有关可靠的销售演练流程以及 独立的实时 AWS 沙箱流程,请参阅 [`docs/local-walkthrough.md`](docs/local-walkthrough.md)。 `DB` D1 绑定声明在 `.openai/hosting.json` 中,并由开发栈在本地进行模拟。 对于由真实持久化 PostgreSQL 数据库支持的笔记本电脑演练,Docker Desktop 可以同时运行 Web 应用程序、收集器和 PostgreSQL: ``` pnpm docker:up ``` 该命令会生成被忽略的高熵所有者/运行时数据库密钥,应用迁移, 并等待整个集群变得健康。有关重启持久化、 集成测试、备份、恢复和重置流程,请参阅 [`docs/local-postgres.md`](docs/local-postgres.md)。数据库卷、 运行时密钥、备份、AWS 清单和客户证据被刻意 排除在 Git 之外;GitHub 仅存储源代码和迁移,从不存储实时客户数据。 切勿在本地使用生产 AWS 访问密钥。真实的代理开发必须使用 隔离的沙箱 AWS 账户、工作负载身份或短期开发者联合身份, 以及独立的非生产角色和密钥。不要将真实的 RoleARN、ExternalId、 会话令牌、客户清单或发现证据粘贴到 `.env`、测试夹具、测试、 屏幕截图、日志、issue 或 pull request 中。 ## 仓库布局 | 路径 | 用途和当前状态 | | --- | --- | | `app/` | vinext/React 控制平面、真实的本地接入、仪表板、CMDB、发现结果、案例、安全事件、合规性、FinOps 和导出 | | `lib/` | 领域类型、加密/请求边界、payload 验证和控制定义 | | `db/` | Drizzle/D1/PostgreSQL 连接、同步、不可变快照、关系、发现结果、案例、例外、安全事件、成本审计仓库 | | `infrastructure/` | 用于受控沙箱使用的客户只读 IAM 角色模板 | | `services/aws-collector/` | 签名的环回代理、加密注册表、fixture/实时运行程序、STS 信任验证和 AWS 适配器 | | `docs/` | 生产架构、AWS 集成、威胁模型、质量门控和验收标准 | | `tests/` | 确定性的领域、API、仓库、租户隔离、收集器、Kubernetes 和渲染路由测试;存在针对性的负面隔离测试,但生产环境负载下的隔离和独立保障仍然是门控 | | `public/` | 静态资产和可下载的客户角色模板副本 | | `worker/`, `build/` | Cloudflare/vinext worker 和本地托管集成 | ## 验证 运行与 CI 相同的检查: ``` pnpm security:secrets pnpm typecheck pnpm typecheck:collector pnpm lint pnpm test pnpm test:kubernetes pnpm test:enterprise-security pnpm test:phase2 pnpm test:collector pnpm db:postgres:test pnpm build pnpm test:rendered ``` `pnpm verify` 会运行该完整序列。 CI 特意遵循了已检入的脚本和冻结的 pnpm 锁文件。通过 这些检查仅证明当前代码可以编译、lint、构建并通过其 当前的控制引擎和渲染路由测试;这并不满足 上述的生产 P0 门控。 ## 部署状态 `pnpm build` 会创建一个可部署的 Web 工件;它并不授权进行生产 发布。本仓库特意在 CI 中没有自动化的生产部署。开发、暂存和 生产环境必须使用独立的 Cloudflare 资源、 AWS 账户/主体、代理身份、加密/签名密钥、队列和数据 存储。部署自动化必须使用短期 OIDC 联合身份而不是 存储的云访问密钥,固定已审查工件的摘要,运行仅向前 (forward-only) 的 迁移,并要求对生产环境进行审批。 在解除 P0 暂停之前,请使用 fixture 模式或隔离的沙箱 AWS 账户。 精美的仪表板、成功的角色验证或单账户扫描并不能证明 具备了多租户生产就绪状态。 ## 路线图 请参阅详细的 [云运营对等路线图](docs/cloudaware-parity-roadmap.md), 了解涵盖当前本地试点、 本地交付的 CMDB、合规性、FinOps、公共 API 和 ITSM 切片、它们的 托管生产门控、更广泛的 AWS CSPM 和原生发现导入、修复、 SIEM/PSA 集成以及 Azure/GCP/Kubernetes 研究视野的已交付与未来能力矩阵。这是一份 排序文档,而不是 Cloudaware 对等声明或发布日期承诺。 1. **P0 安全基础:** 生产身份、成员资格和客户授权、 集中的授权、租户安全的仓库、审计/发件箱原语、 迁移和多租户负面测试。 2. **P0 AWS 连接:** 在沙箱账户中部署隔离的代理、经过身份验证的任务协议、 STS 信任探测、连接生命周期以及一个生产级的 VPC/安全 组收集器。 3. **CMDB 和控制:** 持久化同步/协调、清单来源和 关系、控制版本/评估/发现生命周期、覆盖率报告 以及初步审查的 CSPM 包。 4. **运营就绪:** 配额、可观测性、备份/恢复、保留和 删除、事件/注销运行手册、暂存负载/故障测试和安全 评估闭环。 5. **受控扩展:** 额外的收集器和原生 AWS 发现导入, 然后仅在衡量核心隔离和 可靠性边界之后,才引入集成和企业身份。 6. **独立的未来产品:** 具有独立写入角色的选择性修复; 仅在使用真实的清单/SBOM/CVE 流水线时提供包漏洞覆盖;以及 仅在使用所需的事件遥测和响应 运营时进行行为检测。 在更改租户、IAM、收集器、 控制或部署边界之前,请参阅 [`CONTRIBUTING.md`](CONTRIBUTING.md)。请通过 [`SECURITY.md`](SECURITY.md) 中的私密流程报告安全问题。
标签:AWS EKS, MITM代理, 云安全态势管理, 云资产管理, 前端应用, 多云管理平台, 多租户架构, 子域名突变, 测试用例, 程序员工具, 自动化攻击, 请求拦截, 配置管理数据库