1–5분 배포

OpenClaw 내장 Agent 샌드박스

$21.5 /일부터 · 물리 머신 단독 사용
클라우드 Mac 구성
정책 격리 작업 감사 M4 · 38 TOPS

FIELD NOTE · AI Agent

OpenClaw 샌드박스 실전: 격리 macOS에서 AI Agent 실행하기

LangGraph, AutoGen, 자체 Agent를 로그인 셸에서 돌리면 Keychain, SSH 개인키, Mac 전체 파일시스템에 기본적으로 접근할 수 있습니다. 도구 체인은 예측하기 어렵습니다. 이 글은 JexMac 전용 Mac mini M4 노드에서 OpenClaw로 정책 경계를 그리고, 첫 격리 작업을 제출한 뒤 감사 로그까지 확인하는 전체 루프를 기록합니다. 콘솔 개통부터 CLI 실행까지 각 단계를 재현할 수 있습니다.

베어 Agent vs 샌드박스 Agent: 권한 표면이 달라지는 지점

개발자가 SSH로 Mac에 접속할 때는 ~/.ssh를 지우거나 Distribution 인증서를 내보내지 않도록 알고 있습니다. AI Agent는 다릅니다. 셸·파일·네트워크 도구를 호출하는 프레임워크는 기본적으로 현재 macOS 사용자의 전체 권한을 상속합니다. 「저장소에서 TODO를 스캔해 Markdown 보고서를 출력하라」는 작업은 이론상 프로젝트 디렉터리 읽기와 출력 파일 하나만 필요하지만, 실제로는 Keychain, 브라우저 쿠키, 임의의 아웃바운드 HTTP까지 닿을 수 있습니다.

컨테이너로 프로세스를 격리할 수 있지만 macOS에서는 Xcode 툴체인과 Apple 네이티브 프레임워크를 온전히 쓰기 어렵습니다. 작업마다 VM을 새로 띄우면 대화형 Agent 루프에는 너무 느립니다. OpenClaw는 세 번째 경로를 택합니다. 실제 macOS 위에서 YAML 정책이 시스템 콜 단계에서 허용/거부를 결정하고, 모든 판단이 감사 스트림에 기록됩니다. Agent는 M4의 38 TOPS Neural Engine으로 로컬 추론을 계속할 수 있지만, 정책 밖 읽기·쓰기는 즉시 차단됩니다.

이 글의 데모 작업은 의도적으로 좁게 잡았습니다. 샌드박스 안 기존 코드 스냅샷에 정적 스캔(rg로 TODO/FIXME), 정책상 거부될 git clone 시도, /workspace 아래 보고서 작성. 성공 기준: 스크립트 완료, 감사 로그에 allow·deny 이벤트 모두 존재, 각 이벤트를 발동한 YAML 규칙까지 추적 가능.

2.6s
데모 스크립트 전체(차단된 clone 포함)
< 80ms
정책 엔진 누적 오버헤드
3/3
CLI 헬스 체크 전부 정상
16 GB
M4 통합 메모리, 추론·샌드박스 병행
테스트 환경

하드웨어: JexMac 한국(서울) 노드 · Mac mini M4 · 10코어 CPU · 16 GB 통합 메모리 · 256 GB NVMe · 1 Gbps 전용 대역폭. OS: macOS 15 Sequoia. OpenClaw CLI 0.9.x, 정책 포맷 v2. 전체 실습은 SSH로 진행; 시스템 확장 승인은 VNC로 한 번만 로그인하면 됩니다.

시작 전: 한 번만 확인할 네 가지 전제

로컬 노트북은 Windows, Linux, macOS 무엇이든 SSH 클라이언트만 있으면 됩니다. 아래 네 항목 중 하나라도 빠지면 중간에 멈춥니다.

  • 배포 완료된 JexMac 인스턴스: 콘솔 「접속 정보」에 SSH 주소·포트가 표시됩니다. 싱가포르, 일본(도쿄), 한국(서울), 홍콩, 미국 동부 다섯 노드는 사양·요금 동일; Agent 실험은 대상 API 지연에 가장 가까운 리전을 고르세요.
  • OpenClaw instance-token: 콘솔 「보안 및 샌드박스」에서 최초 개통 시 생성, 형식은 oct-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx. 한 번만 표시되므로 1Password, Bitwarden 등에 즉시 저장하세요.
  • 작업 디렉터리 /workspace: 호스트에 미리 생성; 샌드박스는 이 경로를 Agent 읽기/쓰기 영역으로 매핑합니다. 개인키나 p12 파일은 넣지 마세요.
  • 정책 YAML 최소 1개: 5절에 읽기 전용 템플릿 제공; 원칙은 처음부터 엄격하게 열고 deny 로그를 보며 점진적으로 완화하는 것입니다. 처음부터 넓게 열었다가 나중에 조이지 마세요.

