📎 配套脚本附件正文未内嵌 · 共 2 个 · 点开可在线查看
📂 查看全部 761 个脚本附件 →
⚠️ 脚本内含明文凭据(与本页正文一致),请勿在公网环境直接运行。
本周实战

作业18 · Agent 出站白名单与密钥轮换

工具出站域名草案、审核签字、密钥轮换骨架。

作业18:Agent 出站白名单 · 审核业务策略 · 密钥轮换 Runbook(跟学 + Cursor)

作业目标:列出本环境 Agent 能调用的全部工具出站域名,做成白名单草案;写清审核未通过时的业务策略与签字链;Cursor 生成「密钥轮换 Runbook」骨架(填真实系统名)。

验收标准:

1. 白名单覆盖 OpenAPI 工具 + 工作流 HTTP + 后端二次出站(SSH/钉钉)

2. 能说明 L1/L2/L3 风险分级与审核挂掉时的业务降级

3. 审核签字表可执行(知道找谁签)

4. 密钥轮换 Runbook 骨架已生成,含 ≥8 类系统占位符

环境:207 Dify + 作业1/5/7 Agent 工具 API(8777/8779/8780)+ 作业2 工作流 8778。

HTML:docs/html_cursor/作业18_Agent出站白名单与密钥轮换_cursor.html

脚本:scripts_cursor/作业18_Agent出站白名单与密钥轮换/

白名单草案:作业18_Agent工具出站域名白名单草案_cursor.md

审核策略:作业18_出站审核与业务策略_cursor.md

密钥 Runbook:作业18_密钥轮换Runbook_cursor.md

结果:data/homework18/


目录

  1. 做完长什么样
  2. 学习路线
  3. Part A · 出站全景(两层)
  4. Part B · 白名单草案
  5. Part C · 审核挂了怎么办(签字)
  6. Part D · Cursor:密钥轮换 Runbook
  7. 完整程序
  8. 验收清单

做完长什么样

项值
Agent OpenAPI 出站192.168.110.207:8777/8779/8780
工作流出站192.168.110.207:8778
后端二次出站116.62.10.183:22/8000、oapi.dingtalk.com:443
白名单产物data/homework18/agent_egress_whitelist_draft.md
密钥 Runbook作业18_密钥轮换Runbook_cursor.md({{PLACEHOLDER}} 待填)

学习路线

text
A  理解两层出站:Dify→工具 API vs 工具 API→SSH/外网
B  跑 hw18_01 生成白名单,对照 OpenAPI yaml
C  读审核策略:谁签、挂了就降级什么
D  跑 hw18_02 生成密钥轮换骨架,填你们系统名

Part A · 出站全景(两层)

A1. 第一层:Dify Agent → HTTP 工具(经 ssrf_proxy)

flowchart LR
  USER[用户] --> DIFY[Dify api/worker]
  DIFY --> SSRF[ssrf_proxy :3128]
  SSRF --> T8777[207:8777 作业1]
  SSRF --> T8779[207:8779 作业5]
  SSRF --> T8780[207:8780 作业7]
  SSRF --> T8778[207:8778 作业2 工作流]
Agent / 应用工具OpenAPI serveroperationId
运维巡检 Agent(作业1)server_statushttp://192.168.110.207:8777getServerStatus
vLLM 健康检查(作业5)vllm_healthhttp://192.168.110.207:8779get_vllm_status, get_gpu_info, get_request_queue
vLLM 故障自愈(作业7)vllm_self_healhttp://192.168.110.207:8780detect_vllm_anomaly, restart_vllm_container, send_recovery_notification
客服意图路由(作业2)—(工作流 HTTP 节点)http://192.168.110.207:8778POST /ticket
播城行政问答无自定义 HTTP 工具—仅模型+知识库

A2. 第二层:207 FastAPI 后端 → 真实系统(白名单易漏)

