这是 LOI CHIANG HAO 的个人投稿,参与 Sanity 挑战赛,路径一:交付能够查询真实内容的代理
1. 我构建了什么
我构建了 ClashGuard —— 一个由 Sanity Content Lake 和 GROQ 图解引用 (->) 驱动的自主云安全与合规冲突仲裁代理。
与其将安全标准视为概率搜索引擎的平面文本块,ClashGuard 将 竞争的监管机构、基础设施目标以及冲突的合规条款视为图中的一级关系节点。
┌─────────────────────────┐
│ Terraform / K8s Code │
└────────────┬────────────┘
│
▼
┌─────────────────────────┐
│ Static Pattern Traversal│
└────────────┬────────────┘
│ Resource Kind Query
▼
┌─────────────────────────────────────────────────────┐
│ Sanity Content Lake (GROQ) │
│ *[_type=="complianceRule" && defined(conflictsWith)]│
└──────────────────────────┬──────────────────────────┘
│
┌──────────────────┴──────────────────┐
▼ ▼
┌───────────────────────────┐ ┌───────────────────────────┐
│ Authority Source A │ │ Authority Source B │
│ [AWS-WELL-ARCH / TF-REG] │ │ [CIS-AWS / PCI-DSS] │
│ STANCE: RECOMMENDED │ │ STANCE: STRICT_FORBIDDEN │
└─────────────┬─────────────┘ └─────────────┬─────────────┘
│ │
└──────────────────┬──────────────────┘
│
▼
┌─────────────────────────┐
│ Side-by-Side Dual Audit │
│ - Verbatim Evidence │
│ - Multi-Hop Arbitration │
│ - Downloadable SOC Cert │
└─────────────────────────┘
2. 架构危机:当权威规则书相互矛盾时
在生产云工程中,DevOps 架构师和安全合规官员始终处于无尽的摩擦状态。官方供应商文档推荐一种用于运营可扩展性的配置模式,而监管框架则将该确切模式标记为一级关键漏洞。
考虑三起典型的、价值数百万美元的生产冲突:
冲突 A:S3 存储桶公开访问 vs. CIS AWS 基准 2.1.5
-
供应商 / 架构声明:
根据 AWS Well-Architected Framework 和标准 Terraform CloudFront 分发模块,从配置了
s3:GetObject公共存储桶策略(Principal = "*")的 S3 存储桶提供静态网页资源或媒体文件是既定的高性能模式。 -
监管反方声明:
CIS AWS 基础基准 v3.0.0(第 2.1.5 节) 严格要求所有 S3 存储桶必须强制执行
BlockPublicAcls、IgnorePublicAcls、BlockPublicPolicy和RestrictPublicBuckets。CDN 源不授予任何例外。违反此规定将在 AWS Security Hub 中触发自动 CRITICAL 事件。 - 工程两难: 谁是正确的?如果你遵循供应商,你将无法通过合规审计。如果你盲目遵循 CIS,你将中断 CDN 媒体分发。
冲突 B:Kubernetes CNI DaemonSet vs. CIS Kubernetes 基准 5.2.4
-
运营声明:
核心网络基础设施 DaemonSet(Cilium、Calico、kube-proxy)必须以
hostNetwork: true运行。如果不共享主机网络命名空间,eBPF 程序无法绑定到物理主机的网络接口(eth0)以路由集群流量。 -
监管反方声明:
CIS Kubernetes 基准 v1.8.0(第 5.2.4 节) 明确将
hostNetwork: true评为 高风险容器逃逸向量。攻击者若成功破解共享主机网络命名空间的容器,可检查主机回环流量并攻击本地 kubelet 服务。
冲突 C:远程分析数据库 vs. PCI-DSS 4.0 要求 1.3.1
-
开发者声明:
官方的
terraform-aws-modules/rds规范允许在与仅限受信外部商业智能 CIDR(例如 Tableau、Looker)的入站流量的安全组配合使用时,将publicly_accessible = true设置为 true。 - 监管方的反驳: PCI-DSS v4.0 (Requirement 1.3.1) 明确禁止任何直接的公共互联网入站或出站连接到存储持卡人数据的数据库组件。安全组不符合该标准;在私有子网中进行物理 VPC 隔离是强制性的。
3. 为什么传统向量搜索和 Flat RAG 在生产环境中会失效
大多数现代的 “AI 合规助手” 依赖于标准的 检索增强生成(RAG):将文档分块,通过余弦相似度将其嵌入向量数据库,并将前 K 个匹配结果传入 LLM 上下文窗口。
在处理矛盾规则时,此架构根本会崩溃:
- 向量嵌入缺乏方向性关系语义: 向量搜索计算得出字符串 "Permit GetObject for CloudFront" 和 "Ensure S3 buckets ignore public ACLs" 在语义上相近,因为它们都涉及 S3 存储桶的公共访问策略。然而,余弦相似度无法区分 规定性许可 和 严格的监管禁止。
-
LLM 会幻觉出妥协方案:
当 LLM 在其上下文窗口中接收到两段相互冲突且高度权威的文本,而没有明确的关系方向性时,它会产生幻觉。它要么:
- 错误地向用户保证:"Public read is fine because AWS recommends it," 导致严重的合规违规,或
- 错误地引发恐慌:"You cannot use CloudFront with S3," 导致开发速度被瘫痪。
图的突破
如果关键词或向量搜索能够解决这个问题,我们就不需要 Sanity 了。
ClashGuard 之所以成功,是因为竞争规则之间的关系被编码为图中的有向边 (conflictsWith)。代理无需猜测两条规则是否相互矛盾:Sanity 的 Content Lake 已经知道这一点。
4. 演示 & 交互终端
- 🐙 GitHub 仓库: https://github.com/Hao610/clashguard-sanity
- 🗄️ 公开 Sanity 项目 ID:
1rqqy3g5 - ⚡ 数据集:
production(可公开查询)
实时代码审计 & 并排矛盾面板
ClashGuard 提供一个交互式代码审计终端,开发者可以在此粘贴原始 Terraform HCL 或 Kubernetes YAML:
# Example input evaluated by ClashGuard
resource "aws_s3_bucket_public_access_block" "public_cdn" {
bucket = aws_s3_bucket.media_assets.id
block_public_acls = false # Required for legacy CloudFront origin
block_public_policy = false
ignore_public_acls = false
restrict_public_buckets = false
}
代理扫描 AST 模式,在 Sanity 上执行多跳 GROQ 图遍历,并输出:
- 来源 A(供应商指南): AWS Well-Architected 声明 + 原话引用。
- 来源 B(法规审计): CIS Benchmark 声明 + 严重性评级。
-
图仲裁建议: 架构缓解路径(例如,从 Principal
*迁移到 CloudFront 原始访问控制(OAC))。 - 可下载的 SOC 合规证书: 包含交易哈希和权威链接的可验证证据制品。