콘솔에서 OpenClaw 개통 및 instance-token 보관

OpenClaw는 기본 비활성입니다. 물리 인스턴스마다 독립 제어하므로 감사가 필요 없는 워크로드는 오버헤드를 내지 않습니다. 아래 세 단계는 브라우저에서, 나머지는 SSH로 진행합니다.

  1. 01
    인스턴스 상세 → 「보안 및 샌드박스」

    JexMac 콘솔 로그인 후 대상 Mac mini 인스턴스를 열고 OpenClaw 토글을 찾습니다. 방금 배포됐다면(1–5분 이내) 상태가 Running으로 바뀔 때까지 기다리세요.

  2. 02
    개통 후 토큰 복사

    개통 클릭 시 instance-token이 표시됩니다. 비밀 관리 도구에 저장했음을 확인한 뒤 「저장했습니다, 계속」을 누르세요. Slack, 티켓, Git 커밋에 토큰을 붙여넣지 마세요.

  3. 03
    배지가 「개통됨」인지 확인

    30초 이상 「개통 중」이면 페이지를 새로고침하세요. 녹색 배지가 보이면 브라우저를 닫아도 됩니다. 이후는 CLI가 처리합니다.

SSH로 CLI 설치 및 3개 컴포넌트 헬스 체크

SSH 로그인 후 설치 스크립트가 Apple Silicon을 감지하면 M4에서 보통 30초 안에 끝납니다.

curl -fsSL https://api.jexmac.com/openclaw/install.sh | bash
openclaw auth login --token <instance-token>
openclaw status

openclaw status에서 세 컴포넌트 모두 healthy여야 합니다:

컴포넌트 역할 기대 상태
Policy Engine YAML 파싱, 시스템 콜 전 allow/deny healthy
Sandbox Runtime 샌드박스 수명, 프로세스 격리, 디렉터리 매핑 healthy
Audit Bus 감사 이벤트 비동기 기록, Agent 핫 패스 비차단 healthy

어느 하나라도 degraded 또는 unavailable이면 먼저 openclaw doctor를 실행하세요. 흔한 원인: 최초 설치 후 시스템 확장 승인 대기 — 브라우저 VNC로 접속해 시스템 설정 → 개인 정보 보호 및 보안에서 OpenClaw를 허용한 뒤 SSH에서 CLI 서비스를 재시작합니다. Policy Engine이 healthy라는 것은 프로세스가 떠 있다는 뜻이지 YAML이 유효하다는 뜻은 아닙니다. 정책 검증은 다음 절에서 별도로 합니다.

최소 권한 정책: 버전 관리되는 YAML

정책 파일은 Agent가 읽을 경로, 생성할 프로세스, 아웃바운드 네트워크 허용 여부를 정의합니다. 권장 워크플로: 첫 YAML은 작업에 필요한 최소만 개방 → 작업 실행 → deny 로그 확인 → 필요 시 allow 규칙 추가. 처음부터 넓게 열었다가 나중에 조이는 방식은 피하세요.

아래 내용을 ~/policies/agent-readonly.yaml로 저장합니다:

apiVersion: openclaw.jexmac.com/v2
kind: SandboxPolicy
metadata:
  name: agent-readonly
spec:
  filesystem:
    allow:
      - path: /workspace
        access: [read, write]
    deny:
      - path: "**/Keychains/**"
      - path: "**/.ssh/**"
      - path: "**/Library/Cookies/**"
  process:
    allow: [git, rg, python3, zsh, bash]
  network:
    egress: deny-all

