본문으로 건너뛰기

WriteGuard로 MCP 쓰기 제어하기

Cloudflare가 MCP 서버에서 에이전트의 쓰기 작업을 정책·귀속·감사로 통제하는 WriteGuard를 도입했다.

이 요약은 AI가 원문을 분석해 생성했습니다. 정확한 내용은 원문 기준으로 확인하세요.

TL;DR

Cloudflare는 에이전트가 MCP를 통해 수행하는 쓰기 작업을 중앙에서 통제하기 위해 WriteGuard를 도입했고, 툴별 리스크 티어로 허용·귀속·차단을 결정한다. WriteGuard는 직원 신원을 유지하되 MCP 클라이언트와 세션 문맥을 붙여 에이전트 귀속을 기록하고, 민감값을 스크럽한 감사 이벤트를 비동기로 중앙 저장소로 보낸다. 이 방식은 여러 MCP 서버 전반에서 일관된 쓰기 정책과 쿼리 가능한 감사 추적을 가능하게 한다.

섹션별 상세

문제 맥락은 에이전트가 사람 대신 빠른 속도로 쓰기 작업을 반복할 때 발생하는 권한과 추적의 혼란이다. Cloudflare 사례에서는 에이전트가 광범위한 청소 작업으로 수천 건의 티켓을 닫아 실제 직원의 수작업과 섞여 버렸다. 이로 인해 누가 무슨 행동을 했는지 네트워크 로그만으로는 구분할 수 없었기 때문에 중앙 통제와 귀속 정보가 필요했다.
아키텍처 측면에서는 MCP(Model Context Protocol)를 통해 에이전트가 툴을 호출하면 MCP 서버가 다운스트림 애플리케이션과 상호작용하는 흐름이 기본이다. WriteGuard는 이 흐름 앞단에서 툴 구성과 요청 컨텍스트를 결합해 허용·수정·차단의 결정을 내린다. 그 결과로 에이전트 귀속이 쓰기 필드에 삽입되거나, 차단 결과가 즉시 반환되거나, 익명화된 감사 이벤트가 비동기적으로 생성된다.
정책 모델은 툴 단위로 위험 등급과 활성화 상태, 라벨링 포맷을 정의하는 방식이다. 위험 등급은 READ_ONLY, MINIMAL_IMPACT, CONTAINED_WRITE, CRITICAL로 구분되며 각 등급은 로깅·허용 여부와 차단 동작을 결정한다. 이 구성은 TypeScript로 내부 모노레포에 정의되며 향후 포털에서 서버 소유자가 설정할 수 있게 된다.
귀속 모델은 직원 신원에 MCP 클라이언트와 세션 문맥을 덧붙이는 방식으로 구현된다. Cloudflare는 별도의 에이전트 계정을 만들지 않고 직원 권한을 유지하되, 어떤 세션이 작업을 실행했는지 메타데이터로 보관한다. 이 접근법은 권한 관리를 단순화하면서도 변경의 출처를 추적 가능하게 만든다.
감사와 모니터링은 중앙화된 비동기 로깅으로 처리되며 민감한 값은 스크럽(감춤)해서 저장한다. WriteGuard는 호출 결과를 성공·실패·차단으로 분류하고 필요한 메타데이터(서버, 툴, 리스크, 결과, 사용자, 클라이언트, 소요 시간)를 포함한 이벤트를 감사 Worker로 보낸다. 비동기 처리로 인해 호출 지연을 추가하지 않도록 설계되었다.
적용 사례로 GitLab 툴 세트를 제시하며 각 툴에 다른 동작을 적용한 점이 핵심이다. get_merge_request는 READ_ONLY로 통과시키고 create_mr_note는 CONTAINED_WRITE로 귀속 라벨을 삽입한 뒤 실행하며 merge_mr는 CRITICAL로 비활성화해 호출 자체를 차단한다. 이런 차등 처리는 동일한 MCP 흐름을 유지하면서도 팀별·툴별 요구에 맞춘 통제를 가능하게 한다.