图 1:ClashGuard 的并排矛盾面板,展示了 AWS Well-Architected 与 CIS Benchmark 之间的冲突主张,由 Sanity GROQ 图解引用驱动。
5. 代码:通过 GROQ 遍历 Sanity 图
ClashGuard 使用一个单一且优雅的 GROQ 查询,从审计的云资源遍历到主要规则,扩展其发布机构,并解引用所有对立的冲突节点:
*[_type == "complianceRule" && defined(conflictsWith)] {
ruleId,
title,
verdictStance,
verbatimRequirement,
enforcementLevel,
reconciliationAdvice,
"resource": resource-> {
name,
resourceKind,
provider,
riskSurface
},
"source": source-> {
name,
shortCode,
authorityType,
strictnessScore,
homepage,
coreTenet
},
"conflicts": conflictsWith[]-> {
ruleId,
title,
verdictStance,
verbatimRequirement,
enforcementLevel,
reconciliationAdvice,
"source": source-> {
name,
shortCode,
authorityType,
strictnessScore,
homepage,
coreTenet
}
}
}
为什么图解引用取消引用(->)很重要
在标准关系数据库或文档存储中,构建此查询需要多个 SQL JOIN 或嵌套的应用层网络请求。借助 Sanity 的 GROQ 引擎,整个多跳冲突拓扑可在服务器端通过一次快速 API 调用完成解引用。
6. 我如何使用 Sanity
我将合规领域建模为由三种不同文档模式组成的互连图:
模式 1:authoritySource
跟踪发布机构及其治理层级:
-
name:全称(例如 CIS AWS Foundations Benchmark v3.0.0)。 -
authorityType:REGULATORY_COMPLIANCE、VENDOR_RECOMMENDED或COMMUNITY_LINTER。 -
strictnessScore:代理用于校准风险的数值权重(0–100)。 -
coreTenet:高层次理念(例如 “绝对边界最小化” 与 “全球媒体分发”)。
模式 2:cloudResource
定义待评估的基础设施边界:
-
name:目标名称(例如 AWS S3 存储桶)。 -
resourceKind:技术标识符(例如aws_s3_bucket、kubernetes_pod)。 -
riskSurface:与错误配置相关的攻击向量。
模式 3:complianceRule(关系核心)
表示原子合规断言:
-
ruleId:标准标识符(例如CIS-AWS-2.1.5)。 -
verbatimRequirement:规范的确切、不可更改的文本。 -
verdictStance:STRICT_FORBIDDEN与CONDITIONALLY_ALLOWED。 -
resource:指向cloudResource的引用(->)。 -
source:指向authoritySource的引用(->)。 -
conflictsWith:指向 Content Lake 中直接矛盾规则的引用数组([]->)。 -
reconciliationAdvice:解决冲突的基于实际的架构建议。
7. Sanity 项目详情
根据官方挑战要求:
-
Sanity 项目 ID:
1rqqy3g5 -
数据集:
production - 公共读取访问: 已启用(公共数据集)
- 实时 GROQ 查询端点:
https://1rqqy3g5.api.sanity.io/v2024-10-01/data/query/production?query=*[_type=="complianceRule"]
评审员和评估者可通过上述公共 Sanity API URL 直接验证实时模式、参考拓扑以及种子文档突变。
8. 结构化内容对 AI 为何重要?
在对话娱乐或创作写作中,AI 幻觉只是有趣的。在云基础设施、法规合规和网络安全领域,AI 幻觉则是生存风险。
当开发者让 AI 解释模糊的安全规则时:
- 猜测会导致灾难性数据泄露。
- 猜测会导致数百万美元的审计罚款。
Sanity 为企业 AI 提供了缺失的基础:结构化内容即真实依据。通过将冲突的人类政策转化为明确的引用文档图,我们使得 AI 代理能够拒绝幻觉,用可验证的引用呈现论点的双方,并引导开发者走向合规的架构。
LOI CHIANG HAO 为 The Sanity Challenge(DEV.to 2026)独立开发的作品。
——