LLM 거버넌스 매트릭스 — 왜 귀하의 AI 보안은 트리 구조에서 시작됩니까?
게시: 04 May 2026
몇 달 동안 나는 에이전트 거버넌스 규칙을 쌓아 올렸다. 파일들 EAGER, LAZY 체크리스트, 여섯 단계 세션 종료 프로토콜. 그리고, 여전히 해결되지 않은 질문이 하나 남아 있었다: comment le LLM sait-il ce qu’il 파일에 대해 할 권리가 있다 ?
답은 프롬프트에 있지 않습니다. 파일 시스템에 있습니다.
다음은 응답을 이용할 수 있게 하는 아키텍처 사양입니다 — la LLM 거버넌스 매트릭스.
문제: 프롬프트 엔지니어링은 모래성이다
LLM에 파일을 주면 그 모든 것을 주는 것 같아요. 내용이죠 — 그리고 보호 장치의 부재도 있다. LLM은 이 파일이 포함하고 있는지 모른다. 비밀, 추측적인 의견, 또는 폐쇄형 소스 코드. 그는 그것을 색인화할 것, 요약하고, 인용하고, 다른 데이터와 섞는 것 — 그리고 잠재적으로 공개 임베딩 또는 사용자 응답에 게시하다.
고전적인 퍼레이드, 그것은 프롬프트:
"Tu es un assistant sécurisé. Ne divulgue jamais d'informations confidentielles.
Si tu détectes un secret, ignore-le. Si tu détectes une opinion, ne la répète pas."
이 프롬프트에는 세 가지 문제가 있습니다.
-
LLM의 선의에 의존합니다. 충분히 큰 모델은
복잡한 버그를 해결하는 것은 충분히 커서 명령어를 우회할 수 있다 보안의 200k 토큰의 맥락 속에 잠긴
-
이것은 문맥적이며 구조적이지 않다. 프롬프트를 바꾸고, LLM을 바꾸라,
세션을 바꾸면 — 규칙이 사라집니다.
-
확장되지 않습니다. 각 새로운 파일 유형, 각 새로운 레벨
개인정보 보호는 새로운 조항이 필요합니다. 당신의 프롬프트는 아무도 다 읽지 않는 규정 텍스트
|
시스템의 보안은 절대 우리가 하는 명령에 의존해서는 안 된다 잊을 수도, 우회하거나 로드하지 않을 수도 있습니다. 그녀는 하나의 것에 의존해야 합니다. 명시적으로 원하지 않는 한 넘을 수 없는 장벽. |
내 답변: 4×4 행렬
내가 워크스페이스에서 구현한 솔루션은 영역 행렬 × LLM. 그녀는 LLM에게 주의하도록 요구하지 않는다. 그녀는 구조적으로 불가능한 무모함.
@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultTextAlignment center
skinparam wrapWidth 220
title LLM 거버넌스 매트릭스 — 영역 × 접근 권한
package "작업 공간" {
rectangle "RACINE
(원 0)
━━━━━━
뇌 덤프
자유로운 생각
[LLM 사용 금지]" as Z0 #FFB3B3
rectangle "configuration/
(원 1)
━━━━━━
비밀, 토큰
프라이빗 인프라
[금지 LLM]" as Z1 #FFB3B3
rectangle "office/
(원 2)
━━━━━━
편집 데이터
기사, 프레임
[필터링된 Vision]" as Z2 #FFF3B3
rectangle "foundry/private/
(원 3)
━━━━━━
Code closed source
[DATASET 비공개]" as Z3 #B3D9FF
rectangle "foundry/public/
(3번째 원)
━━━━━━
오픈 소스 코드
Apache 2.0
[자유 접근]" as Z4 #B3FFB3
}
Z0 -[hidden]-> Z1
Z1 -[hidden]-> Z2
Z2 -[hidden]-> Z3
Z3 -[hidden]-> Z4
@enduml
다섯 개 구역 (공간 차원 — RGPD)
워크스페이스의 각 영역에는 파일이 저장될 수 있는 *어디*를 결정하는 GDPR 수준이 있습니다. 라우팅되다 :
구역 |
일반 개인정보 보호 규정 수준 |
내용 |
공개 RAG 접근 권한 |
뿌리 |
0 — 친밀한 |
브레인 덤프, LLM 대화 |
금지— 절대 색인되지 않음 |
|
1 — 제한된 소유주 |
시크릿, 토큰, API 키 |
금지— 절대 색인되지 않음 |
|
2 — 제한적 협업 |
편집 데이터, 구도, 교육 |
필터링된— 시각만 |
|
3 — 조건부 개방 |
소스 코드가 비공개인, 공개되지 않은 SaaS |
금지— 전용 프라이빗 데이터셋 |
|
4 — 네이티브 대중 |
아파치 2.0 코드, 공개된 플러그인 |
자유— 전체 색인 |
규칙은 간단합니다: 파일 경로가 LLM이 그것을 할 수 있는 것을 결정합니다. 유지해야 할 메타데이터도 없고, frontmatter에 추가할 태그도 없습니다, 각 커밋마다 수동 분류는 없습니다. 파일이 …에 있습니다.OSS/? 공개되어 있습니다. 안에 있습니다`configuration/`? 그는 손댈 수 없다.
인식론적 분류 (두 번째 차원)
공간 차원은 어디*로 라우트할지를 말한다. 하지만 수직인 두 번째 축이 있습니다: *뭐 라우터. 일부 파일은 허가된 구역에 있는 정보를 포함하고 있습니다. 희석해서는 안 되는 것들:
@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultTextAlignment center
skinparam wrapWidth 240
title 이중 캐스케이드 — 공간 필터 + 인식론적 필터
start
:Le LLM rencontre un fichier;
if (Zone physique ?) then (Cercle 0-1)
:ACCÈS BLOQUÉ\n(secret, brain dump);
stop
elseif (Zone CSS/)
:DROIT D'ACCÈS PRIVÉ\n→ dataset fine-tuning;
:Filtre épistémique\nVision/Opinion;
if (Classification ?) then (VISION)
:Dataset privé\n→ entraînement autorisé;
else (OPINION)
:CONFINÉ\n→ pas d'entraînement;
endif
elseif (Zone office/)
:DROIT D'ACCÈS FILTRÉ\n→ accès conditionnel;
:Filtre épistémique\nVision/Opinion/Stratégie;
if (Classification ?) then (VISION)
:DILUTION COMPLÈTE\n→ docs racine + blog;
elseif (STRATÉGIE)
:DILUTION RESTREINTE\n→ docs racine seulement;
else (OPINION)
:CONFINEMENT\n→ office/ uniquement;
endif
else (Zone OSS/)
:ACCÈS LIBRE\n→ indexation complète;
endif
stop
@enduml
에피스테믹 분류 그리드, 나의 통치에 새겨진 규칙 2bis 에이전트 :
| 상태 | 정의 | LLM 신호 | 목적지 | | 비전 | 안정된 아키텍처, 테스트된 패턴 | 선언적 언어, 세션/테스트 참조 | 완전한 희석 + 블로그 | | 전략 | 비즈니스 포지셔닝, 가격 | 시장 어휘, 경쟁 | 루트 문서만 | | OPINION | 추측, 검증되지 않은 가설 | 가설적 언어, 직감 | 격리 구역 0 |
두 차원의 결합 — 물리적 영역 × 인식론적 분류 — 형의완전한 행렬:
@startuml
skinparam backgroundColor #FEFEFE
title 완전한 매트릭스 — 구역 × 분류
salt
{
{T
+ Zone | VISION | STRATÉGIE | OPINION
+ Racine (0) | ✗ Interdit | ✗ Interdit | ✗ Interdit
+ configuration/ (1) | ✗ Interdit | ✗ Interdit | ✗ Interdit
+ office/ (2) | ✓ Docs + Blog | ✓ Docs seulement | ✗ Confiné
+ CSS/ (3) | ✓ Dataset privé | ✓ Dataset privé | ✗ Confiné
+ OSS/ (4) | ✓ Public libre | ✓ Public libre | ✓ Public libre
}
}
@enduml
LLM이 이 행렬을 어떻게 소비하는가
행렬은 LLM이 읽는 문서가 아닙니다. 이것은 제약 암시된 인코딩된 컨텍스트 복합 벡터에 (EPIC 9 — 진행 중 구현의)
다음은 LLM이 각 세션에서 받는 내용 :
VECTEUR COMPOSITE DE CONTEXTE
├── RAG pgvector → OSS/ + office/Vision
│ (similarité sémantique sur contenu publiable)
├── Knowledge Graph graphify → OSS/
│ (relations exactes entre artéfacts publics)
├── Knowledge Graph privé → CSS/
│ (relations entre code closed source — jamais exporté)
├── Métadonnées de zone → chaque fichier taggé par zone physique
│ (le LLM sait s'il est dans office/ ou OSS/)
└── Historique des décisions → WORKSPACE_VISION.adoc
(contexte temporel des arbitrages)
구체적으로, LLM이 내게 말할 때:
Je vais indexer le contenu de edster/ pour enrichir le knowledge graph...
영역 메타데이터는 LLM이 문장을 마치기도 전에 응답합니다 : edster/`에 있다`CSS/, 레벨 3 →공개 지식 그래프에 대한 접근이 금지되었습니다. RAG는 그것을 보지 못한다. 그래프는 그것을 만지지 않는다. 사용자 응답은 그는 그것을 인용하지 않는다.
|
공간 온톨로지는처럼 작동한다유닉스 권한LLM용. 당신은 프로세스가 조심하기를 요구하지 않는다`/etc/shadow`— 그에게 읽기 접근을 거부합니다. 같은 원칙입니다. |
구현 : 타입이 지정된 Gradle 작업
매트릭스는 철학이 아니다. 이것은 코드이다. 다음은 작업 계약이다. 구현한 Gradle :
abstract class ZoneAwareIndexer @Inject constructor(
private val rootDir: DirectoryProperty,
private val configServer: ConfigServerProperty // → configuration/
) : DefaultTask() {
@Input
val zoneFilter: SetProperty<Zone> = project.objects.setProperty(Zone::class.java)
@OutputFile
val ragIndex: RegularFileProperty = project.objects.fileProperty()
@TaskAction
fun index() {
val allowedPaths = zoneFilter.get().flatMap { it.resolve(rootDir.get()) }
val forbiddenPaths = Zone.RESTRICTED.resolve(rootDir.get())
+ Zone.INTIMATE.resolve(rootDir.get())
// Le RAG ne voit jamais configuration/ ni la racine
// CSS/ alimente un index privé, pas celui-ci
// office/ est filtré par le classifieur Vision/Opinion
}
}
enum class Zone {
INTIMATE, // Cercle 0 — racine
RESTRICTED, // Cercle 1 — configuration/
EDITORIAL, // Cercle 2 — office/
CLOSED_SOURCE, // Cercle 3 — foundry/private/
OPEN_SOURCE // Cercle 3 — foundry/public/
}
작업은 *testable*입니다. 검증할 수 있는 테스트를 작성할 수 있습니다:
@Test
fun `le RAG n'indexe jamais configuration`() {
val index = ZoneAwareIndexer(rootDir, configServer)
index.zoneFilter.set(setOf(Zone.OPEN_SOURCE, Zone.EDITORIAL))
index.index()
assertThat(index.ragIndex).doesNotContain("configuration/")
}
@Test
fun `le code closed source est exclu du RAG public`() {
val index = ZoneAwareIndexer(rootDir, configServer)
index.zoneFilter.set(setOf(Zone.OPEN_SOURCE)) // OSS only
assertThat(index.ragIndex).doesNotContain("edster")
}
380 테스트, 380 통과. plantuml-gradle처럼 — 보안이 테스트됨, 예상치 못한
왜 이것이 선언문이지, 단순한 사양이 아닌가?
이 문서는 아키텍처 사양입니다. 왜냐하면 다음과 같이 정의하기 때문입니다 :
-
몇치수(공간적, 인식론적)
-
몇몇결정론적 규칙(구역 → 접근 권한)
-
Un 과업 계약(타입된 Gradle, 테스트 가능한)
-
하나참조 구현(내 워크스페이스)
하지만 그것은 또한선언문그는 논쟁에 입장을 취하기 때문에 더 큰: LLM의 데이터 접근을 어떻게 관리할 수 있을까?
산업계의 답은 프롬프트 엔지니어링 + 가드레일
사후 분류기. 내 답변은 : 당신의 파일을 안에 올바른 파일들. 나머지는 자동입니다.
|
이 선언문은 "LLM은 정렬되어야 한다"고 말하지 않습니다. 그것은 말합니다 : "정렬 당신의 보안 규칙에 대한 LLM은 당신의 시스템의 결과이다 파일, 당신의 프롬프트가 아닙니다. |
완전한 폭포 — Brain Dump에서 블로그 글까지
완전한 주기를 보여주기 위해, 이 행렬 아이디어가 어떻게 탄생했는지 보여줍니다 그리고 희석되었습니다 :
Session 4 mai 2026 — Feedback global du workspace
│
├→ Le LLM identifie : "la dualité public/privé est invisible"
│ → Classifié VISION (constat architectural vérifiable)
│
├→ PICTURE_ME_ROLLIN_MATRICE_4X4.adoc — STIMULUS (Cercle 0)
│ → Brain dump structuré, classification VISION confirmée
│
├→ DILUTION → WORKSPACE_AS_PRODUCT.adoc (section Matrice 4×4)
│ → La spec vit dans les documents racine
│
├→ DILUTION → WORKSPACE_ORGANIZATION.adoc (OSS/CSS)
│ → La granularisation est documentée
│
└→ ARTICLE 0117 (ce document) → cheroliv.com
→ La VISION est publiée
세션 중에 이루어진 관찰로 시작된 것 ("야, RAG은 몰라 에드스터가 closed source가 되었다") 아키텍처 사양이 되었다 한 세션 미만으로 발표되었습니다. 이것이 STIMULUS 패턴이 동작 중입니다.
찬성/반대
| 이 접근법 (공간 온톨로지 + 행렬) | 클래식 접근법 (프롬프트 + 가드레일) |
|---|---|
기계 — 파일 시스템이 접근을 차단하고, LLM은 아니다 |
선언적 — 프롬프트가 LLM에게 신중하도록 요청합니다 |
Testable — Gradle 태스크 계약은 380개 이상의 테스트에 의해 검증됩니다. |
테스트할 수 없는 — "LLM이 규칙을 따랐나요?"는 개방형 질문입니다. |
LLM에 독립적입니다 — 모델을 바꾸면, 폴더는 그대로 유지됩니다. |
LLM에 의존하는 — 각 모델은 프롬프트를 다르게 해석합니다 |
확장 가능 — 새로운 데이터 유형 = 새 폴더, 코드 변경 없음 |
확장 불가능한 — 새로운 데이터 유형 = 새로운 프롬프트 조항, 새로운 회귀 위험 |
Auditable — 파일 시스템은 감사 추적입니다. |
감사할 수 없는 — 프롬프트는 기록이 없고, diff가 없고, 비난이 없다 |
제약 : 초기 조직적 규율을 요구한다. |
제약 : 매 세션마다 프롬프트 작성의 규율을 요구한다 |
결론: 파일을 정리하고, 프롬프트를 정리하지 마세요.
내가 방금 설명한 LLM 거버넌스 매트릭스는 제품이 아닙니다. 이것은 하나의아키텍처 사양— 그녀가 그런 거야. 게시 가능한.
그녀를 강건하게 만드는 것은, 그녀가 LLM에 아무것도 요구하지 않기 때문이다. 그녀는 그에게 믿지 않는다. 그것은 그의 정렬이나 이해에 의존하지 않는다. 프랑스어의, 또는 그녀의 선의에 달려 있습니다. 그녀는 파일 시스템에 기반을 두고 있습니다 — 전체 스택에서 가장 낮고, 가장 안정적이며, 가장 테스트된 계층.
내가 내 LLM에게 '모든 것을 인덱싱할 수 있어’라고 말할 때`OSS/, 아무것도 `configuration/, et office/ 그것 Vision으로 분류된 경우에만" — 이것은 지시가 아닙니다. 이것은 필터 — Kotlin에서 구현된, 380 테스트에 의해 검증됨, LLM이 데이터를 보기 전에 실행됨
그 사람에게 "이 서랍을 보지 마"라고 말하는 것과의 차이입니다 그리고 열쇠 서랍을 닫습니다. 내가 지금까지 구축하고 있는 에이전트 거버넌스 개월이 핵심이다. 매트릭스는 가구의 도면이다.
참고문헌
-
제 0114조 — 신뢰의 원과 공간 온톨로지
관련 기사
31 May 2026
14 May 2026