OpenClaw 구축·운영 (11/26) — 도구와 훅 설계: 최소 권한 원칙
최소 권한 원칙을 적용한 에이전트의 액션 제어와 자동화 트리거
핵심 요약
- 도구 통제는 불신이 아니라 시스템의 격벽 설계다 — "허용보다 차단이 우선"
- 에이전트별로 도구 그룹 단위의 Deny 리스트를 적용하고, exec는 가장 보수적으로 통제한다
- 훅(Hooks)을 활용해 설정 파일 린팅과 보안 감사를 자동화했다
배경
LLM 에이전트에게 도구가 없으면 텍스트 챗봇에 불과하다. 하지만 강력한 도구는 양날의 검이다. 파일 쓰기 권한을 가진 에이전트는 환각 상태에서 핵심 설정 파일을 덮어쓸 수 있고, 셸 실행 권한이 있으면 프롬프트 인젝션을 통해 악성 코드를 실행할 수 있다.
핵심 설계 원칙: "허용(Allow)보다 차단(Deny)이 우선한다."
본문
도구 프로파일과 그룹 제어
전역 설정에서 모든 도구를 허용하되, 서브 에이전트 단계에서 엄격하게 권한을 회수한다. 도구 그룹(group:fs, group:sessions, group:web, group:messaging)으로 논리적 단위 제어가 가능하다.
{
"id": "researcher",
"tools": {
"allow": ["web_search", "web_fetch", "read", "exec"],
"deny": [
"edit", "write", "delete",
"group:fs", "group:sessions",
"group:automation", "group:messaging"
]
}
}
group:fs를 차단하면서 read를 허용하는 이유는 기존 문서 참조는 가능하되 수정/삭제는 원천 차단하기 위함이다.
exec — 가장 강력하고 위험한 도구
exec는 시스템 셸 접근 권한을 부여하므로 가장 보수적으로 통제해야 한다. 기본값은 deny, 미명시 명령은 on-miss 정책으로 사용자 승인을 요청한다.
에이전트별 정책:
- mir: 지정된 5개 명령어만 허용
- researcher: scrape.py 단일 스크립트만 허용
- communicator, memory-runner: exec 전면 박탈
서브 에이전트 스폰 통제
allowAgents 배열로 호출 가능한 하위 에이전트를 제한한다.
{
"id": "memory-manager",
"subagents": { "allowAgents": ["memory-runner"] }
}
모델 프로바이더 기반 권한 제어
로컬 모델로 Fallback될 때 추론 능력이 떨어지는 모델이 복잡한 작업을 시도하다 무한 루프에 빠지는 것을 방지한다.
{
"tools": {
"byProvider": {
"ollama/*": { "deny": ["group:web", "sessions_spawn"] }
}
}
}
훅(Hooks) — 시스템 자동화의 축
훅은 특정 이벤트 발생 시 조건반사적으로 수행하는 자동화 트리거다.
- 내장 훅:
boot-md(Gateway 기동 시 초기화 로직 실행),bootstrap-extra-files(세션 시작 시 컨텍스트 자동 주입) - 워크스페이스 훅:
openclaw.json저장 시 json.tool 자동 실행, Git 커밋 시 Pre-Commit 훅으로 보안 감사 수행
시행착오 / 주의사항
OpenClaw는 현재 설정 파일 레벨의 exec allowlist를 지원하지 않는다. 이를 보완하기 위해 AGENTS.md 시스템 프롬프트에 논리적 제약을 하드코딩하여 통제하고 있다.
마무리
도구 통제는 불신이 아니라 시스템의 격벽 설계다. 웹에서 데이터를 가져오는 에이전트에게 파일 쓰기 권한을 주지 않는 것은, 외부 오염 데이터가 시스템 심장부로 침투하는 경로를 물리적으로 끊어내는 아키텍처적 결단이다. "이 에이전트가 오작동했을 때 최악의 시나리오는 무엇이며, 어떤 도구를 빼앗아야 피해를 최소화할 수 있는가?"를 먼저 고민해야 한다.
댓글
댓글 쓰기