special1zt/ZT-GOVERNANCE-capstone
GitHub: special1zt/ZT-GOVERNANCE-capstone
这是一个面向AI代理的零信任架构原型,通过整合身份验证、态势验证和自动化事件响应,解决AI代理的安全治理问题。
Stars: 0 | Forks: 0
# AI 代理的零信任
本项目是一个面向AI代理的零信任实验室。其核心理念是,AI代理不应在没有任何实际监督的情况下,就被直接放入一个能访问API、工具和内部资源的环境中。
如果一个代理可以请求数据、与系统交互或做出决策,那么它就需要像可能影响环境的事物一样被管理。这意味着它应该有一个身份、一个角色、一个态势状态、日志记录,以及能够将其行为追溯到某个资产或事件的记录。
本实验室将AI代理视为受管配置项,而不仅仅是一个普通的脚本。代理不会仅因为拥有一个令牌就获得信任。其访问权限取决于身份、角色、态势,以及它是否被识别为 GLPI 中的活跃资产。
目标不是构建一个完美的企业产品,而是展示一个可行的模型,说明如何运用零信任理念来治理AI代理。
## 主要组件
## 我为什么构建这个
AI代理的行为开始越来越不像简单的聊天机器人,而更像自动化工作人员。它们可以跨系统调用API、检查数据、使用工具并做出决策。
这带来了安全问题。如果一个AI代理拥有访问权限,却没有明确的身份、没有资产记录、没有态势检查、没有事件追踪,那么它就会成为安全团队日后不得不追查的另一个未受管事物。
这个项目是我模拟一种更好方法的方式:
```
Keycloak
â
Resource API / Posture API
â
GLPI / CMDB
â
Logs
â
Splunk
â
alert_fwd
â
GLPI Incident Ticket
```
这是项目的核心。
## 研究问题
如何利用零信任安全模型,通过结合身份、态势验证、资产管理、API访问控制、SIEM检测和自动化事件响应来治理AI代理?
## 架构概述
实验室采用基本的零信任流程:
1. 代理通过 Keycloak 进行身份验证。
2. 代理请求一个受保护的 API 资源。
3. 资源 API 检查令牌和角色。
4. 资源 API 检查代理态势。
5. 态势检查确认代理在 GLPI 中是否健康且活跃。
6. 请求被允许或拒绝。
7. 决策被记录。
8. Splunk 可以检测可疑活动。
9. `alert_fwd` 接收警报并创建 GLPI 工单。
```
Authenticated â Posture Validated â Access Allowed
```
## 资源访问模型
API 资源按敏感度分级。
| 资源类型 | 用途 |
|---|---|
| 公开 | 用于基本测试的低风险端点 |
| 内部 | 需要有效的身份和良好的态势 |
| 敏感 | 用于测试更严格访问控制的高风险端点 |
| 蜜罐/诱饵 | 用于在被访问时证明检测和响应能力 |
蜜罐端点的存在并非因为项目需要虚假的密钥,而是为了展示可疑的代理行为可以被检测、记录并转化为事件。
## Qwen / Ollama 测试
Qwen 被用作测试的 AI 代理。为其赋予一个身份和任务,然后观察当代理尝试访问受保护资源时,系统的反应。
测试聚焦于三种基本情况:
### 允许的访问
代理访问了它应被允许使用的资源。
预期结果:
```
Authenticated â Posture Failed â Access Denied â Event Logged
```
### 拒绝的访问
代理通过了身份验证,但系统因态势或授权失败而拒绝了请求。
预期结果:
```
Decoy Access â Splunk Alert â alert_fwd â GLPI Ticket
```
### 诱饵访问
代理接触了蜜罐或敏感端点。
预期结果:
```
.
âââ agent OBSOLETE/ # Older agent work kept for reference
âââ alert_fwd/ # Micro-SOC alert forwarder for Splunk-to-GLPI tickets
âââ extras/ # Screenshots and prompts used during testing
âââ keycloak/ # Keycloak realm, identity, or setup files
âââ logs/ # API and test logs
âââ scripts/ # Setup, test, and helper scripts
âââ services/ # Main API services for resource access and posture checks
âââ splunk/ # Splunk configuration, searches, or detection notes
âââ wazuhOBSOLETE/ # Older Wazuh work kept for reference
âââ .env # Local environment variables, not for public commits
âââ docker-compose.yml # Local lab setup
âââ init-db.sql # Database initialization script
```
## 什么算作成功的演示
一个可行的演示应展示完整的链条:
1. 代理在 Keycloak 中拥有身份。
2. 代理在 GLPI 中作为受管资产存在。
3. 代理请求一个受保护的资源。
4. API 检查令牌、角色和态势。
5. 有效的请求被允许。
6. 被拒绝或可疑的请求被记录。
7. Splunk 检测到该事件。
8. `alert_fwd` 接收警报。
9. GLPI 获得一个与该代理关联的事件工单。
如果这行得通,项目就算成功。
## 示例场景
一个名为 `agent-dev-02` 的代理尝试访问一个内部资源。
系统检查:
- 令牌是否有效?
- 代理是否拥有正确的角色?
- 设备态势是否健康?
- 代理在 GLPI 中是否活跃?
- 该资源是否允许该代理访问?
如果代理态势检查失败,即使身份验证成功,请求也会被拒绝。
这是有意为之的。仅有身份并不等同于信任。
## 仓库结构
```
Keycloak
GLPI
Database services
Resource / posture APIs
Splunk
alert_fwd
```
有些文件夹标记为已过时,因为它们属于项目的早期版本。保留它们是作为参考,但当前的构建主要围绕 Keycloak、API 服务、GLPI、Splunk 和 `alert_fwd`。
## 设置说明
本项目构建为本地实验室。具体值取决于本地环境,但主要服务通过 Docker 和环境变量控制。
典型的本地服务包括:
```
Agent Request â Access Decision â Log Event â Splunk Alert â alert_fwd â GLPI Ticket
```
`.env` 文件存储本地值,如服务 URL、令牌和数据库设置。真实的密钥不应提交到公开仓库。
## 当前重点
当前的重点是让整个安全循环稳定运行:
当前工作包括:
- 验证 `agent-dev-02` 的态势检查
- 确认在态势健康时允许访问正常工作
- 确认拒绝的访问被正确记录
- 测试蜜罐端点
- 检查 Splunk 是否看到正确的事件
- 检查 `alert_fwd` 是否创建了正确的 GLPI 工单
- 保持 Qwen 提示足够一致以便重复测试
## 已知局限性
这仍然是一个原型实验室,而非生产系统。
一些局限性:
- 部分凭据为测试目的存储在本地。
- 工作负载身份是模拟的,而非完全生产级。
- 运行时隔离有限。
- 态势逻辑经过简化。
- 一些较旧的项目文件夹仍作为参考存在。
- Qwen/Ollama 的行为在不同运行间可能变化。
一个更强大的生产版本将需要更好的密钥处理、更强的运行时隔离、短期凭据、工作负载身份以及更成熟的 SIEM/SOAR 工作流。
## 最终目标
最终目标是展示AI代理可以使用已用于企业系统的相同安全理念来治理:
- 身份
- 态势
- 资产管理
- 访问控制
- 监控
- 检测
- 事件响应
本项目并非声称能解决所有AI安全问题。它展示了一个切实的起点,用于在AI代理成为另一个无人愿意负责的未受管系统之前,对其进行管理。
## 作者
Elton White
CIT481 顶点项目
标签:AI代理安全, AI风险缓解, API安全, CMDB治理, GLPI, JSON输出, Keycloak, SIEM检测, Streamlit, 人工智能安全, 代理治理, 健康检查, 占用监测, 合规性, 姿态验证, 安全信息事件管理, 安全架构, 网络安全, 自动化事件响应, 行为审计, 访问控制, 请求拦截, 资产管理, 身份管理, 逆向工具, 隐私保护, 零信任架构