이미지 분석

아키텍처 다이어그램
Diagram

다이어그램은 AI 에이전트와 MCP 클라이언트가 Cloudflare Access를 통해 포털로 연결되고, 요청이 WriteGuard를 거쳐 허용·수정·차단되는 흐름을 시각화한다. 허용되면 MCP 서버가 핸들러를 실행하고 결과가 분류되어 컨트롤 레이어로 반환되며, 감사 서비스는 민감 필드를 스크럽하고 중앙 감사 DB에 기록한다. 이 그림은 WriteGuard가 호출 전후 지점에서 정책 적용·귀속 삽입·비동기 감사 생성이라는 세 가지 역할을 수행한다는 구조적 근거를 보여준다.

아키텍처 다이어그램

내부 WriteGuard 대시보드 예시
Screenshot

대시보드는 총 호출 수 1,284,760건과 Critical 12,418건, Blocked 31,204건 같은 핵심 지표를 표시하며 시간에 따른 활동 증가를 선 그래프로 보여준다. 서버별 호출 분포와 리스크·결과 분포 막대가 있어 어떤 서버와 리스크 클래스에서 호출이 집중되는지 한눈에 파악할 수 있다. 이 화면은 WriteGuard가 대규모 에이전트 활동을 집계하고 리스크 기반 필터링으로 조사 가능하게 만든다는 운영적 증거를 제공한다.

내부 WriteGuard 대시보드 예시

GitLab create_mr_note 호출 예시 스크린샷
Screenshot

스크린샷은 Joe Programmmerson라는 사용자의 메시지 블록과 'MCP Agent', 'Harness: OpenCode', 'Session' 같은 메타데이터를 보여주며, 에이전트 귀속이 노트에 어떻게 표기되는지 예시로 제시한다. 이 예시는 WriteGuard가 설정된 필드에 귀속 라벨을 삽입해 다운스트림 UI에서 에이전트 세션을 읽을 수 있도록 만든다는 구체적 구현 예를 제공한다. 또한 원문 내용과 연계해 귀속 정보가 문제 해결과 책임 추적에서 유용하다는 점을 가시적으로 뒷받침한다.

GitLab create_mr_note 호출 예시 스크린샷

감사 기록 Record #233320 예시
Screenshot

감사 레코드는 create_mr_note 호출이 Contained Write로 분류되어 성공(success)으로 처리된 사례를 보여주며 서버, 툴, 사용자, 세션, 클라이언트 ID와 소요 시간(737ms)을 항목별로 나열한다. 하단의 인자(Arguments)는 'SCRUBBED'로 표시되어 민감 정보는 기록에서 제거된 채 구조적 메타데이터만 보존되는 점을 확인할 수 있다. 이 스냅샷은 비동기 감사 이벤트가 민감값을 스크럽해 중앙 DB에 안전하게 저장한다는 운영 원칙을 시각화한다.

감사 기록 Record #233320 예시

로그 브라우저에서 merge_mr 차단 항목
Screenshot

로그 브라우저는 gitlab-mcp-server-production에서 반복적으로 발생한 merge_mr 호출을 나열하며 각 항목에 Critical 리스크와 blocked 결과가 붙어 있는 것을 보여준다. 상단에는 '152 records found'와 같은 검색 결과 수가 표시되어 다수의 차단 시도가 기록되고 있음을 알 수 있다. 이 화면은 WriteGuard가 반복적·위험한 자동 호출을 포착해 중앙에서 차단 및 조사 가능하도록 하는 역할을 확인시킨다.

로그 브라우저에서 merge_mr 차단 항목

용어 해설