설계 포인트 세 가지: deny가 allow보다 우선/workspace가 쓰기 가능해도 deny 목록 경로는 차단됩니다. process.allow는 프로세스 이름 화이트리스트 — Agent에 nodenpm이 필요하면 명시적으로 추가하지 않으면 E_POLICY_DENY: process가 납니다. egress: deny-all은 이 데모에서 git clone을 의도적으로 막아 감사 스트림에 네트워크 deny 이벤트가 보이게 합니다.

샌드박스 생성 전 문법 검증:

openclaw policy validate -f ~/policies/agent-readonly.yaml

기대 출력: policy valid (0 warnings); 필드 오타나 v1 레거시 포맷은 줄 번호와 함께 보고됩니다.

샌드박스 생성, Agent 작업 제출, 결과 검증

LangGraph 같은 프레임워크를 연결하기 전에 결정적인 셸 스크립트로 루프를 닫으세요. 동작이 예측 가능하면 실패 시 「정책 문제」와 「Agent 로직 문제」를 구분하기 쉽습니다.

호스트에 진입 스크립트 /workspace/agent-entry.sh 생성:

#!/bin/zsh
set -euo pipefail
cd /workspace
git clone --depth 1 https://github.com/apple/swift-sample-code.git repo 2>/dev/null \
  || echo "clone blocked (expected)"
rg -rn "TODO|FIXME" . --glob '*.swift' > scan-report.txt 2>/dev/null || true
echo "Scan complete: $(wc -l < scan-report.txt | tr -d ' ') matches" > summary.txt
cat summary.txt

chmod +x /workspace/agent-entry.sh 후 순서대로 실행:

  1. 01
    샌드박스 생성

    openclaw sandbox create --name agent-demo --policy ~/policies/agent-readonly.yaml

    상태 ready면 충분합니다. 같은 이름으로 중복 생성 시 「already exists」 — 데이터는 파괴되지 않습니다.

  2. 02
    두 번째 SSH 세션에서 감사 로그 실시간 tail

    openclaw audit tail --sandbox agent-demo --follow

    판단 이벤트는 보통 작업 후 50–200ms 안에 나타납니다.

  3. 03
    샌드박스 안에서 스크립트 실행

    openclaw sandbox exec agent-demo -- /bin/zsh /workspace/agent-entry.sh

    출력에 clone blocked (expected)가 포함되어야 하고, summary.txt에 스캔 건수가 있어야 합니다.

  4. 04
    샌드박스 중지

    openclaw sandbox stop agent-demo

    /workspace 데이터는 호스트에 유지됩니다. 완전 정리는 --rm을 추가하세요.

아웃바운드가 거부되므로 git clone은 성공하지 않습니다. 검증 가능한 네트워크 deny를 만들기 위한 의도입니다. rg 단계가 끝나면 파일시스템 allow 규칙이 맞습니다. 서울 노드에서 전체 약 2.6초를 측정했고, 정책 오버헤드는 무시할 수준입니다.

감사 로그 필드: allow부터 deny까지 읽기

감사는 사후 PDF가 아니라 정책 판단과 동기화된 이벤트 스트림입니다. 전형적인 allow 기록(진입 스크립트 읽기):

ts=2026-07-28T09:03:12.481Z
sandbox=agent-demo
syscall=open
resource=filesystem
path=/workspace/agent-entry.sh
access=read
decision=allow
policy_rule=filesystem.allow[0]
latency_us=34

policy_rule은 발동한 YAML 규칙 인덱스, latency_us는 판단 지연(마이크로초)입니다. 대응하는 네트워크 deny(차단된 clone):

ts=2026-07-28T09:03:12.512Z
sandbox=agent-demo
syscall=connect
resource=network
dst=140.82.113.4:443
decision=deny
policy_rule=network.egress.deny-all
latency_us=19

프로덕션에서 GitHub 접근이 필요하면 network.egressallow-list로 바꾸고 github.com:443을 추가한 뒤 검증하고 openclaw sandbox update --name agent-demo --policy ~/policies/agent-readonly.yaml — 샌드박스를 파괴·재생성할 필요 없습니다.

자주 쓰는 쿼리:

  • 최근 1시간 deny: openclaw audit query --decision deny --since 1h
  • 경로 필터: openclaw audit query --resource filesystem --path "/workspace/**"
  • SIEM용 JSON 내보내기: openclaw audit export --sandbox agent-demo --since 24h --format json > audit.json

