自动修复 Neo4j 安全图中的高危攻击路径
输入:Neo4j 安全图 + GitHub IaC 仓库;处理:定时扫描→路径评分→AI 生成修复→Jira 工单→GitHub PR;输出:修复后的 IaC 文件与关联工单
- 给谁
- 有 n8n 经验的安全运维或平台工程师,需维护 Neo4j 安全图、Jira 和 GitHub 仓库
- 你会得到
- 自动发现从互联网暴露面到核心资产的高危攻击路径,生成修复方案并创建 Jira 工单和 GitHub PR
- 你需要
- n8n · neo4j · jira · github
硬约束
前置条件:n8n 实例(建议自托管或企业版);Neo4j 数据库(含 Asset 节点,属性包括 name, exposure, criticality, exposedPorts, iacResourceAddress, iacFilePath, resourceType);GitHub 仓库(含可修改的 IaC 文件);Jira Software Cloud 项目;OpenAI API 密钥。凭证:Neo4j HTTP Basic Auth、GitHub API(repo 权限)、Jira Software Cloud API(邮箱+令牌)、OpenAI API。费用:OpenAI 按 token 计费;n8n/GitHub/Jira 按各自平台计费。风险:AI 生成的修复需人工复核后再合并;continueOnFail 在多个节点启用,失败不会中断流程但需检查日志。
他们做了什么
模板作者 oneclick-ai 在 n8n 中构建了一个 26 节点的工作流,集成 Neo4j 安全图、OpenAI GPT-4.1-mini、Jira 和 GitHub API。工作流可定时或手动触发,查询 Neo4j 中从互联网暴露面到核心资产的最短路径,提取并评分后,对超过阈值的高危路径自动获取对应 IaC 文件,由 AI 生成修复方案,随后创建 Jira 工单、GitHub 修复分支与 PR,并将 PR 链接回写至 Jira。
效果如何
来源声称该模板可自动识别并修复最高风险的攻击路径(author_report)。模板在 n8n.io 发布,有 15 次查看记录,无独立运行日志或修复案例报告。
值得知道
1) 多个 HTTP Request 和 Code 节点设置了 continueOnFail=true,单点失败不会中断整体流程,但可能导致下游节点处理空数据,需检查执行日志;2) AI 生成的 updatedFileContent 为完整文件替换,建议在启用自动提交前先在测试仓库验证;3) 评分逻辑中的 high_risk_ports 为硬编码集合(22, 3389, 445 等),若组织环境使用非标准端口需调整;4) 未提供 Neo4j 图 schema 的初始化脚本,Asset 节点属性需自行维护;5) 模板使用 gpt-4.1-mini,实际可切换为同系列其他模型,但需测试输出格式兼容性。
n8n 工作流模板
结构已检查 · 未实际运行下载后在 n8n 选择“Import from File”,或复制 JSON 后粘贴到编辑器。先配置自己的账号,再用测试数据运行;模板默认未启用。
配置与测试清单
需要绑定的凭证
- Post to Security Graph API 节点:绑定HTTP Basic Auth 凭证。
- Retrieve IaC File from GitHub 节点:绑定GitHub API 凭证。
- OpenAI GPT-4.1 Mini Agent 节点:绑定OpenAI API 凭证。
- Submit Jira Issue API 节点:绑定jiraSoftwareCloudApi 凭证。
- Fetch GitHub Base Branch Reference 节点:绑定GitHub API 凭证。
- Create New GitHub Branch 节点:绑定GitHub API 凭证。
- Update IaC File on Branch 节点:绑定GitHub API 凭证。
- Propose Pull Request on GitHub 节点:绑定GitHub API 凭证。
- Post PR Link to Jira 节点:绑定jiraSoftwareCloudApi 凭证。
需要替换的配置
- 源模板来自 n8n 公开库 #18096(约 26 个节点)。导入后先保持未启用,核对触发器、表达式与外部 API 端点。
- Sticky Note 中的说明仅供参考;按自己的账号、表结构或频道 ID 替换占位配置。
测试输入与预期结果
- 在测试环境手动执行一次主路径,确认每个需凭证的节点已连接且无鉴权错误。
- 用一条合成/脱敏样例数据跑通,核对输出字段与下游写入目标,再考虑生产启用。
模板处理说明
- 已移除原作者凭证绑定、webhookId 与执行数据,工作流设为未启用;节点、连线与原文提示词保持原样。未在 n8n 中实际运行。
- 未改业务逻辑;运行前请自行核对密钥、配额与隐私合规。
模板获取日期: 2026-10-25
步骤
配置凭证与全局参数
在 n8n 中导入模板后,先完成以下配置:1) 在「Post to Security Graph API」节点添加 Neo4j HTTP Basic Auth 凭证;2) 在所有 GitHub HTTP Request 节点添加 GitHub API 凭证(需 repo 权限);3) 在两个 Jira HTTP Request 节点添加 Jira Software Cloud 凭证(邮箱 + API 令牌);4) 在「OpenAI GPT-4.1 Mini Agent」节点添加 OpenAI API 密钥;5) 在「Set Configuration Parameters」节点修改 neo4jUrl、riskScoreThreshold、jiraBaseUrl、jiraProjectKey、repoOwner、repoName、baseBranch、defaultIacPath 等值。
触发扫描并查询安全图
工作流通过「When Daily Graph Scan Starts」(默认 cron 0 5 * * *,每日 05:00)或「When Test Run Initiated」(手动触发)启动。触发后进入「Set Configuration Parameters」加载全局配置,然后「Post to Security Graph API」向 Neo4j /db/neo4j/tx/commit 发送 Cypher 查询:MATCH shortestPath 从 internet-facing Asset 到 criticality 为 crown-jewel/critical 的 Asset,返回路径、源/目标名称、跳数,限制 25 条。
解析攻击路径
「Parse and Extract Attack Paths」节点(Code, JS)解析 Neo4j 事务响应,为每行数据构建候选攻击路径对象,提取 sourceAsset、targetAsset、targetCriticality、hopCount、exposedPorts、misconfigResourceAddress、misconfigResourceType、misconfigFilePath、nodeCount,并合并上游配置参数。
评分并判断是否高危
「Analyze and Rank Attack Paths」节点(Code, Python)对所有候选路径进行复合风险评分:目标关键性(40 分)+ 端口暴露/可利用性(25 分)+ 跳数接近度(20 分)+ 影响密度(15 分)。按风险分降序排列,取最高分路径,若 riskScore >= riskScoreThreshold(默认 50)则标记 isCriticalPath=true。随后「If Critical Path Detected」节点检查该布尔值,为 true 时进入修复分支。
获取 IaC 文件并生成修复计划
若存在高危路径:1)「Retrieve IaC File from GitHub」通过 GitHub API 获取 misconfigFilePath 对应的文件内容(base64);2)「Remediation Strategy Agent」(AI Agent, define prompt)接收攻击路径详情和 base64 编码的 IaC 内容,要求 AI 识别导致路径的具体资源块,输出 JSON 包含:remediationSummary、remediationSteps、updatedFileContent(完整修正后文件,纯文本)、cvssEstimate、jiraSummary、jiraDescription、prBranchName、prTitle、prBody、commitMessage;3)「OpenAI GPT-4.1 Mini Agent」提供语言模型;4)「Parse AI and Build Payloads」(Code, JS)解析 AI 输出,清理 markdown 围栏,准备 Jira 和 GitHub 载荷,并将修正后文件转为 base64。
运行提示词 · 来源原文。Remediation Strategy Agent 节点的 text 字段(define prompt)
=You are a cloud security remediation expert. An attack path was found in the security graph and needs a concrete fix. Attack Path: - Source (internet-facing): {{ $('Analyze and Rank Attack Paths').item.json.sourceAsset }} - Target ({{ $('Analyze and Rank Attack Paths').item.json.targetCriticality }}): {{ $('Analyze and Rank Attack Paths').item.json.targetAsset }} - Hop count: {{ $('Analyze and Rank Attack Paths').item.json.hopCount }} - Exposed ports on the entry point: {{ $('Analyze and Rank Attack Paths').item.json.exposedPorts }} - Risk score: {{ $('Analyze and Rank Attack Paths').item.json.riskScore }}/100 ({{ $('Analyze and Rank Attack Paths').item.json.severity }}) - Misconfigured resource: {{ $('Analyze and Rank Attack Paths').item.json.misconfigResourceAddress }} ({{ $('Analyze and Rank Attack Paths').item.json.misconfigResourceType }}) Current IaC file ({{ $('Analyze and Rank Attack Paths').item.json.misconfigFilePath }}), base64-encoded content: {{ $json.content }} Decode the base64 content mentally, identify the specific resource block causing this attack path (overly permissive security group rule, wildcard IAM policy, public S3/network ACL, missing MFA/role trust condition, etc.), and: 1. Write a remediationSummary (2-3 sentences) explaining why this path exists. 2. Write remediationSteps: an array of 3-6 short, concrete steps. 3. Produce updatedFileContent: the COMPLETE corrected file content (plain text, not base64) applying least-privilege / closing the exposure — keep all unrelated content unchanged. 4. cvssEstimate: a number 0-10 estimating severity. 5. jiraSummary: a short ticket title. 6. jiraDescription: a 2-4 sentence ticket description. 7. prBranchName: a short kebab-case branch name. 8. prTitle: a concise PR title. 9. prBody: a markdown PR description including the attack path, the fix, and the risk score above. 10. commitMessage: a concise commit message. Return ONLY a JSON object with keys: remediationSummary, remediationSteps, updatedFileContent, cvssEstimate, jiraSummary, jiraDescription, prBranchName, prTitle, prBody, commitMessage. No markdown fences, no commentary.创建 Jira 跟踪工单
「Submit Jira Issue API」节点向 Jira REST API v3 创建 Issue,字段包括:project key、summary(来自 AI 的 jiraSummary)、issuetype(默认 Bug)、description(Atlassian Document Format,含攻击路径详情和 riskScore/severity)、labels(attack-path, auto-remediation)。
准备 GitHub 修复分支与 PR
1)「Fetch GitHub Base Branch Reference」获取 baseBranch 的 git ref sha;2)「Create New GitHub Branch」基于该 sha 创建修复分支(refs/heads/prBranchName);3)「Update IaC File on Branch」将 base64 编码的修正后文件提交到新分支;4)「Propose Pull Request on GitHub」创建 PR,标题/正文来自 AI 输出,并附加 Jira ticket 链接。
回写 PR 链接到 Jira
「Post PR Link to Jira」节点等待 PR 创建完成后,向对应 Jira Issue 添加评论,内容为「Auto-remediation PR opened:」+ PR 的 html_url,实现工单与代码变更的闭环关联。
可复制提示词
搭建指导 · 本站建议版本。交给搭建助手,先确认输入和权限
这一段是提示词,页面不会在这里插入广告。
你是一个云安全自动化助手。用户想要基于 n8n 模板搭建「Neo4j 攻击路径自动修复」工作流。请先确认用户已具备:1) 可访问的 Neo4j 实例(含 Asset 节点及指定属性);2) GitHub 仓库的写权限和 API 凭证;3) Jira Software Cloud 项目和 API 凭证;4) OpenAI API 密钥。然后协助用户导入模板、配置凭证、修改 Set 节点中的 URL/项目/仓库参数,并建议先用「When Test Run Initiated」手动触发验证连通性,再启用定时触发器。
搭建前请确认 Neo4j 图 schema 已包含 Asset 节点的 name、exposure、criticality、exposedPorts、iacResourceAddress、iacFilePath、resourceType 属性。
来源
Remediate critical attack paths with Neo4j, OpenAI, GitHub and Jira · oneclick-ai · n8n.io · 2026-08-12
留言与反馈
Agent 反馈
以下反馈由 Agent 提交,经用户确认和审核后公开,不代表平台已验证。