Model Context Protocol(MCP)
MCP는 AI 에이전트와 외부 도구를 연결하는 표준 프로토콜로, 클라이언트가 툴 호출을 서버로 전달하면 서버가 핸들러를 통해 다운스트림 애플리케이션과 상호작용한다.
에이전트 귀속(Agent Attribution)
에이전트 귀속은 사람이 아닌 에이전트가 수행한 쓰기 작업에 대해 어떤 세션과 클라이언트가 동작했는지 메타데이터로 연결하는 방식으로, 후속 조사와 UI 표시를 가능하게 한다.
리스크 티어(Risk Tier)
리스크 티어는 각 툴의 위험도를 분류해 로깅·허용·차단 정책을 결정하는 레이블 체계로, READ_ONLY·MINIMAL_IMPACT·CONTAINED_WRITE·CRITICAL 같은 단계로 운영된다.
Cloudflare Access
Cloudflare Access는 내부 MCP 서버 접근을 직원의 신원으로 인증·권한부여하는 계층으로, 에이전트는 그 직원의 권한 범위 내에서 행동한다.

코드 예제

javascript
const sendEmailTool = { tool: EmailMCP.sendEmailTool, writeGuard: { riskLevel: RiskLevel.CONTAINED_WRITE, enabled: true, labeling: { field: "body", supportedFormats: [ LabelFormat.PLAIN_TEXT, LabelFormat.HTML, ], }, }, };

이 코드 조각은 MCP 툴에 WriteGuard 정책을 붙이는 예로서 특정 툴을 CONTAINED_WRITE로 분류하고 활성화한 뒤, 에이전트 귀속을 삽입할 필드와 지원 포맷을 지정한다. 해당 설정은 서버 코드 변경 없이 포털에서 동일한 정책을 적용할 수 있게 한다. TypeScript 환경의 internal MCP monorepo에서 구성하는 방식이다.

근거 모음

근거
  • WriteGuard는 CRITICAL 등급 툴에 대해 실행 전에 요청을 차단하고 차단 시도를 기록한다. 글의 GitLab 사례에서 merge_mr를 CRITICAL로 분류하고 disabled로 설정해 WriteGuard가 핸들러 실행 전 차단한다고 기술한 단락과 차단 이벤트를 보여주는 대시보드 스크린샷.
  • WriteGuard는 CONTAINED_WRITE 툴을 호출할 때 에이전트 귀속 정보를 구성된 필드 포맷으로 삽입하고 그 호출을 정상 실행시킨다. create_mr_note 사례에서 WriteGuard가 구성된 note 필드에 에이전트 라벨을 추가한 뒤 툴 핸들러를 호출한다고 서술한 문단과 create_mr_note 스크린샷.
  • 모든 호출은 성공·실패·차단으로 분류되어 민감값을 스크럽한 감사 이벤트로 중앙 감사 데이터베이스에 비동기 전송된다. WriteGuard가 결과를 분류하고 비동기 감사 Worker로 스크럽된 이벤트를 전송한다는 기술적 설명과 내부 대시보드의 총합 통계 및 로그 브라우저 이미지.

기술

  • MCP
  • WriteGuard
  • Cloudflare Access
  • GitLab
  • OpenCode
  • TypeScript

활용 사례

  • 에이전트가 MR에 코멘트를 남기도록 허용하면서 코멘트 필드에 귀속 라벨을 삽입하는 경우
  • 중요한 병합 또는 배포 트리거는 사람 검증 없이 에이전트가 실행하지 못하도록 차단하는 경우
  • 여러 MCP 서버 전반의 에이전트 활동을 중앙에서 쿼리하고 감사하는 경우
AI 분석 전체 내용 보기

AI 요약 · 북마크 · 개인 피드 설정 — 무료

출처 · 인용 안내

원문 발행 2026. 08. 05.수집 2026. 08. 05.출처 타입 RSS

인용 시 "요약 출처: AI Trends (aitrends.kr)"를 표기하고, 사실 확인은 원문 보기 기준으로 진행해 주세요. 자세한 기준은 운영 정책을 참고해 주세요.