ai-tool-compliance
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
Chineseai-tool-compliance - 내부 AI 툴 컴플라이언스 자동화
ai-tool-compliance - 内部AI工具合规自动化
When to use this skill
何时使用该Skill
- 신규 AI 프로젝트 시작: 컴플라이언스 기반 구조(RBAC, Gateway, 로그, 비용 추적)를 처음부터 스캐폴딩할 때
- 배포 전 P0 전수 검증: 13개 P0 필수 요건을 자동으로 pass/fail 판정하고 준수 점수를 산출할 때
- RBAC 설계 및 권한 매트릭스 생성: Super Admin/Admin/Manager/Viewer/Guest 5역할 + 게임/메뉴/기능 단위 세부 접근 제어를 정의할 때
- 기존 코드 컴플라이언스 감사: 이미 존재하는 코드베이스를 가이드에 맞게 점검하고 위반 항목을 식별할 때
- 비용 투명성 구현: 액션별 모델/토큰/BQ 스캔량/비용 추적 체계를 구축할 때
- 행동 로그 스키마 설계: 전수 행동 로그 기록 체계(Firestore/BigQuery)를 설계할 때
- 역할별 검증 워크플로우: Section 14 기반 릴리스 승인 프로세스(서비스안정화/Engineer/PM/CEO)를 구성할 때
- 기준검증 시스템 구축: Rule Registry + Evidence Collector + Verifier Engine + Risk Scorer + Gatekeeper 아키텍처를 설정할 때
- 新AI项目启动:需要从头搭建基于合规的架构(RBAC、Gateway、日志、成本追踪)时
- 部署前P0全量验证:自动判定13项P0必备要求的通过/不通过状态,计算合规分数时
- RBAC设计与权限矩阵生成:定义Super Admin/Admin/Manager/Viewer/Guest 5种角色 + 游戏/菜单/功能维度的细粒度访问控制时
- 现有代码合规审计:按照指南检查已有代码库,识别违规项时
- 成本透明度实现:搭建按操作维度的模型/Token/BQ扫描量/成本追踪体系时
- 操作日志Schema设计:设计全量操作日志记录体系(Firestore/BigQuery)时
- 角色维度验证工作流:搭建基于第14节的发布审批流程(服务稳定性/Engineer/PM/CEO)时
- 标准验证系统搭建:配置Rule Registry + Evidence Collector + Verifier Engine + Risk Scorer + Gatekeeper架构时
Installation
安装
bash
npx skills add https://github.com/supercent-io/skills-template --skill ai-tool-compliancebash
npx skills add https://github.com/supercent-io/skills-template --skill ai-tool-complianceQuick Reference
快速参考
| Action | Command | Description |
|---|---|---|
| 프로젝트 초기화 | | RBAC 매트릭스, Gateway boilerplate, 로그 스키마, 비용 추적 인터페이스 생성 |
| 빠른 스캔 | | P0 핵심 항목 빠른 점검 (코드 패턴 기반) |
| 전수 검증 | | 11개 P0 룰 전수 검증 + 준수 점수 산출 |
| 점수 확인 | | 현재 준수 점수(보안/권한/비용/로그) 표시 |
| 배포 게이트 | | Green/Yellow/Red 판정 + 배포 승인/차단 결정 |
| 개선 가이드 | | 위반 항목별 구체적 수정 제안 + 재검증 루프 |
| 操作 | 命令 | 描述 |
|---|---|---|
| 项目初始化 | | 生成RBAC矩阵、Gateway样板代码、日志Schema、成本追踪接口 |
| 快速扫描 | | 基于代码模式快速检查P0核心项 |
| 全量验证 | | 全量验证11项P0规则 + 计算合规分数 |
| 分数查询 | | 展示当前合规分数(安全/权限/成本/日志) |
| 部署门禁 | | 给出Green/Yellow/Red判定 + 决定批准/阻断部署 |
| 改进指南 | | 针对每个违规项给出具体修改建议 + 重验证循环 |
3가지 실행 모드
3种运行模式
1. Quick Scan (quick-scan
)
quick-scan1. 快速扫描(quick-scan
)
quick-scan코드베이스를 정적 분석하여 P0 위반 가능성을 빠르게 식별한다.
실행 방법: 또는 트리거 키워드 ,
/compliance-scan컴플라이언스 스캔quick scan수행 내용:
- Grep/Glob 기반 코드 패턴 검색
- 외부 API 직접 호출 탐지 (Gateway 우회 여부)
- Firestore 클라이언트 직접 접근 탐지
- 하드코딩된 민감 정보 탐지
- Guest 역할 누락 여부 확인
산출물: 위반 의심 항목 목록 (파일 경로 + 라인 번호 + 룰 ID)
소요 시간: 1~3분
对代码库进行静态分析,快速识别P0违规可能性。
使用方法: 或触发关键词 ,
/compliance-scan合规扫描quick scan执行内容:
- 基于Grep/Glob的代码模式搜索
- 检测外部API直接调用(是否绕过Gateway)
- 检测Firestore客户端直接访问
- 检测硬编码的敏感信息
- 确认是否缺失Guest角色
输出:疑似违规项列表(文件路径 + 行号 + 规则ID)
耗时:1~3分钟
2. Full Verify (full-verify
)
full-verify2. 全量验证(full-verify
)
full-verify11개 P0 룰을 전수 검증하고 정량적 준수 점수를 산출한다.
실행 방법: 또는 트리거 키워드 , ,
/compliance-verifyP0 검증full verify배포 검증수행 내용:
- 11개 P0 룰 각각에 대해 Evidence 수집 + pass/fail 판정
- 4개 영역별 점수 산출 (보안 40점 / 권한 25점 / 비용 20점 / 로그 15점)
- 총 준수 점수 계산 (100점 만점)
- 배포 게이트 등급 판정 (Green/Yellow/Red)
- 역할별 승인 체크리스트 생성
산출물: 컴플라이언스 리포트 ()
compliance-report.mdundefined全量验证11项P0规则,计算量化合规分数。
使用方法: 或触发关键词 , ,
/compliance-verifyP0验证full verify部署验证执行内容:
- 对11项P0规则分别收集证据 + 判定通过/不通过
- 计算4个维度的分数(安全40分 / 权限25分 / 成本20分 / 日志15分)
- 计算总合规分数(满分100分)
- 判定部署门禁等级(Green/Yellow/Red)
- 生成角色维度审批检查表
输出:合规报告()
compliance-report.mdundefinedCompliance Report
Compliance Report
- Date: 2026-03-03
- Project: my-ai-tool
- Score: 92/100 (Green)
- Date: 2026-03-03
- Project: my-ai-tool
- Score: 92/100 (Green)
Rule Results
Rule Results
| Rule ID | Rule Name | Result | Evidence |
|---|---|---|---|
| AUTH-P0-001 | 신규 가입자 Guest 강제 | PASS | signup.ts:45 role='guest' |
| AUTH-P0-002 | Guest 메뉴/API 접근 차단 | PASS | middleware.ts:12 guestBlock |
| ... | ... | ... | ... |
| Rule ID | Rule Name | Result | Evidence |
|---|---|---|---|
| AUTH-P0-001 | 新用户默认Guest角色 | PASS | signup.ts:45 role='guest' |
| AUTH-P0-002 | Guest菜单/API访问阻断 | PASS | middleware.ts:12 guestBlock |
| ... | ... | ... | ... |
Score Breakdown
Score Breakdown
- 보안: 33/40
- 권한: 25/25
- 비용: 17/20
- 로그: 12/15
- Total: 92/100
- 安全: 33/40
- 权限: 25/25
- 成本: 17/20
- 日志: 12/15
- Total: 92/100
Gate Decision: GREEN - 배포 승인
Gate Decision: GREEN - 部署批准
**소요 시간**: 5~15분 (프로젝트 규모에 따라 다름)
**耗时**:5~15分钟(依项目规模而定)3. Improve (improve
)
improve3. 改进(improve
)
improve위반 항목에 대한 구체적 수정 가이드를 제공하고 재검증 루프를 실행한다.
실행 방법: 또는 트리거 키워드 ,
/compliance-improve컴플라이언스 개선위반 수정수행 내용:
- 각 FAIL 항목에 대한 코드 레벨 수정 제안 (파일 경로 + 변경 전/후 코드)
- 수정 적용 후 해당 룰 재검증
- 점수 변화 추적 (Before -> After)
- P0 통과 후 P1 권장 요건 점진 도입 가이드
산출물: 수정 제안서 + 재검증 결과
针对违规项提供具体修改指南,执行重验证循环。
使用方法: 或触发关键词 ,
/compliance-improve合规改进违规修复执行内容:
- 针对每个不通过项给出代码级修改建议(文件路径 + 修改前后代码)
- 应用修改后对对应规则进行重验证
- 追踪分数变化(修改前 -> 修改后)
- 通过P0验证后提供P1建议要求的逐步落地指南
输出:修改建议书 + 重验证结果
Improve 모드 자동 수정 로직
改进模式自动修复逻辑
/compliance-improve 실행
|
1. 최근 verification-run.json 로드
|
2. FAIL 항목 추출 (rule_id + evidence)
|
3. 각 FAIL에 대해:
|
a. evidence 파일:줄번호에서 위반 코드 Read
b. rule.remediation + rule.check_pattern.must_contain에서 수정 방향 도출
c. 변경 전/후 코드 diff 생성
d. Write로 수정 적용 (사용자 확인 후)
e. 해당 룰만 재검증 (Grep 패턴 재실행)
f. PASS 전환 확인
|
4. 전체 재검증 (/compliance-verify)
|
5. Before/After 점수 비교 출력
|
6. 잔여 FAIL 없으면 → P1 권장 요건 도입 가이드 제시수정 적용 우선순위:
- 위반 (즉시 제거 필요) → 해당 코드 삭제 또는 서버 API 호출로 교체
must_not_contain - 미충족 (패턴 추가 필요) → remediation 가이드에 따라 코드 삽입
must_contain - Warning (부분 충족) → 미충족 파일에만 보완 적용
执行/compliance-improve
|
1. 加载最新verification-run.json
|
2. 提取不通过项(rule_id + evidence)
|
3. 针对每个不通过项:
|
a. 从evidence的文件:行号读取违规代码
b. 从rule.remediation + rule.check_pattern.must_contain推导修改方向
c. 生成修改前后代码diff
d. 用户确认后应用修改
e. 仅重验证对应规则(重新执行Grep模式匹配)
f. 确认转为PASS状态
|
4. 全量重验证(/compliance-verify)
|
5. 输出修改前后分数对比
|
6. 无剩余不通过项 → 提供P1建议要求落地指南修改优先级:
- 违规(需立即移除) → 删除对应代码或替换为服务器API调用
must_not_contain - 未满足(需添加对应模式) → 按照修复指南插入代码
must_contain - Warning(部分满足) → 仅对未满足的文件进行补充修改
P0 룰 카탈로그
P0规则目录
내부 AI 툴 필수 구현 가이드 v1.1 기반 11개 P0 룰:
| Rule ID | Category | Rule Name | Description | 배점 |
|---|---|---|---|---|
| AUTH-P0-001 | 권한 | 신규 가입자 Guest 강제 | 신규 가입 시 role=Guest 자동 할당, 초대 기반으로만 상위 역할 부여 | 권한 8 |
| AUTH-P0-002 | 권한 | Guest 메뉴/API 접근 차단 | Guest에게 툴명, 모델명, 내부 인프라, 비용, 구조 비노출. 허용된 메뉴/API만 접근 | 권한 7 |
| AUTH-P0-003 | 권한 | 서버 최종 권한 검증 | 모든 API 요청에 서버 사이드 권한 검증 미들웨어 필수. 클라이언트 권한 체크만으로 불충분 | 권한 10 |
| SEC-P0-004 | 보안 | Firestore 직접 접근 금지 | 클라이언트에서 Firestore 직접 read/write 금지. Cloud Functions 경유만 허용 | 보안 12 |
| SEC-P0-005 | 보안 | 외부 API Gateway 강제 | 외부 AI API(Gemini, OpenAI 등) 직접 호출 금지. 반드시 내부 Gateway(Cloud Functions) 경유 | 보안 18 |
| SEC-P0-009 | 보안 | 민감 텍스트 서버 처리 | 민감 원문(프롬프트, 응답 전문)은 서버에서만 처리. 클라이언트에는 참조값(ID)만 전달 | 보안 10 |
| COST-P0-006 | 비용 | 모델 호출 비용 로그 | 모든 AI 모델 호출 시 model, inputTokens, outputTokens, estimatedCost 기록 필수 | 비용 10 |
| COST-P0-007 | 비용 | BQ 스캔 비용 로그 | BigQuery 쿼리 실행 시 bytesProcessed, estimatedCost 기록 필수 | 비용 5 |
| COST-P0-011 | 비용 | 캐시 우선 조회 | 고비용 API 호출 전 캐시 조회 필수. 캐시 미스 시에만 실제 호출 | 비용 5 |
| LOG-P0-008 | 로그 | 실패 요청 로그 필수 | 모든 실패 요청(4xx, 5xx, timeout)에 대한 로그 기록 필수. 누락 금지 | 로그 10 |
| LOG-P0-010 | 로그 | 권한 변경 감사 로그 | Role 변경, 권한 부여/회수, 초대 발송 등 권한 관련 이벤트 전수 기록 | 로그 5 |
基于内部AI工具必备实现指南v1.1的11项P0规则:
| Rule ID | 分类 | 规则名称 | 描述 | 分值 |
|---|---|---|---|---|
| AUTH-P0-001 | 权限 | 新用户默认Guest角色 | 新用户注册时自动分配role=Guest,仅可通过邀请授予更高权限 | 权限 8 |
| AUTH-P0-002 | 权限 | Guest菜单/API访问阻断 | 不对Guest暴露工具名、模型名、内部基础设施、成本、架构信息,仅允许访问授权的菜单/API | 权限 7 |
| AUTH-P0-003 | 权限 | 服务端最终权限校验 | 所有API请求必须经过服务端权限校验中间件,仅靠客户端权限校验不满足要求 | 权限 10 |
| SEC-P0-004 | 安全 | 禁止直接访问Firestore | 禁止客户端直接对Firestore进行read/write操作,仅允许通过Cloud Functions访问 | 安全 12 |
| SEC-P0-005 | 安全 | 强制使用外部API Gateway | 禁止直接调用外部AI API(Gemini、OpenAI等),必须经过内部Gateway(Cloud Functions) | 安全 18 |
| SEC-P0-009 | 安全 | 敏感文本服务端处理 | 敏感原文(Prompt、响应全文)仅在服务端处理,仅向客户端传递引用值(ID) | 安全 10 |
| COST-P0-006 | 成本 | 模型调用成本日志 | 所有AI模型调用必须记录model、inputTokens、outputTokens、estimatedCost | 成本 10 |
| COST-P0-007 | 成本 | BQ扫描成本日志 | 执行BigQuery查询时必须记录bytesProcessed、estimatedCost | 成本 5 |
| COST-P0-011 | 成本 | 优先查询缓存 | 高成本API调用前必须先查询缓存,仅缓存未命中时发起实际调用 | 成本 5 |
| LOG-P0-008 | 日志 | 必须记录失败请求日志 | 所有失败请求(4xx、5xx、timeout)必须记录日志,不允许遗漏 | 日志 10 |
| LOG-P0-010 | 日志 | 权限变更审计日志 | 必须全量记录角色变更、权限授予/回收、发送邀请等权限相关事件 | 日志 5 |
점수 체계
分数体系
| 영역 | 만점 | 포함 룰 |
|---|---|---|
| 보안 | 40 | SEC-P0-004, SEC-P0-005, SEC-P0-009 |
| 권한 | 25 | AUTH-P0-001, AUTH-P0-002, AUTH-P0-003 |
| 비용 | 20 | COST-P0-006, COST-P0-007, COST-P0-011 |
| 로그 | 15 | LOG-P0-008, LOG-P0-010 |
| 합계 | 100 | 11개 P0 룰 |
| 维度 | 满分 | 包含规则 |
|---|---|---|
| 安全 | 40 | SEC-P0-004, SEC-P0-005, SEC-P0-009 |
| 权限 | 25 | AUTH-P0-001, AUTH-P0-002, AUTH-P0-003 |
| 成本 | 20 | COST-P0-006, COST-P0-007, COST-P0-011 |
| 日志 | 15 | LOG-P0-008, LOG-P0-010 |
| 合计 | 100 | 11项P0规则 |
룰별 자동 검증 로직
规则自动验证逻辑
각 룰의 검증은 에 정의된 을 기반으로 수행된다. 핵심 메커니즘은 Grep/Glob 정적 분석이다.
rules/p0-catalog.yamlcheck_pattern판정 알고리즘 (룰당):
1. Glob(check_targets) → 대상 파일 수집
2. grep_patterns 매칭 → 해당 기능 사용 파일 식별
- 매칭 0건 → N/A (해당 기능 미사용, 패널티 없음)
3. must_not_contain 검사 (exclude_paths 제외)
- 매칭 발견 → 즉시 FAIL + evidence 기록
4. must_contain 검사
- 전체 충족 → PASS
- 부분 충족 → WARNING
- 미충족 → FAIL룰별 핵심 Grep 패턴:
| Rule ID | 기능 탐지 (grep_patterns) | 준수 확인 (must_contain) | 위반 탐지 (must_not_contain) |
|---|---|---|---|
| AUTH-P0-001 | | | |
| AUTH-P0-002 | | | -- |
| AUTH-P0-003 | | | -- |
| SEC-P0-004 | -- (전체 대상) | -- | |
| SEC-P0-005 | -- (전체 대상) | -- | |
| SEC-P0-009 | -- (전체 대상) | -- | |
| COST-P0-006 | | | -- |
| COST-P0-007 | | | -- |
| COST-P0-011 | | | -- |
| LOG-P0-008 | | | -- |
| LOG-P0-010 | | | -- |
상세 스키마: 및 의 "Judgment Algorithm" 섹션 참조
rules/p0-catalog.yamlREFERENCE.md每个规则的验证基于中定义的执行,核心机制为Grep/Glob静态分析。
rules/p0-catalog.yamlcheck_pattern判定算法(单规则):
1. Glob(check_targets) → 收集目标文件
2. 匹配grep_patterns → 识别使用对应功能的文件
- 0个匹配 → N/A(未使用对应功能,无扣分)
3. 检查must_not_contain(排除exclude_paths)
- 匹配到内容 → 立即判定FAIL + 记录证据
4. 检查must_contain
- 全部满足 → PASS
- 部分满足 → WARNING
- 未满足 → FAIL规则核心Grep模式:
| Rule ID | 功能检测(grep_patterns) | 合规校验(must_contain) | 违规检测(must_not_contain) |
|---|---|---|---|
| AUTH-P0-001 | | | |
| AUTH-P0-002 | | | -- |
| AUTH-P0-003 | | | -- |
| SEC-P0-004 | -- (全量扫描) | -- | |
| SEC-P0-005 | -- (全量扫描) | -- | |
| SEC-P0-009 | -- (全量扫描) | -- | |
| COST-P0-006 | | | -- |
| COST-P0-007 | | | -- |
| COST-P0-011 | | | -- |
| LOG-P0-008 | | | -- |
| LOG-P0-010 | | | -- |
详细Schema:参考及的「Judgment Algorithm」章节
rules/p0-catalog.yamlREFERENCE.md검증 시나리오 (QA)
验证场景(QA)
Full Verify 모드()에서 실행되는 5개 핵심 검증 시나리오. 각 시나리오는 관련 P0 룰을 묶어 end-to-end로 검증한다.
/compliance-verify| ID | 시나리오 | 관련 룰 | 검증 방법 | Pass 기준 |
|---|---|---|---|---|
| SC-001 | 신규 가입 -> Guest 격리 | AUTH-P0-001, AUTH-P0-002 | 회원가입 코드에서 role=guest 할당 확인 + Guest로 보호된 API 호출 시 403 반환 패턴 확인 | role이 guest이고, 보호 API에 접근 불가 패턴 존재 시 PASS |
| SC-002 | AI 호출 -> Gateway 경유 + 비용 기록 | SEC-P0-005, COST-P0-006, COST-P0-011 | (1) 외부 API 직접 호출 코드 부재 확인 (2) Gateway 함수 경유 확인 (3) 비용 로그 필드(model, tokens, cost) 기록 확인 (4) 캐시 조회 로직 존재 확인 | Gateway 경유 + 비용 로그 4필드 기록 + 캐시 레이어 존재 시 PASS |
| SC-003 | Firestore 접근 -> Functions 경유 전용 | SEC-P0-004, AUTH-P0-003 | (1) 클라이언트 코드에서 Firestore SDK 직접 import 탐지 (2) 서버 사이드 권한 검증 미들웨어 존재 확인 | 클라이언트 직접 접근 코드 0건 + 서버 미들웨어 존재 시 PASS |
| SC-004 | 실패 요청 -> 로그 누락 없음 | LOG-P0-008, LOG-P0-010 | (1) error handler에서 로그 기록 호출 확인 (2) catch 블록에서 로그 누락 없음 확인 (3) 권한 변경 이벤트에 감사 로그 존재 확인 | 모든 error handler에 로그 호출 존재 + 권한 변경 감사 로그 존재 시 PASS |
| SC-005 | 민감 데이터 -> 클라이언트 비노출 | SEC-P0-009, AUTH-P0-002 | (1) API 응답에 프롬프트/응답 전문이 포함되지 않고 참조 ID만 반환 확인 (2) Guest 응답에 모델명/비용/인프라 정보 미포함 확인 | 응답에 원문 미포함 + Guest 노출 통제 확인 시 PASS |
全量验证模式()中执行的5个核心验证场景,每个场景整合相关P0规则进行端到端验证。
/compliance-verify| ID | 场景 | 关联规则 | 验证方法 | Pass标准 |
|---|---|---|---|---|
| SC-001 | 新用户注册 -> Guest隔离 | AUTH-P0-001, AUTH-P0-002 | 确认注册代码中分配role=guest + Guest调用受保护API时返回403的模式存在 | 角色为guest,且存在受保护API不可访问的模式时判定PASS |
| SC-002 | AI调用 -> 经过Gateway + 记录成本 | SEC-P0-005, COST-P0-006, COST-P0-011 | (1) 确认无直接调用外部API的代码 (2) 确认经过Gateway函数 (3) 确认记录成本日志字段(model、tokens、cost) (4) 确认存在缓存查询逻辑 | 经过Gateway + 记录4个成本日志字段 + 存在缓存层时判定PASS |
| SC-003 | Firestore访问 -> 仅通过Functions | SEC-P0-004, AUTH-P0-003 | (1) 检测客户端代码是否直接导入Firestore SDK (2) 确认存在服务端权限校验中间件 | 无客户端直接访问代码 + 存在服务端中间件时判定PASS |
| SC-004 | 失败请求 -> 无日志遗漏 | LOG-P0-008, LOG-P0-010 | (1) 确认error handler中调用日志记录 (2) 确认catch块无日志遗漏 (3) 确认权限变更事件存在审计日志 | 所有error handler存在日志调用 + 权限变更审计日志存在时判定PASS |
| SC-005 | 敏感数据 -> 不暴露给客户端 | SEC-P0-009, AUTH-P0-002 | (1) 确认API响应不含Prompt/响应全文,仅返回引用ID (2) 确认Guest响应不含模型名/成本/基础设施信息 | 响应不含原文 + Guest暴露管控生效时判定PASS |
시나리오별 검증 흐름
场景验证流程
SC-001: grep signup/register -> assert role='guest' -> grep guestBlock/guestDeny -> assert exists
SC-002: grep fetch(https://) in client -> assert 0 hits -> grep gateway log -> assert cost fields -> assert cache check
SC-003: grep firebase/firestore in client/ -> assert 0 hits -> grep authMiddleware in functions/ -> assert exists
SC-004: grep catch blocks -> assert logAction in each -> grep roleChange -> assert auditLog
SC-005: grep res.json for raw text -> assert 0 hits -> grep guest response -> assert no model/cost infoSC-001: grep signup/register -> 断言role='guest' -> grep guestBlock/guestDeny -> 断言存在
SC-002: 客户端路径grep fetch(https://) -> 断言0匹配 -> grep gateway log -> 断言存在成本字段 -> 断言存在缓存检查
SC-003: client/路径grep firebase/firestore -> 断言0匹配 -> functions/路径grep authMiddleware -> 断言存在
SC-004: grep catch块 -> 断言每个块都有logAction -> grep roleChange -> 断言存在auditLog
SC-005: grep res.json中的原始文本 -> 断言0匹配 -> grep guest响应 -> 断言无模型/成本信息역할별 Go/No-Go 체크포인트
角色维度Go/No-Go检查点
배포 게이트 판정 후, 등급에 따라 해당 역할의 Go/No-Go 체크포인트를 통과해야 한다. 4개 역할 x 5개 항목 = 총 20개 체크포인트.
部署门禁判定后,需根据等级通过对应角色的Go/No-Go检查点。4个角色 x 5个检查项 = 共20个检查点.
서비스안정화 (5개)
服务稳定性负责人(5个)
| # | 체크포인트 | Go 조건 | No-Go 조건 |
|---|---|---|---|
| 1 | SLA 영향 분석 | 기존 서비스 가용성/응답시간 SLA에 영향 없음 확인 | SLA 영향 미분석 또는 저하 예상 |
| 2 | 롤백 절차 | 롤백 절차 문서화 + 테스트 완료 | 롤백 절차 미수립 |
| 3 | 성능 테스트 | 부하/스트레스 테스트 완료 + 기준치 이내 | 성능 테스트 미실행 |
| 4 | 장애 알림 | 장애 감지 알림 채널(Slack/PagerDuty 등) 설정 완료 | 알림 채널 미설정 |
| 5 | 모니터링 대시보드 | 핵심 메트릭(에러율, 응답시간, AI 비용) 대시보드 존재 | 모니터링 부재 |
| # | 检查点 | Go条件 | No-Go条件 |
|---|---|---|---|
| 1 | SLA影响分析 | 确认对现有服务可用性/响应时间SLA无影响 | 未分析SLA影响或预计性能下降 |
| 2 | 回滚流程 | 回滚流程已文档化 + 测试完成 | 未制定回滚流程 |
| 3 | 性能测试 | 负载/压力测试完成 + 符合基准值 | 未执行性能测试 |
| 4 | 故障通知 | 故障检测通知渠道(Slack/PagerDuty等)配置完成 | 未配置通知渠道 |
| 5 | 监控大盘 | 存在核心指标(错误率、响应时间、AI成本)大盘 | 无监控 |
Engineer (5개)
研发工程师(5个)
| # | 체크포인트 | Go 조건 | No-Go 조건 |
|---|---|---|---|
| 1 | FAIL 룰 원인 분석 | 모든 FAIL 룰의 근본 원인 식별 + 문서화 | 원인 미식별 항목 존재 |
| 2 | 수정 코드 검증 | 수정 코드가 해당 룰의 의도를 정확히 반영 | 수정이 룰 의도와 불일치 |
| 3 | 재검증 통과 | 수정 후 재검증에서 해당 룰 PASS 전환 | 재검증 미실행 또는 여전히 FAIL |
| 4 | 회귀 영향 없음 | 수정이 다른 P0 룰에 부정적 영향 없음 확인 | 다른 룰이 새로 FAIL |
| 5 | 코드 리뷰 완료 | 수정 코드에 대한 코드 리뷰 승인 완료 | 코드 리뷰 미완료 |
| # | 检查点 | Go条件 | No-Go条件 |
|---|---|---|---|
| 1 | FAIL规则根因分析 | 所有FAIL规则的根本原因已识别 + 文档化 | 存在未识别原因的项 |
| 2 | 修改代码验证 | 修改代码准确符合规则意图 | 修改与规则意图不一致 |
| 3 | 重验证通过 | 修改后重验证对应规则转为PASS | 未执行重验证或仍为FAIL |
| 4 | 无回归影响 | 确认修改对其他P0规则无负面影响 | 其他规则新增FAIL |
| 5 | 代码评审完成 | 修改代码已通过代码评审批准 | 未完成代码评审 |
PM (5개)
PM(产品经理)(5个)
| # | 체크포인트 | Go 조건 | No-Go 조건 |
|---|---|---|---|
| 1 | 사용자 영향 평가 | 미달 항목의 사용자 영향이 수용 가능 | 사용자 영향 미평가 |
| 2 | 일정 리스크 | 수정 소요 시간이 릴리스 일정 내 | 일정 초과 예상 |
| 3 | 범위 합의 | 범위 변경 시 이해관계자 합의 완료 | 합의 미완료 |
| 4 | 비용 영향 | AI 사용 비용이 승인된 예산 범위 내 | 예산 초과 예상 |
| 5 | 커뮤니케이션 | 변경 사항이 관련 팀에 공유됨 | 미공유 |
| # | 检查点 | Go条件 | No-Go条件 |
|---|---|---|---|
| 1 | 用户影响评估 | 未达标项的用户影响可接受 | 未评估用户影响 |
| 2 | 进度风险 | 修改所需时间在发布计划范围内 | 预计超期 |
| 3 | 范围共识 | 范围变更已与利益相关方达成共识 | 未达成共识 |
| 4 | 成本影响 | AI使用成本在批准的预算范围内 | 预计超预算 |
| 5 | 同步沟通 | 变更内容已同步至相关团队 | 未同步 |
CEO (5개)
CEO(5个)
| # | 체크포인트 | Go 조건 | No-Go 조건 |
|---|---|---|---|
| 1 | 비용 상한 | 월간 AI 비용이 사전 승인 예산 이내 | 예산 상한 초과 |
| 2 | 보안 리스크 | 보안 P0 전수 통과 또는 예외 사유 합리적 | P0 보안 FAIL + 예외 사유 불충분 |
| 3 | 법적/규제 리스크 | 데이터 처리가 관련 법규(개인정보보호법 등) 준수 | 법적 리스크 미검토 |
| 4 | 사업 연속성 | 배포 실패 시 사업 영향이 제한적 | 사업 중단 리스크 존재 |
| 5 | 최종 승인 | 위 4개 항목 모두 Go이면 최종 승인 | 1개라도 No-Go이면 보류 |
| # | 检查点 | Go条件 | No-Go条件 |
|---|---|---|---|
| 1 | 成本上限 | 月度AI成本在预先批准的预算内 | 超出预算上限 |
| 2 | 安全风险 | 安全P0全量通过或例外理由合理 | 安全P0 FAIL + 例外理由不充分 |
| 3 | 法律/监管风险 | 数据处理符合相关法规(个人信息保护法等) | 未评估法律风险 |
| 4 | 业务连续性 | 部署失败对业务影响有限 | 存在业务中断风险 |
| 5 | 最终批准 | 以上4项全部为Go则最终批准 | 有1项No-Go则暂缓 |
리포트 형식
报告格式
/compliance-verifycompliance-report.md执行生成的由6个部分组成。
/compliance-verifycompliance-report.md리포트 섹션 구조 (6개)
报告结构(6部分)
markdown
undefinedmarkdown
undefinedCompliance Report
合规报告
1. Summary (요약)
1. 摘要
- 프로젝트명, 검증 일시, 검증 모드 (quick-scan / full-verify)
- 총 준수 점수 / 100
- 배포 게이트 등급 (Green / Yellow / Red)
- P0 FAIL 건수
- 검증 소요 시간
- 项目名、验证时间、验证模式(quick-scan / full-verify)
- 总合规分数 / 100
- 部署门禁等级(Green / Yellow / Red)
- P0 FAIL数量
- 验证耗时
2. Rule Results (룰별 결과)
2. 规则结果
| Rule ID | Category | Rule Name | Result | Score | Evidence |
|---|---|---|---|---|---|
| AUTH-P0-001 | 권한 | 신규 가입자 Guest 강제 | PASS | 10/10 | signup.ts:45 |
| SEC-P0-005 | 보안 | 외부 API Gateway 강제 | FAIL | 0/15 | client/api.ts:23 직접 fetch |
| ... |
| Rule ID | 分类 | 规则名称 | 结果 | 得分 | 证据 |
|---|---|---|---|---|---|
| AUTH-P0-001 | 权限 | 新用户默认Guest角色 | PASS | 10/10 | signup.ts:45 |
| SEC-P0-005 | 安全 | 强制使用外部API Gateway | FAIL | 0/15 | client/api.ts:23 直接fetch |
| ... |
3. Score Breakdown (영역별 점수)
3. 分数明细
| 영역 | 획득 | 만점 | 비율 |
|---|---|---|---|
| 보안 | 20 | 40 | 50% |
| 권한 | 25 | 25 | 100% |
| 비용 | 17 | 20 | 85% |
| 로그 | 12 | 15 | 80% |
| 합계 | 79 | 100 | 79% |
| 维度 | 得分 | 满分 | 占比 |
|---|---|---|---|
| 安全 | 20 | 40 | 50% |
| 权限 | 25 | 25 | 100% |
| 成本 | 17 | 20 | 85% |
| 日志 | 12 | 15 | 80% |
| 合计 | 79 | 100 | 79% |
4. Failures Detail (실패 상세)
4. 失败详情
각 FAIL 항목에 대해:
- 위반 코드 위치 (파일:라인)
- 위반 내용 설명
- 권장 수정 방법 (remediation)
- 관련 검증 시나리오 ID (SC-001~SC-005)
每个FAIL项包含:
- 违规代码位置(文件:行号)
- 违规内容说明
- 建议修复方案
- 关联验证场景ID(SC-001~SC-005)
5. Gate Decision (배포 판정)
5. 部署判定
- 판정 등급 + 판정 근거
- 필요한 승인 역할 목록
- 역할별 Go/No-Go 체크포인트 현황 (20개 중 미충족 항목 표시)
- 判定等级 + 判定依据
- 需要的审批角色列表
- 角色维度Go/No-Go检查点状态(显示20个中未达标的项)
6. Recommendations (권고 사항)
6. 建议
- 즉시 조치: P0 FAIL 수정 (파일 경로 + 수정 가이드)
- 단기 개선: Yellow -> Green 달성 방안
- 중기 도입: P1 권장 요건 도입 순서
undefined- 立即处理:修复P0 FAIL(文件路径 + 修改指南)
- 短期改进:Yellow升级为Green的方案
- 中期落地:P1建议要求落地顺序
undefined리포트 생성 규칙
报告生成规则
- Summary는 항상 첫 페이지: 의사결정자가 점수와 등급을 즉시 확인할 수 있어야 한다
- Evidence 필수: Rule Results의 모든 PASS/FAIL 항목에 코드 증거(파일:라인) 첨부
- Failures Detail은 FAIL 항목만: PASS 항목은 Rule Results 테이블에만 표시
- Gate Decision에 역할 매핑: 등급에 따라 필요한 승인 역할을 자동 표시
- Recommendations 우선순위: 즉시 > 단기 > 중기 순서로 정렬
- 摘要始终放在首页:方便决策者立即查看分数和等级
- 证据必填:规则结果中所有PASS/FAIL项都需附带代码证据(文件:行号)
- 失败详情仅展示FAIL项:PASS项仅在规则结果表中展示
- 部署判定自动映射角色:根据等级自动显示需要的审批角色
- 建议按优先级排序:按立即 > 短期 > 中期顺序排序
배포 게이트 정책
部署门禁政策
등급 판정 기준
等级判定标准
| 등급 | 점수 | 조건 | 결정 |
|---|---|---|---|
| Green | 90~100 | 모든 P0 PASS + 총점 90 이상 | 자동 배포 승인 |
| Yellow | 75~89 | 모든 P0 PASS + 총점 75~89 | 조건부 승인 (PM 확인 필요) |
| Red | 0~74 | 총점 74 이하 또는 P0 FAIL 1건 이상 | 배포 차단 |
| 等级 | 分数 | 条件 | 决定 |
|---|---|---|---|
| Green | 90~100 | 所有P0通过 + 总分90以上 | 自动批准部署 |
| Yellow | 75~89 | 所有P0通过 + 总分75~89 | 有条件批准(需PM确认) |
| Red | 0~74 | 总分74以下 或 存在1项以上P0 FAIL | 阻断部署 |
핵심 규칙
核心规则
- P0 절대 규칙: P0 FAIL이 1건이라도 있으면 총점과 무관하게 Red 판정. 배포 자동 차단
- Yellow 조건부: 총점은 통과했으나 완벽하지 않은 경우. PM이 리스크를 검토하고 승인/반려 결정
- Green 자동 승인: 모든 P0 통과 + 90점 이상이면 추가 승인 없이 배포 가능
- P0绝对规则:只要存在1项P0 FAIL,无论总分多少直接判定为Red,自动阻断部署
- Yellow有条件批准:总分达标但未达到满分,由PM评估风险后决定批准/驳回
- Green自动批准:所有P0通过 + 90分以上,无需额外审批即可部署
게이트 실행 흐름
门禁执行流程
/compliance-verify 실행
|
11개 P0 룰 전수 검증
|
점수 산출 (보안+권한+비용+로그)
|
+----+----+----+
| | |
Green Yellow Red
| | |
자동 승인 PM 승인 배포 차단
| 대기 |
v | 수정 후
배포 v 재검증
PM 확인 |
| | v
승인 반려 /compliance-improve
| |
v v
배포 수정 후
재검증执行/compliance-verify
|
全量验证11项P0规则
|
计算分数(安全+权限+成本+日志)
|
+----+----+----+
| | |
Green Yellow Red
| | |
自动批准 等待PM审批 阻断部署
| | |
v v 修改后
部署 PM确认 重验证
| | |
批准 驳回 v
| | /compliance-improve
v v
部署 修改后
重验证역할별 승인 프로세스
角色维度审批流程
내부 AI 툴 필수 구현 가이드 Section 14 기반. 배포 등급에 따라 필요한 승인 역할이 달라진다.
基于内部AI工具必备实现指南第14节,部署等级不同所需的审批角色不同。
서비스안정화 (Service Stability)
服务稳定性负责人
책임: 장애 영향, 성능 저하, 롤백 가능성 검증
체크리스트:
- 신규 배포가 기존 서비스 SLA에 영향을 주지 않는가
- 롤백 절차가 문서화되어 있는가
- 성능 테스트(부하/스트레스)가 완료되었는가
- 장애 시 알림 채널이 설정되어 있는가
승인 시점: Yellow/Red 등급에서 필수
职责:验证故障影响、性能下降、回滚可能性
检查表:
- 新部署不会影响现有服务SLA
- 回滚流程已文档化
- 性能测试(负载/压力)已完成
- 故障时通知渠道已配置
审批时机:Yellow/Red等级时必填
Engineer
研发工程师
책임: 실패 룰의 근본 원인 분석 + 코드 수준 조치 + 재검증
체크리스트:
- 모든 FAIL 룰의 원인이 식별되었는가
- 수정 코드가 해당 룰의 의도를 정확히 반영하는가
- 재검증 결과 해당 룰이 PASS로 전환되었는가
- 수정이 다른 룰에 부정적 영향을 주지 않는가
승인 시점: Red 등급에서 필수 (수정 후 재검증 담당)
职责:分析FAIL规则根因 + 代码级修复 + 重验证
检查表:
- 所有FAIL规则的原因已识别
- 修改代码准确符合规则意图
- 重验证后对应规则已转为PASS
- 修改不会对其他规则造成负面影响
审批时机:Red等级时必填(负责修改后重验证)
PM (Product Manager)
PM(产品经理)
책임: 사용자 영향, 일정 리스크, 범위 변경 승인
체크리스트:
- 컴플라이언스 미달 항목이 사용자 경험에 미치는 영향이 수용 가능한가
- 수정에 필요한 일정이 전체 릴리스 일정에 미치는 영향이 수용 가능한가
- 범위 축소/연기가 필요한 경우 이해관계자와 합의되었는가
승인 시점: Yellow 등급에서 필수
职责:评估用户影响、进度风险、批准范围变更
检查表:
- 合规未达标项对用户体验的影响可接受
- 修改所需时间对整体发布进度的影响可接受
- 需要缩小范围/延期时已与利益相关方达成共识
审批时机:Yellow等级时必填
CEO
CEO
책임: 비용 상한, 사업 리스크, 최종 승인
체크리스트:
- AI 사용 비용이 사전 승인된 예산 범위 내인가
- 보안 위험이 사업적으로 수용 가능한 수준인가
- 법적/규제 리스크가 식별 및 관리되고 있는가
승인 시점: 비용 상한 초과 또는 보안 P0 예외 승인 시
职责:成本上限、业务风险、最终批准
检查表:
- AI使用成本在预先批准的预算范围内
- 安全风险在业务可接受范围内
- 法律/监管风险已识别并得到管理
审批时机:超出成本上限或安全P0例外审批时
프로젝트 초기화 (/compliance-init
)
/compliance-init项目初始化(/compliance-init
)
/compliance-init생성되는 파일 구조
生成的文件结构
project/
├── compliance/
│ ├── rbac-matrix.yaml # 5역할 x 게임/메뉴/기능 권한 매트릭스
│ ├── rules/
│ │ └── p0-rules.yaml # 11개 P0 룰 정의
│ ├── log-schema.yaml # 행동 로그 스키마 (Firestore/BigQuery)
│ └── cost-tracking.yaml # 비용 추적 필드 정의
├── compliance-config.yaml # 프로젝트 메타 + 검증 설정
└── compliance-report.md # 검증 결과 리포트 (verify 실행 시 생성)project/
├── compliance/
│ ├── rbac-matrix.yaml # 5角色 x 游戏/菜单/功能权限矩阵
│ ├── rules/
│ │ └── p0-rules.yaml # 11项P0规则定义
│ ├── log-schema.yaml # 操作日志Schema(Firestore/BigQuery)
│ └── cost-tracking.yaml # 成本追踪字段定义
├── compliance-config.yaml # 项目元数据 + 验证配置
└── compliance-report.md # 验证结果报告(执行verify时生成)각 YAML 파일 스키마
各YAML文件Schema
compliance-config.yaml (프로젝트 루트):
yaml
project:
name: "my-ai-tool"
type: "web-app" # web-app | api | mobile-app | library
tech_stack: ["typescript", "firebase", "next.js"]
verification:
catalog_path: "compliance/rules/p0-rules.yaml" # 기본값
exclude_paths: # 검증 제외 경로
- "node_modules/**"
- "dist/**"
- "**/*.test.ts"
- "**/*.spec.ts"
scoring:
domain_weights: # 합계 = 100
security: 40
auth: 25
cost: 20
logging: 15
gate:
green_threshold: 90 # 90점 이상 = 자동 승인
yellow_threshold: 75 # 75~89점 = PM 확인 필요
p0_fail_override: true # P0 FAIL 시 점수 무관 Red 판정compliance/log-schema.yaml (행동 로그 스키마):
yaml
log_schema:
version: "1.0.0"
storage:
primary: "firestore" # 실시간 접근용
archive: "bigquery" # 분석/감사용
retention:
hot: 90 # 일 (Firestore)
cold: 365 # 일 (BigQuery)
fields:
- name: userId
type: string
required: true
- name: action
type: string
required: true
description: "수행 동작 (ai_call, role_change, login, etc.)"
- name: timestamp
type: timestamp
required: true
- name: model
type: string
required: false
description: "AI 모델명 (gemini-1.5-flash 등)"
- name: inputTokens
type: number
required: false
- name: outputTokens
type: number
required: false
- name: estimatedCost
type: number
required: false
description: "USD 기준 예상 비용"
- name: status
type: string
required: true
enum: [success, fail, timeout, error]
- name: errorMessage
type: string
required: false
- name: metadata
type: map
required: false
description: "추가 컨텍스트 (bytesProcessed, cacheHit 등)"compliance/cost-tracking.yaml (비용 추적 필드):
yaml
cost_tracking:
version: "1.0.0"
ai_models:
required_fields:
- model # 모델 식별자
- inputTokens # 입력 토큰 수
- outputTokens # 출력 토큰 수
- estimatedCost # USD 예상 비용
optional_fields:
- cacheHit # 캐시 히트 여부
- latencyMs # 응답 지연 (ms)
bigquery:
required_fields:
- queryId # 쿼리 식별자
- bytesProcessed # 스캔 바이트
- estimatedCost # USD 예상 비용
optional_fields:
- slotMs # 슬롯 사용 시간
- cacheHit # BQ 캐시 히트 여부
cost_formula:
gemini_flash: "$0.075 / 1M input tokens, $0.30 / 1M output tokens"
gemini_pro: "$1.25 / 1M input tokens, $5.00 / 1M output tokens"
bigquery: "$5.00 / TB scanned"compliance-config.yaml(项目根目录):
yaml
project:
name: "my-ai-tool"
type: "web-app" # web-app | api | mobile-app | library
tech_stack: ["typescript", "firebase", "next.js"]
verification:
catalog_path: "compliance/rules/p0-rules.yaml" # 默认值
exclude_paths: # 验证排除路径
- "node_modules/**"
- "dist/**"
- "**/*.test.ts"
- "**/*.spec.ts"
scoring:
domain_weights: # 合计=100
security: 40
auth: 25
cost: 20
logging: 15
gate:
green_threshold: 90 # 90分以上=自动批准
yellow_threshold: 75 # 75~89分=需PM确认
p0_fail_override: true # 存在P0 FAIL时无视分数直接判定Redcompliance/log-schema.yaml(操作日志Schema):
yaml
log_schema:
version: "1.0.0"
storage:
primary: "firestore" # 用于实时访问
archive: "bigquery" # 用于分析/审计
retention:
hot: 90 # 天(Firestore)
cold: 365 # 天(BigQuery)
fields:
- name: userId
type: string
required: true
- name: action
type: string
required: true
description: "执行操作(ai_call, role_change, login等)"
- name: timestamp
type: timestamp
required: true
- name: model
type: string
required: false
description: "AI模型名(gemini-1.5-flash等)"
- name: inputTokens
type: number
required: false
- name: outputTokens
type: number
required: false
- name: estimatedCost
type: number
required: false
description: "USD计价的预估成本"
- name: status
type: string
required: true
enum: [success, fail, timeout, error]
- name: errorMessage
type: string
required: false
- name: metadata
type: map
required: false
description: "额外上下文(bytesProcessed, cacheHit等)"compliance/cost-tracking.yaml(成本追踪字段):
yaml
cost_tracking:
version: "1.0.0"
ai_models:
required_fields:
- model # 模型标识符
- inputTokens # 输入Token数
- outputTokens # 输出Token数
- estimatedCost # USD预估成本
optional_fields:
- cacheHit # 是否命中缓存
- latencyMs # 响应延迟(ms)
bigquery:
required_fields:
- queryId # 查询标识符
- bytesProcessed # 扫描字节数
- estimatedCost # USD预估成本
optional_fields:
- slotMs # Slot使用时间
- cacheHit # 是否命中BQ缓存
cost_formula:
gemini_flash: "$0.075 / 1M input tokens, $0.30 / 1M output tokens"
gemini_pro: "$1.25 / 1M input tokens, $5.00 / 1M output tokens"
bigquery: "$5.00 / TB scanned"RBAC 매트릭스 기본 구조
RBAC矩阵基础结构
yaml
undefinedyaml
undefinedcompliance/rbac-matrix.yaml
compliance/rbac-matrix.yaml
roles:
- id: super_admin name: Super Admin description: 전체 시스템 관리 + 역할 부여 권한
- id: admin name: Admin description: 서비스 설정 + 사용자 관리
- id: manager name: Manager description: 팀/게임 단위 관리
- id: viewer name: Viewer description: 읽기 전용 접근
- id: guest name: Guest description: 최소 접근 (툴명/모델명/비용/구조 비노출)
permissions:
- resource: "dashboard" actions: super_admin: [read, write, delete, admin] admin: [read, write, delete] manager: [read, write] viewer: [read] guest: [] # 접근 불가
... 게임/메뉴/기능별 확장
undefinedroles:
- id: super_admin name: Super Admin description: 全系统管理 + 角色授予权限
- id: admin name: Admin description: 服务配置 + 用户管理
- id: manager name: Manager description: 团队/游戏维度管理
- id: viewer name: Viewer description: 只读访问
- id: guest name: Guest description: 最小访问权限(不暴露工具名/模型名/成本/架构)
permissions:
- resource: "dashboard" actions: super_admin: [read, write, delete, admin] admin: [read, write, delete] manager: [read, write] viewer: [read] guest: [] # 无访问权限
... 可按游戏/菜单/功能扩展
undefinedGateway 패턴 예시
Gateway模式示例
typescript
// functions/src/gateway/ai-gateway.ts
// 외부 API 직접 호출 금지 - 반드시 이 Gateway 경유
import { onCall, HttpsError } from "firebase-functions/v2/https";
import { verifyRole } from "../auth/rbac";
import { logAction } from "../logging/audit";
import { checkCache } from "../cache/cost-cache";
export const callAIModel = onCall(async (request) => {
// 1. 서버 사이드 권한 검증 (AUTH-P0-003)
const user = await verifyRole(request.auth, ["admin", "manager"]);
// 2. Guest 접근 차단 (AUTH-P0-002)
if (user.role === "guest") {
throw new HttpsError("permission-denied", "Access denied");
}
// 3. 캐시 우선 조회 (COST-P0-011)
const cached = await checkCache(request.data.prompt);
if (cached) {
await logAction({
userId: user.uid,
action: "ai_call",
source: "cache",
cost: 0,
});
return { result: cached, fromCache: true };
}
// 4. Gateway 경유 AI 호출 (SEC-P0-005)
const result = await callGeminiViaGateway(request.data.prompt);
// 5. 비용 로그 기록 (COST-P0-006)
await logAction({
userId: user.uid,
action: "ai_call",
model: result.model,
inputTokens: result.usage.inputTokens,
outputTokens: result.usage.outputTokens,
estimatedCost: result.usage.estimatedCost,
});
// 6. 민감 원문은 서버에서만 처리, 클라이언트에는 참조 ID 반환 (SEC-P0-009)
const responseRef = await storeResponse(result.text);
return { responseId: responseRef.id, summary: result.summary };
});typescript
// functions/src/gateway/ai-gateway.ts
// 禁止直接调用外部API,必须经过该Gateway
import { onCall, HttpsError } from "firebase-functions/v2/https";
import { verifyRole } from "../auth/rbac";
import { logAction } from "../logging/audit";
import { checkCache } from "../cache/cost-cache";
export const callAIModel = onCall(async (request) => {
// 1. 服务端权限校验(AUTH-P0-003)
const user = await verifyRole(request.auth, ["admin", "manager"]);
// 2. 阻断Guest访问(AUTH-P0-002)
if (user.role === "guest") {
throw new HttpsError("permission-denied", "Access denied");
}
// 3. 优先查询缓存(COST-P0-011)
const cached = await checkCache(request.data.prompt);
if (cached) {
await logAction({
userId: user.uid,
action: "ai_call",
source: "cache",
cost: 0,
});
return { result: cached, fromCache: true };
}
// 4. 经过Gateway调用AI(SEC-P0-005)
const result = await callGeminiViaGateway(request.data.prompt);
// 5. 记录成本日志(COST-P0-006)
await logAction({
userId: user.uid,
action: "ai_call",
model: result.model,
inputTokens: result.usage.inputTokens,
outputTokens: result.usage.outputTokens,
estimatedCost: result.usage.estimatedCost,
});
// 6. 敏感原文仅在服务端处理,仅向客户端返回引用ID(SEC-P0-009)
const responseRef = await storeResponse(result.text);
return { responseId: responseRef.id, summary: result.summary };
});타 스킬과의 관계
与其他Skill的关系
bmad-orchestrator와의 연동
与bmad-orchestrator的联动
bmad-orchestratorai-tool-compliance권장 사용 순서:
- (bmad) -- 프로젝트 구조 수립
/workflow-init - (compliance) -- 컴플라이언스 기반 구조 생성
/compliance-init - Phase 3 Architecture 완료 후 -- 아키텍처 수준 컴플라이언스 점검
/compliance-scan - Phase 4 Implementation 완료 후 -- 전수 검증 + 배포 게이트 판정
/compliance-verify
bmad-orchestratorai-tool-compliance推荐使用顺序:
- (bmad) -- 搭建项目结构
/workflow-init - (compliance) -- 生成基于合规的基础结构
/compliance-init - 完成第3阶段架构设计后执行-- 架构层面合规检查
/compliance-scan - 完成第4阶段开发实现后执行-- 全量验证 + 部署门禁判定
/compliance-verify
security-best-practices와의 관계
与security-best-practices的关系
security-best-practicesai-tool-compliance| 항목 | security-best-practices | ai-tool-compliance |
|---|---|---|
| RBAC | 일반 언급 | 5역할 + 게임/메뉴/기능 단위 매트릭스 |
| API 보안 | Rate Limiting, CORS | Gateway 강제 + 비용 로그 |
| 데이터 보호 | XSS, CSRF, SQL Injection | 민감 원문 서버 처리 + Firestore 정책 |
| 로그 | 보안 이벤트 로깅 | 전수 행동 로그 + 스키마/보관 정책 |
| 배포 게이트 | 없음 | 준수 점수 기반 자동 차단 |
security-best-practicesai-tool-compliance| 项 | security-best-practices | ai-tool-compliance |
|---|---|---|
| RBAC | 通用说明 | 5角色 + 游戏/菜单/功能维度矩阵 |
| API安全 | 限流、CORS | 强制Gateway + 成本日志 |
| 数据保护 | XSS、CSRF、SQL注入 | 敏感原文服务端处理 + Firestore策略 |
| 日志 | 安全事件日志 | 全量操作日志 + Schema/存储策略 |
| 部署门禁 | 无 | 基于合规分数的自动阻断 |
code-review와의 관계
与code-review的关系
code-reviewai-tool-compliance/compliance-scancode-reviewai-tool-compliance/compliance-scanworkflow-automation과의 관계
与workflow-automation的关系
workflow-automationai-tool-complianceworkflow-automationai-tool-compliancescripts/ 디렉토리 상세 구현
scripts/目录详细实现
install.sh -- 스킬 설치 및 초기화
install.sh -- Skill安装及初始化
bash
bash scripts/install.sh [options]
--dry-run 변경 없이 미리보기
--skip-checks 의존성 확인 건너뛰기수행 내용:
- 의존성 확인 (yq, jq -- 선택적, 없으면 기본 파싱 사용)
- 모든 scripts/*.sh에 chmod +x 적용
- rules/p0-catalog.yaml YAML 구문 검증
- 설치 완료 요약 출력
bash
bash scripts/install.sh [options]
--dry-run 预览变更,不实际修改
--skip-checks 跳过依赖检查执行内容:
- 依赖检查(yq、jq -- 可选,不存在则使用默认解析)
- 给所有scripts/*.sh添加chmod +x权限
- 验证rules/p0-catalog.yaml的YAML语法
- 输出安装完成摘要
verify.sh -- P0 룰 전수 검증
verify.sh -- 全量验证P0规则
bash
bash scripts/verify.sh [--rule RULE_ID] [--output JSON_PATH]수행 내용:
- 파싱 (yq 또는 grep 기반)
rules/p0-catalog.yaml - 각 룰에 대해:
- Glob으로 대상 파일 수집
check_targets - 로 기능 사용 여부 탐지 (미사용 시 N/A)
grep_patterns - 위반 탐지 (exclude_paths 제외)
must_not_contain - 준수 확인
must_contain - Pass/Fail/Warning/N/A 판정 + evidence 수집
- 결과를 형식으로 출력
templates/verification-run.json - 콘솔에 요약 테이블 출력
bash
bash scripts/verify.sh [--rule RULE_ID] [--output JSON_PATH]执行内容:
- 解析(基于yq或grep)
rules/p0-catalog.yaml - 针对每个规则:
- 通过Glob收集目标文件
check_targets - 通过检测是否使用对应功能(未使用则标记N/A)
grep_patterns - 检测违规(排除exclude_paths)
must_not_contain - 检查是否符合要求
must_contain - 判定Pass/Fail/Warning/N/A + 收集证据
- 通过
- 按格式输出结果
templates/verification-run.json - 控制台输出摘要表格
score.sh -- 준수 점수 산출
score.sh -- 计算合规分数
bash
bash scripts/score.sh [--input VERIFY_JSON] [--verbose]수행 내용:
- verify.sh 결과 JSON 로드 (또는 직접 verify.sh 실행)
- 영역별 점수 계산:
- Pass=배점 100%, Warning=배점 50%, Fail=0%, N/A=분모 제외
- 보안: SEC 룰 점수 합 / 보안 만점(35)
- 권한: AUTH 룰 점수 합 / 권한 만점(30)
- 비용: COST 룰 점수 합 / 비용 만점(20)
- 로그: LOG 룰 점수 합 / 로그 만점(15)
- 총점 산출 (100점 만점)
- 렌더링
templates/risk-score-report.md - 생성 (각 FAIL 항목별)
templates/remediation-task.json
bash
bash scripts/score.sh [--input VERIFY_JSON] [--verbose]执行内容:
- 加载verify.sh的结果JSON(或直接执行verify.sh)
- 计算维度分数:
- Pass=得满分、Warning=得50%分、Fail=得0分、N/A=不计入分母
- 安全: SEC规则得分总和 / 安全满分(35)
- 权限: AUTH规则得分总和 / 权限满分(30)
- 成本: COST规则得分总和 / 成本满分(20)
- 日志: LOG规则得分总和 / 日志满分(15)
- 计算总分(满分100)
- 渲染
templates/risk-score-report.md - 生成(对应每个FAIL项)
templates/remediation-task.json
gate.sh -- 배포 게이트 체크
gate.sh -- 部署门禁检查
bash
bash scripts/gate.shbash
bash scripts/gate.shexit 0 = Green (배포 승인)
exit 0 = Green(批准部署)
exit 1 = Red (배포 차단)
exit 1 = Red(阻断部署)
exit 2 = Yellow (조건부 -- PM 확인 필요)
exit 2 = Yellow(有条件 -- 需PM确认)
수행 내용:
1. verify.sh + score.sh 순차 실행
2. P0 FAIL 존재 여부 확인
- 1건이라도 있으면 → Red (exit 1)
3. 총점 기반 등급 판정
- 90+ → Green (exit 0)
- 75~89 → Yellow (exit 2)
- 74 이하 → Red (exit 1)
4. 등급 + 점수 + 수정 필요 목록 콘솔 출력
**CI/CD 통합 예시 (GitHub Actions)**:
```yaml
执行内容:
1. 顺序执行verify.sh + score.sh
2. 检查是否存在P0 FAIL
- 存在1项及以上 → Red(exit 1)
3. 基于总分判定等级
- 90+ → Green(exit 0)
- 75~89 → Yellow(exit 2)
- 74以下 → Red(exit 1)
4. 控制台输出等级 + 分数 + 需修改项列表
**CI/CD集成示例(GitHub Actions)**:
```yaml.github/workflows/compliance-gate.yml
.github/workflows/compliance-gate.yml
name: Compliance Gate
on: [pull_request]
jobs:
compliance:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run compliance gate
run: bash .agent-skills/ai-tool-compliance/scripts/gate.sh
<!-- TODO: System 결과 보완 예정 - GitHub Actions 워크플로우 통합 YAML -->
---name: Compliance Gate
on: [pull_request]
jobs:
compliance:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run compliance gate
run: bash .agent-skills/ai-tool-compliance/scripts/gate.sh
<!-- TODO: 后续补充系统输出 - GitHub Actions流水线集成YAML -->
---P1 권장 요건 (점진 도입)
P1建议要求(逐步落地)
P0 전수 통과 후 점진적으로 도입을 권장하는 항목:
| 영역 | 요건 | 설명 |
|---|---|---|
| 도메인 관리 | 허용 도메인 화이트리스트 | AI Gateway가 호출할 수 있는 외부 도메인 제한 |
| 사용량 통계 | 사용자별/팀별 사용량 집계 | 일/주/월 단위 사용량 대시보드 |
| 비용 통제 | 예산 상한 알림 | 팀/프로젝트별 비용 임계값 초과 시 알림 |
| 로그 보관 | 로그 보관 정책 | 90일 Hot / 365일 Cold / 이후 삭제 정책 |
全量通过P0后推荐逐步落地的项:
| 维度 | 要求 | 描述 |
|---|---|---|
| 域名管理 | 允许域名白名单 | 限制AI Gateway可调用的外部域名 |
| 使用量统计 | 按用户/团队聚合使用量 | 日/周/月维度使用量大盘 |
| 成本管控 | 预算上限通知 | 团队/项目维度成本超过阈值时发送通知 |
| 日志存储 | 日志存储策略 | 90天热存储 / 365天冷存储 / 到期删除策略 |
Constraints
约束
필수 규칙 (MUST)
必备规则(MUST)
- P0 절대 원칙: P0 룰 11개는 예외 없이 검증한다. 부분 검증은 허용하지 않는다
- 서버 최종 검증: 모든 권한 판정은 서버에서 수행한다. 클라이언트 검증만으로는 PASS 불가
- Gateway 강제: 외부 AI API 직접 호출이 발견되면 무조건 FAIL. 우회 허용 불가
- Guest 기본값: 신규 가입 시 Guest 외 역할 할당이 발견되면 FAIL
- 증거 기반 판정: 모든 pass/fail은 코드 증거(파일 경로 + 라인 번호)를 첨부한다
- P0绝对原则:11项P0规则无例外全部验证,不允许部分验证
- 服务端最终校验:所有权限判定在服务端执行,仅靠客户端校验无法判定PASS
- 强制Gateway:发现直接调用外部AI API直接判定FAIL,不允许绕过
- Guest默认角色:发现新用户注册时分配非Guest角色直接判定FAIL
- 证据判定原则:所有通过/不通过判定必须附带代码证据(文件路径 + 行号)
금지 사항 (MUST NOT)
禁止事项(MUST NOT)
- P0 예외 승인 남용: P0 예외는 CEO 승인 없이 절대 허용하지 않는다
- 점수 조작: Evidence 없는 PASS 판정 금지
- Gateway 우회: "테스트 목적" 등의 이유로 외부 API 직접 호출을 허용하지 않는다
- 로그 선택적 기록: 성공 요청만 기록하고 실패 요청을 누락하는 것을 허용하지 않는다
- 滥用P0例外审批:无CEO批准绝对不允许P0例外
- 分数造假:禁止无证据判定PASS
- 绕过Gateway:不允许以「测试目的」等理由直接调用外部API
- 选择性记录日志:不允许仅记录成功请求、遗漏失败请求
Best practices
最佳实践
- Shift Left: 프로젝트 시작 시 으로 기반 구조를 먼저 생성한 후 비즈니스 로직을 구현한다
/compliance-init - 점진적 도입: P0 전수 통과 -> P1 순서로 도입한다. P1부터 시작하지 않는다
- 재검증 루프: 위반 수정 후 반드시 를 재실행하여 점수 변화를 확인한다
/compliance-verify - BMAD 연동: bmad-orchestrator Phase 4 완료 후 compliance-verify를 실행하는 것을 표준 워크플로우로 채택한다
- CI/CD 통합: GitHub Actions에 compliance-gate 단계를 추가하여 자동화한다
- 左移验证:项目启动时先通过生成基础结构,再实现业务逻辑
/compliance-init - 逐步落地:先全量通过P0,再落地P1要求,不要从P1开始落地
- 重验证循环:修复违规后必须重新执行确认分数变化
/compliance-verify - BMAD联动:将bmad-orchestrator第4阶段完成后执行compliance-verify作为标准工作流
- CI/CD集成:在GitHub Actions中添加compliance-gate阶段实现自动化
References
参考
- 내부 AI 툴 필수 구현 가이드 v1.1 (Notion)
- OWASP Top 10
- Firebase Security Rules
- Cloud Functions for Firebase
- 内部AI工具必备实现指南v1.1(Notion)
- OWASP Top 10
- Firebase Security Rules
- Cloud Functions for Firebase
Metadata
元数据
버전
版本
- 현재 버전: 1.0.0
- 최종 업데이트: 2026-03-03
- 호환 플랫폼: Claude, Gemini, Codex, OpenCode
- 当前版本: 1.0.0
- 最后更新: 2026-03-03
- 兼容平台: Claude, Gemini, Codex, OpenCode
관련 스킬
关联Skill
- bmad-orchestrator: 개발 단계 오케스트레이션
- security-best-practices: 범용 웹 보안 패턴
- code-review: 코드 품질/보안 리뷰
- workflow-automation: CI/CD 자동화 패턴
- authentication-setup: 인증/인가 시스템 구축
- firebase-ai-logic: Firebase AI 통합
- bmad-orchestrator: 开发阶段编排
- security-best-practices: 通用Web安全模式
- code-review: 代码质量/安全评审
- workflow-automation: CI/CD自动化模式
- authentication-setup: 认证/授权系统搭建
- firebase-ai-logic: Firebase AI集成
태그
标签
#compliance#RBAC#security#cost-tracking#audit-log#gateway#firestore#deploy-gate#P0#AI-tool#compliance#RBAC#security#cost-tracking#audit-log#gateway#firestore#deploy-gate#P0#AI-tool