EmDash CMS 플러그인 런타임 및 보안 모델
EmDash가 신뢰 플러그인과 샌드박스 플러그인 실행을 어떻게 분리하는지, 보안 경계에 Dynamic Workers가 왜 중요한지 이해합니다.
이 모델이 존재하는 이유
대부분의 CMS 플러그인 생태계는 같은 경계에서 실패합니다. 확장이 너무 많은 권한으로 실행됩니다.
EmDash는 플러그인 실행 모드를 분리하고 기능 경계를 명시적으로 만듦으로써 이를 다룹니다.
두 가지 실행 등급
신뢰 플러그인
- 애플리케이션 런타임의 일부로 로드됨
- 소유하거나 완전히 신뢰하는 코드에 적합
- 운영은 단순하지만 보안은 검토 규율에 달림
샌드박스 플러그인
- 격리된 worker 환경에서 실행됨
- 신뢰할 수 없거나 반신뢰 확장 로직용으로 설계됨
- 명시적 기능, 런타임 제한, 네트워크 규칙으로 제약됨
보안 자세는 플러그인 의도보다 런타임 격리 보장에 더 의존합니다.
아키텍처에서의 Dynamic Workers
Dynamic Workers는 Cloudflare에서 샌드박스 실행에 쓰이는 격리 원시 요소입니다.
없으면 샌드박스 모드를 사용할 수 없으며, 신뢰 플러그인 가정으로만 운영해야 합니다.
실무적으로:
- 무료 플랜: 코어 CMS는 동작, 샌드박스 플러그인 모드는 불가
- Dynamic Workers가 있는 유료 플랜: 샌드박스 모델 사용 가능
기능 모델: 기본적으로 최소 권한
플러그인은 필요한 것만 선언해야 합니다.
- 콘텐츠 읽기
- 특정 콘텐츠 도메인 쓰기
- 아웃바운드 네트워크 엔드포인트 호출
- 선택된 워크플로 훅 트리거
부여되지 않은 기능이면 작업은 결정적으로 실패해야 합니다. 이는 설계 요구사항이며 최선의 노력 수준의 예의가 아닙니다.
// 예: 기능 범위를 명시적으로 유지
export default definePlugin({
id: "notify-on-publish",
capabilities: ["read:content", "email:send"]
});
중요한 런타임 가드레일
보안과 신뢰성 모두 하드 리미트에 달려 있습니다.
- CPU 및 벽시계(wall-time) 제한이 폭주 핸들러 방지
- 메모리 상한이 남용과 실수 누수 제약
- 네트워크 정책이 임의 유출 시도 차단
이 제어는 플러그인 실패를 플랫폼 장애가 아닌 경계 있는 사건으로 바꿉니다.
한 페이지로 보는 위협 모델
서드파티 플러그인은 다음을 포함할 수 있다고 가정하세요.
- 악의적 동작
- 오래된 의존성
- 드문 이벤트 타이밍의 로직 버그
따라서 플러그인 런타임은 다음을 보장해야 합니다.
- 피해 반경(containment)
- 권한 작업은 기본 거부
- 감사 가능한 실행 결과
신뢰는 설치로 주어지는 것이 아니라 정책으로 획득해야 합니다.
무료 플랜 운영 모델
샌드박스 지원 없이 운영할 때:
- 플러그인 세트를 최소로 유지
- 자사 또는 내부 검토 플러그인 선호
- 릴리스 게이트에서 의존성과 권한 검토
- 가능하면 위험한 통합은 외부 서비스로 분리
많은 팀에게 실행 가능한 모델이지만 더 강한 거버넌스 규율이 필요합니다.
결정 기준: 샌드박스 모드를 필수로 할 때
다음이면 샌드박스 모드를 필수로 다루세요.
- 외부 작성자 플러그인을 대규모로 설치할 때
- 규정 준수가 더 강한 격리 증거를 요구할 때
- 플러그인 침해에 따른 사업 위험이 실질적일 때
다음이면 선택 사항으로 다루세요.
- 플러그인 표면이 작고 완전히 감사됨
- 팀이 릴리스 파이프라인을 끝에서 끝까지 통제
실용 거버넌스 체크리스트
프로덕션에서 플러그인을 켜기 전에:
- 플러그인 소유자와 목적 문서화
- 필요한 기능과 아웃바운드 엔드포인트 검토
- 롤백 담당자와 롤백 절차 설정
- 실패 주입이 있는 스테이징에서 동작 검증
플러그인 보안은 일회성 아키텍처 결정이 아니라 런타임 경계에 뒷받침된 운영 프로세스입니다.