基础设施流程演示文稿
输出:一个私有的 HTML Artifact,约 8 张幻灯片,适用于演示者讲解的会议。 图表传达核心含义,文字尽可能精炼。每一个块、箭头和声明都必须源自代码;不可依赖记忆或纯文档。
工作顺序:第 0 步:准备 → 第 1 步:调研并编写账本 → 第 2 步:构建 → 第 3 步:检查直到 0 problem(s) → 第 4 步:发布并报告。
第 0 步 — 准备
- 将
assets/template.html复制到一个临时路径。每次修订和发布都使用此路径,因此 Artifact URL 保持不变。 - 将第 1 步的账本放在其旁边的
ledger.txt中。assets/ledger.example.txt显示了格式;其中的 ID 和路径是示例。 - 在布局 SVG 之前,加载
artifact-diagramming技能。遵循 Artifact 页面契约(主题令牌,无文档类型,侧边栏)。
模板是一个带有工作示例的可用演示文稿:幻灯片引擎、播放/步进/重置逻辑、AWS 样式图块、账户和区域框、虚线辅助流程和品牌徽标图块。更改数据和坐标;不要重写引擎。
引擎事实:
player(svgId, prefix, steps, idleCaption)运行一个 Play 幻灯片。前缀''使用#play/#back/#next/#reset/#cap;'n'使用#nplay/…/#ncap(网络),'i'使用#iplay/…/#icap(IAM),'r'使用#rplay/…/#rcap(发布)。将其返回值推送到stops。一个步骤是{n:[节点ID], a:[箭头ID], c:'标题'};a可以为空。player()在window.__players中注册自身;scripts/check.py会读取它,因此请保留这行。tile(id,cx,cy,color,glyph,label,sub,side):side为假值(标签在下方)、'l'、't'或真值(右侧)。下方的标签会阻止垂直穿过该列的任何线条。将其移开。chipRow(cy, items, x0)在角色图块旁边绘制授权芯片。每个项目是[文本, 条纹颜色, id, deny?];每个芯片是一个.node,因此 Play 步骤可以高亮它,而deny?添加红色轮廓。芯片宽度为 360px;如果文本超出,检查会失败。- 箭头标记位于
body顶部一个隐藏但渲染的 SVG 中。永远不要在幻灯片内使用defs():在display:none幻灯片中的标记不会在其他幻灯片上绘制。 - 线条类:
.arr实心主流箭头(每一个都必须在 Play 步骤中);.arr deny红色虚线,用于显式 Deny 或权限边界;.mon虚线辅助流程;.deploy仓库到账户;.uses跨账户使用。路径仅使用绝对M H V L。 - 字形位于
G中:核心clock、ecs、lambda、ssm、kms、sqs、rpc、hash、cube、target;网络alb、nat、igw、ep、ec2、db、waf、r53、logs、user;身份role、gcp;发布branch、cloud;AIbrain;品牌github、vercel、discord、pagerduty、slack。品牌字形为白色:为图块赋予品牌颜色(github#24292f,vercel#000000,discord#5865F2,pagerduty#06AC38;slack使用彩色,图块 #ffffff)。仅将品牌添加为其实徽标路径。 - 网络、IAM、发布和矩阵幻灯片在模板中作为注释部分存在。取消注释该部分,填充
#net、#iam、#rel或.mx表格,并使用player()注册每个 Play。
第 1 步 — 在代码中调研系统(强制要求,绘图前执行)
调研部署分支:合并后应用到生产环境的分支。仅在与默认分支比较时注意差异;绘制生产环境运行的内容。如果仓库很大,可委派给一个子代理。请求其提供带文件路径的事实摘要。
- 阅读仓库的
AGENTS.md/README文件,然后是 IaC(Terraform、CDK 等)、服务代码、合约和部署文档。跟踪引用到的同级仓库。 - 决定图表必须展示的内容。 从用户询问的主要流程开始。列出其触及的元素,从端到端,只保留观众需要理解该流程的部分。典型元素类型:
- 运行时组件:任务、函数、服务、工作者、监视器、作业。
- 触发器:调度器、队列、事件、Webhook、用户。
- 数据和配置:参数存储、密钥、数据库、队列。
- 信任和签名:密钥存储、签名者、跨越边界的角色。
- 外部方:RPC/API 提供者、聊天/告警工具、链、第三方服务。
- 边界:账户、区域、网络、链上 vs 链下。 说明你省略了哪些元素以及原因。
- 对于保留的每个元素,在代码中找到图表所需的内容。 仅限成为块、箭头或标题的事实:启动它的内容;它读取的内容;它写入或发送的内容;谁为其签名或授权,以及使用什么;谁为其付费(费用、Gas、成本所有者;查找异常);它位于哪个边界内。
- 所有权。 制作一个账户 × 区域的表格,以及仓库 → 每个仓库在何处部署的内容,仅当系统有多个账户或多个区域时。如果没有,则跳过此表格和所有权幻灯片。
- 网络。 完整阅读网络 IaC:VPC 和子网(CIDR、AZ 数量、每个资源所在的层级)、路由表、NAT 和互联网网关、私有端点(以及私有 DNS 是否启用)、每个安全组和每个规则(源、端口、CIDR 或 SG 引用)、负载均衡器(内部或面向互联网、监听器默认操作)、CDN 来源类型、服务发现、堡垒机或其他人工访问、流日志。注意位于公共子网中的内容。注意哪些云 API 调用通过 NAT 离开,因为不存在端点。
在绘图之前将结果编写为边缘账本:每个安全组规则对和每个负载均衡器目标组一行,格式为
源 → 目的地 :端口 (文件:行)。在根目录及其调用的每个模块中搜索每个规则资源(对于 AWS:aws_vpc_security_group_ingress_rule、aws_vpc_security_group_egress_rule、ingress/egress块、aws_lb_target_group、aws_lb_listener、aws_vpc_endpoint)。不要根据摘要或记忆构建账本。 - IAM。 在根目录及其模块中搜索每个角色、策略、策略附件、策略文档、信任策略和权限边界。编写一个IAM 账本,每个角色一行:
角色 | 受信实体 + 每个条件 | 主要授权 | 显式拒绝、边界 | 文件:行。条件是观众需要了解的事实:OIDC 仓库 ID、引用、环境、ExternalId、SourceAccount、会话名称。然后选择:- 主要角色: 跨越边界(另一个账户、CI、客户)、可以更改基础设施或接触客户数据的角色。仅写入自己日志的角色将被省略(报告它们)。
- 关键策略(0-5): 显式 Deny 语句、权限边界、
*资源、iam:PassRole、跨账户sts:AssumeRole。引用 sid。如果不存在,则说明;不要编造。
- 发布路径。 阅读每个 CI 工作流:触发器(
pull_request或push、分支、paths)、CI 环境、其假设的角色、fork-PR 保护、应用前的构建步骤以及手动调度。阅读谁合并发布的仓库规则。对于应用镜像,阅读部署者角色(受信任的引用、它们可以推送和更新的内容)以及 IaC 是否忽略任务定义更改。此仓库之外的应用仓库工作流标记为 UNCONFIRMED,除非你阅读了它们。 - 数据存储。 列出每个存储客户数据、审计数据或密钥数据的存储:数据库、存储桶、IaC 状态、日志组、密钥存储。对于每个:加密密钥(客户 KMS、云管理、存储管理)和 TLS、保留(备份、对象锁定、版本控制、生命周期、日志天数、删除保护、密钥恢复窗口)、可用性(多 AZ、另一区域或账户中的副本)、暴露、谁可以读取数据(不包括配置)(包括 CI 在其拒绝之后)、以及审计(数据事件、数据库日志)。将每个单元格评级为强、部分或差距,并带有文件:行。
- 实时状态。 对于每个计算元素,读取其期望数量(或副本、或调度)及其前面的门(WAF 默认操作、监听器规则、功能标志)。处于零或边缘阻止的服务为已停放;演示文稿会说明。
- 公共暴露。 搜索
public_access_block、principals中的 `