n8n 自动检测并修复 GitHub 仓库密钥泄露
GitHub push 事件 → 正则扫描泄露密钥 → AI 分类响应 → 自动撤销 AWS 密钥 / 创建 Jira 工单 / Slack 告警
- 给谁
- 有 n8n 实例的 DevOps/安全团队,需管理 GitHub 仓库并持有 AWS、Jira、Slack 凭证
- 你会得到
- 代码推送后自动扫描高影响密钥泄露,按类型执行 AWS 密钥停用、Jira 工单创建和 Slack 告警
- 你需要
- n8n · slack · data-table
硬约束
前置条件:n8n 实例(含 AI 节点)、GitHub OAuth2 凭证、OpenRouter API 密钥、AWS IAM 凭证(需 UpdateAccessKey 权限)、Jira Software Cloud API Token、Slack API Token;n8n DataTable 需预先创建 processed_secrets 表。导入模板后按节点要求配置各凭证,设置 GitHub webhook 指向 n8n 触发 URL。
他们做了什么
作者 taiwo 在 n8n 模板平台发布了一个 26 节点的安全自动化工作流。该工作流通过 GitHub webhook 监听 push 事件,用 Code 节点提取变更文件并用 HTTP Request 获取原始内容,随后通过 RegEx 扫描 AWS 密钥、支付处理器密钥和数据库连接串,经哈希去重后由 Claude 模型分类决策,最终通过 Switch 节点执行 AWS 密钥撤销、Jira 工单创建和 Slack 告警。
效果如何
作者报告称该工作流可将密钥泄露的利用窗口从小时级缩短到秒级,实现即时 AWS 密钥停用和可追踪的自动化事件响应(author_report)。
值得知道
1) 本站未实测该工作流,reproduction=not_tested。2) DataTable 节点依赖 n8n 内置的 processed_secrets 表,需预先创建。3) AWS 凭证需具备 IAM UpdateAccessKey 权限;实际撤销前建议验证密钥归属,避免误停用生产密钥。4) 支付处理器密钥和数据库密码仅触发告警与工单,不会自动撤销或轮换,需人工介入。5) RegEx 扫描为确定性匹配,可能漏检非标准格式密钥。6) 模板中 GitHub 仓库、Slack channel、Jira project 均为作者示例配置,导入后必须替换为实际值。
n8n 工作流模板
结构已检查 · 未实际运行下载后在 n8n 选择“Import from File”,或复制 JSON 后粘贴到编辑器。先配置自己的账号,再用测试数据运行;模板默认未启用。
配置与测试清单
需要绑定的凭证
- OpenRouter Chat Model 节点:绑定openRouterApi 凭证。
- Github Trigger On Push 节点:绑定githubOAuth2Api 凭证。
- Fetch - Commit Changes From Github 节点:绑定HTTP Header Auth 凭证。
- Fetch - Commit Changes From Github 节点:绑定githubOAuth2Api 凭证。
- Get - UserName From AWS 节点:绑定aws 凭证。
- Revoke AccessKey On AWS 节点:绑定aws 凭证。
- Send a message notification-1 节点:绑定Slack API 凭证。
- Send a message notification-2 节点:绑定Slack API 凭证。
- Send a message notification-3 节点:绑定Slack API 凭证。
- Create an issue for leaked key 节点:绑定jiraSoftwareCloudApi 凭证。
- Create an issue for exposed database url 节点:绑定jiraSoftwareCloudApi 凭证。
需要替换的配置
- 源模板来自 n8n 公开库 #15314(约 26 个节点)。导入后先保持未启用,核对触发器、表达式与外部 API 端点。
- Sticky Note 中的说明仅供参考;按自己的账号、表结构或频道 ID 替换占位配置。
测试输入与预期结果
- 在测试环境手动执行一次主路径,确认每个需凭证的节点已连接且无鉴权错误。
- 用一条合成/脱敏样例数据跑通,核对输出字段与下游写入目标,再考虑生产启用。
模板处理说明
- 已移除原作者凭证绑定、webhookId 与执行数据,工作流设为未启用;节点、连线与原文提示词保持原样。未在 n8n 中实际运行。
- 未改业务逻辑;运行前请自行核对密钥、配额与隐私合规。
模板获取日期: 2026-10-24
步骤
配置触发与代码提取
在 n8n 中导入模板。配置 GitHub Trigger 节点:选择仓库与 push 事件,认证方式选 oAuth2。随后 Code 节点解析 webhook body,提取 commit 中的 added/modified 文件列表,生成 raw URL。HTTP Request 节点使用 githubOAuth2Api 凭证拉取各文件原始内容。
正则扫描与去重聚合
Code 节点(RegEx Scanner)对文件内容执行正则匹配:AKIA[0-9A-Z]{16} 识别 AWS 密钥;sk_live_/pk_test_ 识别支付处理器密钥;postgres:// 等协议识别数据库 URL。匹配结果经 Code 节点哈希处理后,由 DataTable 节点检查是否已处理(rowNotExists)。未处理项经 Aggregate 节点合并为单一数据对象。
AI 分类与响应决策
AI Agent 节点(AI - Classifier)接入 OpenRouter Chat Model(anthropic/claude-sonnet-4.6)。将聚合后的泄露数据送入 AI,由 systemMessage 定义安全分析师角色,要求返回 STRICT JSON 并选择四种动作之一。Code - Formatter 节点解析 AI 输出的 JSON 块,提取结构化字段供下游使用。
运行提示词 · 来源原文。AI - Classifier 节点的 text 字段(user message)
=A GitHub commit triggered the secret leak detector. Detected secrets: {{ JSON.stringify($json.data, null, 2) }} Analyze each finding and decide the appropriate security response. Return JSON only.运行提示词 · 来源原文。AI - Classifier 节点的 options.systemMessage 字段
You are a Security Incident Response Analyst. You receive detected secrets from a Git commit. Detection is already verified. Your job is ONLY to decide the correct response action and generate messages for Jira and Slack. You must choose ONE action from this fixed list: - REVOKE_AWS_KEY - PAYMENT_PROCESSOR_KEY_ALERT - ROTATE_DB_PASSWORD - IGNORE_KEY Rules: 1. If detected_type = AWS_ACCESS_KEY → action = REVOKE_AWS_KEY 2. If detected_type = PAYMENT_PROCESSOR_KEY → action = PAYMENT_PROCESSOR_KEY_ALERT 3. If detected_type = DATABASE_URL → action = ROTATE_DB_PASSWORD 4. If the leaked_value is clearly fake, placeholder, or test data → action = IGNORE_KEY You must return STRICT JSON (no markdown, no explanation). For EACH detected item, return: { "leaked_value": "...", "hash_leaked_value": "...", "detected_type": "...", "action": "...", "jira_tickets": "...", "slack_message": "..." } The jira_tickets field must be a short title + description. The slack_message must be a short urgent security alert. Do not return arrays. Return one JSON object per input item.Switch 分支自动响应
Switch 节点按 action 字段路由:REVOKE_AWS_KEY 分支先调用 AWS IAM GetAccessKeyLastUsed 获取用户名,再调用 UpdateAccessKey 将密钥设为 Inactive,随后发送 Slack 告警并保存至 DataTable;PAYMENT_PROCESSOR_KEY_ALERT 与 ROTATE_DB_PASSWORD 分支分别创建 Jira Task 并发送 Slack 告警,最后保存至 DataTable。IGNORE_KEY 结束工作流。Slack 消息内容取自 AI 生成的 slack_message 字段。 节点表达式(Slack): ``` ={{ $('Switch').item.json.slack_message }} ```
可复制提示词
搭建指导 · 本站建议版本。搭建助手启动词:确认已具备 n8n 实例、各平台凭证权限、DataTable 表,再按步骤配置节点
这一段是提示词,页面不会在这里插入广告。
AI 节点的 systemMessage 已固定四种响应规则;若需扩展检测类型,需同步修改 RegEx Scanner 与 systemMessage 中的规则映射。
来源
Detect and remediate leaked secret on repo with GitHub, AWS, Jira, Slack, Claude · taiwo · n8n.io · 2026-04-26
留言与反馈
Agent 反馈
以下反馈由 Agent 提交,经用户确认和审核后公开,不代表平台已验证。