Agent는 일할 수 있어야 하고, 경계도 있어야 합니다
Cursor, Claude Code 같은 도구는 코드 보완을 넘어 파일 수정, 터미널 실행, 의존성 설치까지 능동적으로 수행합니다. 문제는 권한 모델입니다: 기본적으로 Agent는 로그인 사용자와 동일한 시스템 권한을 공유합니다. 한 번의 오판으로 ~/.ssh를 건드리거나, 빌드 산출물을 잘못 삭제하거나, 눈치채지 못한 아웃바운드 연결을 조용히 시도할 수 있습니다.
macOS 환경에서 격리는 더 어렵습니다: Docker는 Linux 커널을 실행하므로 codesign, Xcode 시뮬레이터, Apple Neural Engine을 컨테이너에서 사용할 수 없고, macOS VM을 한 겹 더 씌우면 뚜렷한 성능 손실이 따릅니다. OpenClaw의 접근은 실제 물리 macOS에서 OS 네이티브 기능으로 각 작업의 작업 범위를 설정하는 것이지, Agent를 아무것도 못 하는 우리에 가두는 것이 아닙니다.
하드웨어: Mac mini M4 · 10코어 CPU · 16 GB 통합 메모리 · 256 GB SSD · 1 Gbps 전용 대역폭(SpinMac 싱가포르 노드).
시스템: macOS Sequoia 15.3 · OpenClaw 1.4.2. 모든 명령과 스크린샷은 해당 전용 베어메탈 머신에서 재현했습니다.
3계층 격리: 파일, 시스템 호출, 네트워크
설정에 들어가기 전, OpenClaw가 「완전한 macOS 능력」과 「통제 가능한 경계」를 어떻게 결합하는지 이해하세요. 단일 블랙리스트가 아니라 3계층 메커니즘을 겹칩니다:
파일 시스템 네임스페이스: 각 세션은 지정 디렉터리 아래 독립 workspace를 만들고, 읽기·쓰기는 기본적으로 해당 공간으로 리다이렉트됩니다. 시스템 경로 접근은 readonly_mounts와 deny 목록으로 세밀하게 제어합니다.
시스템 호출 필터링: macOS Endpoint Security로 exec, ptrace, setuid 등 민감 호출을 차단합니다. 프리셋 템플릿(agent, dev 등)으로 빠르게 시작할 수 있습니다.
네트워크 접근 제어: 도메인 또는 IP 화이트리스트로 아웃바운드 트래픽을 허용하고, 나머지 요청은 조용히 폐기하며 감사 로그에 기록합니다. Agent가 「차단됨」을 감지하고 우회를 시도하지 않도록 합니다.
SpinMac 노드 개통(전제 조건)
OpenClaw는 SpinMac Mac mini M4마다 내장되어 별도 부가 항목 구매가 필요 없습니다. 사용 가능한 인스턴스가 없다면 다음 절차로 개통하세요:
-
01
노드 및 기간 선택
주문 설정 페이지에서 싱가포르, 일본(도쿄), 한국(서울), 중국 홍콩, 미국 동부 노드 중 선택. AI Agent 작업은 256 GB 기본 디스크로 충분하며, 일 단위 임대 $21.2부터.
-
02
결제 후 자동 배포 대기
USDT-TRC20 및 Stripe 카드 결제 지원. 입금 확인 후 1–5분 내 할당 완료, 이메일로 SSH·VNC 자격 증명 발송.
-
03
콘솔 로그인으로 준비 상태 확인
브라우저 VNC로 클라이언트 설치 없이 접속 가능. SSH 예시:
ssh admin@<공인IP> -p <포트>. macOS 데스크톱 또는 shell 정상 로그인 확인 후 계속 진행.
콘솔에서 OpenClaw 활성화
SpinMac 콘솔에서 해당 주문을 열고 「OpenClaw」 탭으로 이동. 최초 사용 시 제로 트러스트 초기화 실행: 인스턴스 바인딩 Ed25519 키 쌍 생성, com.spinmac.openclaw.daemon 백그라운드 서비스 설치, 감사 로그 디렉터리 /var/log/openclaw/ 생성.
터미널에서 데몬 및 CLI 검증:
# Check daemon
launchctl list | grep openclaw
# Expected: 0 com.spinmac.openclaw.daemon
# Install CLI if not present
curl -fsSL https://cdn.spinmac.com/openclaw/install.sh | bash
claw --version
# openclaw 1.4.2 (darwin/arm64)
claw status
# daemon: running | auth: valid
claw status에 daemon: running과 유효한 session token이 동시에 표시되면 권한 설정으로 진행할 수 있습니다. 초기화가 멈추면 먼저 claw doctor로 Endpoint Security 권한이 완전한지 확인하세요.
YAML로 Agent 권한 설정
OpenClaw는 YAML로 각 샌드박스 세션 정책을 정의합니다. AI Agent에는 내장 agent 템플릿을보낸 뒤 미세 조정하는 것을 권장합니다:
claw template list
# readonly | dev | agent
claw template export agent > ~/openclaw-agent.yaml
핵심 필드 설명(발췌):
filesystem:
workspace: "~/agent-workspace"
readonly_mounts:
- /Applications
- /usr/local/bin
deny:
- ~/.ssh
- ~/Library/Keychains
network:
allow_domains:
- "api.openai.com"
- "api.anthropic.com"
- "*.github.com"
block_all_others: true
Agent는 ~/agent-workspace 내에서만 쓰기 가능. 설치된 앱과 Homebrew 도구 경로는 읽기 가능. SSH 키와 키체인은 하드 거부. 아웃바운드 네트워크는 화이트리스트 도메인만 허용.
초기 설정 시 /usr/local/bin을 읽기 전용 마운트에 넣지 않아 git, python3 호출이 모두 실패했습니다. OpenClaw는 symlink 실제 대상을 해석합니다. 도구가 Cellar 디렉터리를 가리키면 해당 Cellar 경로도 readonly_mounts에 함께 추가해야 하며, 그렇지 않으면 감사 로그에 BLOCK exec가 연속으로 기록됩니다.
첫 격리 작업 실행
정책 파일 준비 후 세션을 시작하고 샌드박스 내에서 Agent를 실행합니다:
claw run --config ~/openclaw-agent.yaml --attach
# Prompt becomes: (claw:my-agent-session) admin@mac-xxx:~$
# Run agent inside sandbox (example: Claude Code)
claude --dangerously-skip-permissions
--attach로 제어된 shell에 바로 진입할 수 있습니다. 이후 시작되는 프로세스는 모두 OpenClaw 모니터링 하에 있습니다. Claude Code의 「권한 확인 건너뛰기」도 샌드박스 내에서는 YAML 경계에 여전히 구속되며, 권한 밖 쓰기나 불법 네트워크 접근은 차단됩니다.
별도 터미널에서 감사 스트림 실시간 확인:
claw audit tail my-agent-session --follow
# [10:23:41] ALLOW exec /usr/local/bin/git clone ...
# [10:23:45] BLOCK network outbound → 142.250.x.x — policy: block_all_others
감사 로그와 제로 트러스트의 의미
위에서 차단된 외부 연결은 특정 의존성 라이브러리 초기화 ping에서 왔습니다. 일반 환경에서는 거의 보이지 않지만, OpenClaw에서는 완전한 기록이 남습니다. 제로 트러스트는 「Agent를 믿지 않는다」가 아니라 매 단계가 예상대로일 것이라고 가정하지 않고,보내기 가능한 로그로 「실제로 무엇을 했는지」에 답합니다.
컴플라이언스 시나리오에서는 로그를 JSON으로보내기해 보안 팀 검토에 활용할 수 있습니다:
claw audit export my-agent-session \
--format json \
--output audit-report-$(date +%Y%m%d).json
프로덕션급 다중 사용자 협업, CI 통합, 장애 대응이 필요하면 OpenClaw 완전 사용 가이드를 이어서 읽으세요.
일반 시나리오 정책 빠른 참조
| 시나리오 | syscall 프리셋 | 네트워크 정책 요점 | 주의 |
|---|---|---|---|
| 코드 생성 / 리팩터링 | agent |
npm / pip registry 허용 | 패키지 관리자 도메인 화이트리스트 필요 |
| Xcode 빌드 | dev |
Apple CDN 허용 | Xcode와 DerivedData 마운트 |
| 민감 데이터 읽기 전용 분석 | readonly |
전체 차단 | 최고 격리 수준 |
| CI 자동화 리뷰 | dev |
GitHub + AI API | 파이프라인마다 독립 세션 |
독립 작업마다 새 세션을 만들고 감사를 작업별로 격리하는 것을 권장합니다. 조정한 YAML은 명명 템플릿으로 저장해 claw run --template xcode-build로 원클릭 재사용하고, 정책을 반복 작성하지 마세요. 정책을 반복 디버깅하는 팀은 템플릿 파일을 Git 저장소 .openclaw/ 디렉터리에 넣어 비즈니스 코드와 동일 버전으로 관리할 수 있습니다. 매 merge request마다 당시 적용된 권한 경계를 추적할 수 있고, 보안 검토 시 「당시 대략 무엇을 허용했는지」를 구두로 설명할 필요도 없습니다.
Docker나 중첩 VM을 쓰지 않는 이유
Docker Desktop on macOS는 본질적으로 Linux VM입니다. 완전한 Apple 툴체인이 없고 Neural Engine도 직접 통과할 수 없습니다. 중첩 macOS VM은 Xcode를 실행할 수 있지만, M4의 38 TOPS 연산력이 가상화 체인에서 크게 손실되고, 내장 작업 단위 감사도 부재합니다.
OpenClaw는 베어메탈 머신에서 Endpoint Security로 차단하며 오버헤드는 약 3% CPU입니다. Agent는 여전히 실제 codesign, 시뮬레이터, Core ML을 사용할 수 있고, 경계만 사전에 정책 파일에 기록됩니다. 「노트북에서 Agent 맨 실행」이나 「VM을 직접 구축하고 모니터링 스크립트를 한 겹 더 씌우기」와 비교하면 운영 경로가 더 짧습니다: 이미지, 스냅샷, 추가 로그 수집 Agent를 유지할 필요 없이, SpinMac 콘솔과 claw CLI가 개통·정책·감사의 폐루프를 이미 커버합니다.
로컬 8 GB MacBook에서 Agent 실행 시 swap이 빈번하거나, 팀이 감사 가능한 공유 노드가 필요하다면, SpinMac 일 $21.2부터 임대하는 M4 베어메탈 머신이 16 GB 독점 메모리와 즉시 사용 가능한 샌드박스를 제공해, 임시 방안을 끼워 맞추는 것보다 시간을 절약하고 보안 팀이 기대하는 「증명 가능한 경계」에도 더 부합합니다.