자주 나오는 여섯 가지 오류와 최단 수정 경로

증상 근본 원인 수정
auth login 토큰 무효 끝 공백 포함 복사, 또는 토큰 로테이션 콘솔에서 다시 복사; macOS는 pbpaste | xxd로 앞뒤 바이트 확인
statusunavailable 시스템 확장 미승인 VNC → 시스템 설정 → 개인 정보 보호 및 보안 → OpenClaw 허용 → 서비스 재시작
policy validate unknown field YAML 필드 오타 또는 v1 포맷 apiVersion: openclaw.jexmac.com/v2 확인
E_POLICY_DENY: filesystem allow 목록 밖 경로 접근 audit query --decision deny로 경로 확인 후 filesystem.allow에 추가
E_POLICY_DENY: process 화이트리스트에 없는 프로세스 생성 resource=process로 deny 확인, process.allow에 프로세스명 추가
git clone 타임아웃, deny 로그 없음 connect 전 DNS 단계에서 차단 네트워크 정책을 allow-list로 전환; 8.8.8.8:53 또는 도메인 규칙도 허용
자격 증명과 팀 접근

instance-token은 인스턴스 고권한 자격과 동급입니다 — .env나 Git에 커밋하지 마세요. 프로덕션에서는 팀원마다 제로 트러스트 디바이스 인증서와 역할(viewer / operator / admin)을 부여하고, 토큰 하나를 공유하지 마세요.

PoC 이후: Agent는 어디서 장기 운영할까

읽기 전용 샌드박스 증명은 시작일 뿐입니다. 실제 워크로드는 xcodebuild 호출, npm/PyPI pull, PR마다 샌드박스 기동/종료 같은 CI 패턴까지 갈 수 있습니다. 확장 경로는 항상 deny 로그에서 정책을 반복 개선하는 것이지, 권한을 추측하는 것이 아닙니다.

연산 측면: Mac mini M4 · 16 GB 한 대로 DerivedData를 둔 빌드 샌드박스 두 개를 병렬로 돌릴 수 있고, OpenClaw 감사와 시스템 서비스용으로 약 4 GB를 남길 수 있습니다. 부하가 커지면 JexMac Thunderbolt 5 클러스터 서비스로 여러 Mac mini를 80 Gbps로 연결할 수 있으며, 각 인스턴스는 정책·감사 저장소를 독립 유지합니다.

전용 클라우드 Mac이 없는 팀의 대안은 각각 한계가 분명합니다. 로컬 MacBook에서 Agent를 24/7 돌리면 일상 개발과 충돌하고 지속 부하로 발열이 심합니다. GitHub 호스팅 macOS Runner는 공유 풀이라 OpenClaw 네이티브 연동이 없고, 피크 시간 대기가 대화형 Agent에 치명적입니다. Mac mini를 직접 구매하면 조달 리드타임, 코로케이션, 현장 인증서 로테이션이 따라옵니다.

JexMac는 전용 물리 Mac mini M4(10코어 · 16 GB · 256 GB NVMe · 38 TOPS), 표준 인스턴스에 OpenClaw 내장, 다섯 노드 각각 전용 공인 IPv4와 1 Gbps 대역폭, 결제 후 1–5분 배포, $21.5/일·$107.3/월부터 계약 없이 임대를 제공합니다. Agent 실험은 일 단위로, 정책이 안정되면 월 단위로 전환하세요.

물리 머신 단독 · 1–5분 배포

격리 macOS 환경에서 첫 Agent 실행하기

이 글의 모든 명령은 JexMac 전용 Mac mini M4 물리 노드에서 검증했습니다. 인스턴스 개통 → OpenClaw 활성화 → 위 정책으로 작업 제출 — 1시간 안에 첫 감사 기록을 볼 수 있습니다. 일 $21.5부터; PoC 후 언제든 해제 가능.

표준 구성
Apple M4 · 38 TOPS
CPU10코어(4P + 6E)
메모리16 GB 통합 메모리
네트워크1 Gbps 전용 대역폭
SLA99.9% 가용성
배포1–5분 자동 개통