构建基于RAG的AWS VPC流日志分析器
Source: Dev.to

介绍
了解虚拟私有云 (VPC) 内的网络流量直接影响您的安全姿态、性能可视性和合规准备程度。然而,大多数团队仍然手动筛选原始流日志,对事件作出响应,而不是主动进行调查。
与其在成千上万的日志行中使用 grep 搜索或将数据导出到电子表格,我们可以将 VPC Flow Logs 转换为交互层。
如果您可以像这样直接向日志提问会怎样?
- 那个 SSH 连接被拒绝了吗?
- 哪个 IP 持续访问 443 端口?
- 这段流量是正常的还是有问题的?
在本文中,我们将构建一个由 Retrieval‑Augmented Generation (RAG) powered VPC Flow Log Analyzer,将静态网络遥测转化为交互式安全助手。
手动日志分析的挑战
AWS VPC Flow Logs 捕获网络流量的关键信息。然而,分析这些原始日志以检测威胁(例如 SQL 注入尝试或未授权访问)面临重大挑战:
- 信息过载 – 海量日志让人应接不暇。要在其中寻找特定模式或异常,就像在大海捞针。
- 上下文碎片化 – 原始日志缺乏上下文。跨不同组件和时间段识别相关数据包既费力又容易出错。
基于 RAG 的 VPC Flow Log Analyzer 通过以下技术解决这些问题:
- Streamlit – 交互式 UI
- LangChain – RAG 编排
- Chroma – 向量数据库
- OpenAI GPT‑4o – 推理引擎
最终,你将拥有一个对话式安全助理,能够回答诸如以下问题:
- “哪些 IP 被拒绝了?”
- “是否有异常流量访问 22 端口?”
- “哪些目标接收的包最多?”

Functional Components
| Component | Role | Implementation |
|---|---|---|
| Data Ingestion & Transformation(“Translator”) | 将原始 VPC Flow Log 字符串(例如 2 123... 443 6 ACCEPT)转换为人类可读的句子,例如 “Source 10.0.1.5 sent 1000 bytes to port 443 and was ACCEPTED.” | Custom Python parser |
| Embedding Model(“Encoder”) | 将每条日志句子转换为用于语义搜索的数值指纹(向量) | text‑embedding‑3‑small (OpenAI) |
| Vector Database(“Memory”) | 存储向量并提供快速相似度搜索 | ChromaDB (local) |
| RAG Orchestration & LLM(“Brain”) | 检索相关向量,将其与提示一起送入 LLM,并返回自然语言答案 | LangChain + GPT‑4o |
| Streamlit Frontend(“Cockpit”) | 用于上传日志、管理 API 密钥以及与助手聊天的 UI | Streamlit web framework |
实施步骤
1️⃣ 克隆仓库并设置虚拟环境
git clone https://github.com/Damdev-95/rag_aws_flow_logs
cd rag_aws_flow_logs
python -m venv venv
source venv/bin/activate # On Windows use `venv\Scripts\activate`
pip install -r requirements.txt

2️⃣ 配置环境变量
创建一个 .env 文件(或导出变量),其中包含你的 OpenAI API 密钥:
OPENAI_API_KEY=sk-XXXXXXXXXXXXXXXXXXXXXXXX
代码通过以下方式读取它:
import os
ENV_API_KEY = os.getenv("OPENAI_API_KEY")
3️⃣ 运行 Streamlit 应用
streamlit run app.py

一旦点击 Browse files,即可上传 VPC Flow Log(.txt)并开始提问。
期待的内容
- Upload a log file → 解析器将每行翻译成可读的句子。
- Embedding 步骤为每个句子创建向量并将其存储在 ChromaDB 中。
- Chat:输入自然语言查询;LangChain 获取最相关的向量,并将它们与系统提示一起发送给 GPT‑4o。
- Response:LLM 返回简洁的答案,可选地突出显示相关的日志条目。
进一步阅读与资源
- GitHub repository –
- Streamlit documentation –
- LangChain docs –
- ChromaDB –
- OpenAI embeddings –
祝你玩得开心! 🎯
日志文件格式
日志文件为 TXT 格式。
构建知识库的步骤
-
选择 “构建知识库” – 这将在原始日志数据转换为向量后,将其存储到向量数据库中。

-
向量数据创建 – 嵌入完成后,生成向量数据。

-
索引创建 – 嵌入过程完成后,成功创建索引。

示例查询
基于流量接受和拒绝的日志摘要是什么?

交互式的其他示例查询

最终结果

敬请关注我在云网络领域的更多 RAG 与生成式 AI 项目,阅读我的文章。我期待您的评论。
