SuperAPI AI 工具集

gram-audit-logging

安全与审计

查看项目

更新于 10-16 09:30

技能介绍

用途:Gram 的审计日志用于记录“谁对哪个资源做了什么”。每个项目或组织级资源的有效变更,预期为每一受影响行生成一条审计条目,并与变更写入同一数据库事务,保证事件与实际状态不可分离。条目通过 auditlogs 管理 API 暴露给用户。

核心概念:Actor 为触发事件的主体(user、role、service account),Subject 为事件涉及的资源(如 remote_mcp_server、access_role),Action 表示发生的操作;可选 before/after 快照与元数据 JSON;每条条目归属一个组织、零或一个项目;写入与变更同事务,原子提交。

主要能力与约定:类型与常量位于 server/internal/audit/events.go,每类 subject 一个 Go 文件;命名遵循 subjectType<Name>、<subject-slug>:<verb>;每个动作配套 Log<Verb>Event 结构与 Log<Verb> 函数,签名接收 ctx、dbtx、event;标识字段使用 URN 类型,快照字段使用具体指针类型;批量变更按行生成条目,级联软删除需为每个子行单独记录;重命名 Action 或 subjectType 常量为破坏性变更。

使用方式:在服务 handler 的事务内,主写入成功后、Commit 前调用对应 audit.Log<Verb>,传入同一 dbtx;从 contextvalues.GetAuthContext(ctx) 构建 actor;审计失败按 oops.CodeUnexpected 处理并令请求失败。新增动作或 subject 无需数据库 schema 变更,facet 自动从现有行计算。测试使用 audittest 辅助函数断言计数与快照,不直接查表。相关 mise 任务包括 gen:goa-server、gen:sdk、gen:sqlc-server、lint:server、test:server。HTTP 接口为 GET /rpc/auditlogs.list 与 /rpc/auditlogs.listFacets。

限制:本文仅为约定说明,未提供具体实现细节之外的平台或收费信息;重命名既有 Action 或 subjectType 常量会破坏按字符串过滤的消费者;快照形状变更仅对新行生效。