后端二次出站用途
8779 / 8780116.62.10.183:22 SSHdocker inspect / restart / logs
8779116.62.10.183:8000 HTTPvLLM /metrics
8780 / 作业6oapi.dingtalk.com:443钉钉 Markdown 通知

结论:Agent 白名单不能只写 877x,必须包含 SSH 与外网 IM。

A3. 风险分级

级别定义本环境示例
L1 高可改生产状态 / 特权通道SSH restart vLLM
L2 中内网读操作 / 模拟写8777 查状态、8778 建模拟工单
L3 外网出公网钉钉 oapi

Part B · 白名单草案

B1. 生成

bash
python scripts_cursor/作业18_Agent出站白名单与密钥轮换/hw18_01_出站域名白名单.py

B2. 建议纳入 SSRF / 防火墙的核心条目

text
192.168.110.207:8777-8780    # Agent 工具 + 工单 API(可拆端口)
116.62.10.183:22             # 仅允许源 207(8779/8780 后端)
116.62.10.183:8000           # vLLM metrics
oapi.dingtalk.com:443        # 已审批 IM
DENY ALL ELSE

B3. 禁止默认放行

完整表见 作业18_Agent工具出站域名白名单草案_cursor.md。


Part C · 审核挂了怎么办(签字)

完整策略与签字表:作业18_出站审核与业务策略_cursor.md

C1. 三类审核

类型触发业务影响若 不通过
新增出站域名新 OpenAPI / 新工作流 URL不得上线该工具;Agent 继续用旧工具集
L1 高权工具SSH、restart、写生产默认拒绝;仅只读巡检可用
L3 外网域名钉钉以外新 SaaS不得调用;通知类走已审批钉钉

C2. 签字链(草案)

变更发起人审核批准
L2 内网新端口(877x 只读)平台运维业务产品负责人平台负责人
L1 SSH/重启类平台运维业务负责人 + 信息安全IT/CTO 授权(或值班授权单 24h)
L3 新外网域名平台运维信息安全 + 法务(涉数据出境时)平台负责人
密钥轮换 R2平台运维—平台负责人
密钥泄露 R1值班信息安全IT 负责人 + 通报业务

C3. 审核挂掉时的业务策略(执行口径)

  1. 不静默失败:工具调用返回明确错误「未通过安全审核」,写 Langfuse error_type=egress_denied
  2. Agent 降级:关闭未审批工具;Prompt 声明「当前仅支持问答/只读巡检」
  3. 工作流:HTTP 节点不得指向新 URL;已发布版本 回滚 到上一快照
  4. 临时紧急(P0 生产故障):L1 操作可走「24 小时临时授权单」— 值班经理 + 平台负责人 双签,事后 3 个工作日内补正式审核
  5. 记录:所有拒绝/临时放行写入 {{AUDIT_LOG}}(工单号、签字人、域名、过期时间)

Part D · Cursor:密钥轮换 Runbook

D1. 提示词

text
根据本仓库 LiteLLM、Langfuse、Dify、钉钉、GPU SSH、Xinference、Higress、PG/Redis,
生成密钥轮换 Runbook 骨架 Markdown,系统名用 {{PLACEHOLDER}},
含轮换分级、分系统步骤、验收、回滚、检查清单。
脚本名 hw18_02_密钥轮换Runbook骨架.py

D2. 运行

bash
python scripts_cursor/作业18_Agent出站白名单与密钥轮换/hw18_02_密钥轮换Runbook骨架.py \
  --org "播城科技" --platform-owner "平台组" --oncall "运维值班群" --write-doc

将 {{LITELLM_MASTER_KEY}}、{{AUDIT_LOG}} 等替换为你们真实名称与路径。


完整程序

文件作用
hw18_01_出站域名白名单.py扫描 OpenAPI + 补充 SSH/钉钉
hw18_02_密钥轮换Runbook骨架.py生成轮换 Runbook

验收清单


相关文档