Strands Box: OS 격리와 “의미 기반 정책”을 결합하고 앞선 행동에 따라 이후 권한을 정하는 오픈소스 에이전트 샌드박스
strands-agents/box는 Strands Agents 팀이 공개한 Rust 기반 Apache-2.0 AI 에이전트 샌드박스 엔진이다. OS 수준 격리와 Dogwood 언어의 permit/forbid 정책을 결합하고, 판정 엔진은 에이전트 프로세스 밖에서 실행되며 기본은 거부다. 현재는 Apple 실리콘 macOS 전용 프리뷰이고 작성 시점에 별은 약 393개다. 독립적인 보안 감사는 확인하지 못했다.
strands-agents/box는 Strands Agents 팀이 공개한 오픈소스 프로젝트로, “AI 에이전트를 위한 오픈소스 샌드박스 엔진”으로 소개됩니다. 저장소는 Rust로 작성되었고 Apache-2.0 라이선스입니다. 2026년 10월 2일에 만들어졌고 마지막 푸시는 10월 12일이며, 작성 시점에 별 약 393개와 포크 19개가 있습니다. 이 프로젝트가 답하려는 질문은 실용적입니다. 에이전트가 명령을 실행하고, 파일을 읽고 쓰고, 네트워크에 접속하고, 외부 도구를 호출할 수 있을 때 “무엇을 할 수 있는가”를 프롬프트 속 한마디에서 프로그램이 강제하는 경계로 바꾸려면 어떻게 해야 하는가입니다. 특정 에이전트에 묶이지 않으며, 실행할 프로그램이나 바이너리를 고르고 box.toml에 접근 범위를, policy.dw에 정책을 적습니다.
설계는 두 겹입니다. 첫째는 OS 격리입니다. box.toml의 직접 접근 권한, 예컨대 어떤 디렉터리를 읽고 쓸 수 있고 어떤 프로그램을 시작할 수 있는지는 호스트 운영체제가 강제합니다. 둘째는 Dogwood라는 정책 언어로 쓰는 “의미 기반 정책”으로, 규칙은 permit과 forbid 두 종류뿐입니다. 정책 엔진이 검사하는 작업은 기본적으로 거부되고, 일치하는 permit이 허용해야 하며, 일치하는 forbid는 그 허용을 뒤집습니다. 재미있는 것은 구성 요소의 배치입니다. Strands Shell, Python용 Monty, 외부 송신 게이트웨이, MCP 브로커가 각자 처리하는 작업을 내장된 Dogwood 로컬 엔진에 보내 판정받습니다. 이 엔진은 Box 자신의 프로세스, 곧 에이전트 샌드박스 밖에서 실행됩니다. 에이전트는 Box의 인터프리터에 요청을 보낼 수 있지만 외부 프로그램과 로컬 MCP 서버는 그럴 수 없고, 외부 프로그램의 네트워크 트래픽은 기본적으로 Box의 게이트웨이를 거칩니다.
이 배치로 몇 가지 구체적인 능력이 생깁니다. 첫째, 인터프리터와 게이트웨이가 하나의 이벤트 이력을 공유하므로 규칙이 이전 행동과 경과 시간을 쓸 수 있습니다. README의 예는 Shell이나 Python으로 어떤 파일을 읽은 것이 계기가 되어 이후의 외부 HTTP 요청을 게이트웨이가 거부하는 경우로, 단순한 허용 주소 목록보다 실제 데이터 유출 상황에 가깝습니다. 둘째, 외부 송신 게이트웨이는 연결과 HTTP 요청의 메서드와 경로까지 검사하고, MCP 브로커는 설정된 도구 호출과 인자를 검사합니다. 셋째, 게이트웨이가 허용된 요청에 설정된 API 자격 증명이나 AWS SigV4 서명으로 인증할 수 있어 에이전트는 근본 비밀을 받지 않습니다. 넷째, 모든 정책 판정이 OTLP JSON 형식으로 기록되며 기본적으로 box 디렉터리 아래 private/telemetry/records.jsonl에 저장되어 사후 감사에 도움이 됩니다.
사용하기 전에 프로젝트가 밝히는 경계를 확인하세요. 우선 프리뷰이며 Apple 실리콘 macOS의 로컬 실행만 지원합니다. 가이드는 macOS 15 이상, Homebrew로 설치한 Node.js 22.21 이상, us-west-2의 Amazon Bedrock에서 Claude Opus 5에 접근할 수 있을 것을 요구합니다. 다운로드 스크립트는 릴리스 체크섬을 확인하고 PATH나 시스템 디렉터리를 바꾸지 않은 채 ./box-core에 바이너리를 풉니다. 다음으로 README는 box.toml의 직접 파일 시스템 권한은 OS가 강제하며 개별 Dogwood 판정을 만들지 않는다고 밝힙니다. 파일 작업에 정책을 적용하려면 인터프리터를 쓰고 그 파일을 에이전트의 직접 권한에서 빼야 합니다. 마지막으로 이 모든 내용은 프로젝트 자체 설명입니다. 우리는 실행해 보지 않았고 독립적인 보안 감사나 침투 테스트도 보지 못했습니다.
어떻게 평가할까요? 에이전트를 만드는 팀에게는 역할 분담이 분명합니다. OS가 “건드릴 수 있는가”를 정하고, 정책 엔진이 “어떤 조건에서 해도 되는가”를 정하며, 둘 다 에이전트 밖에 있습니다. 프롬프트에 “비밀번호를 유출하지 마세요”라고 쓰는 것보다 훨씬 믿을 만하고 네트워크 허용 목록만 있는 샌드박스보다 세밀합니다. 대가는 새 정책 언어를 배우고 파일, 네트워크, 도구 호출을 Box를 거치게 바꿔야 한다는 점입니다. 아직 Linux와 Windows에서는 쓸 수 없습니다. 에이전트가 민감한 데이터를 다룬다면 먼저 함께 제공되는 Strands Python SDK 예제의 작은 에이전트를 써 보고 판정 기록을 읽은 뒤, 운영 방식을 바꿀 가치가 있는지 판단하세요.
Sources
FAQ
Strands Box는 어떤 문제를 풀고 어떻게 동작하나요?
에이전트를 실행하는 프로세스에 두 겹의 제한을 둡니다. 첫째는 OS 샌드박스로, box.toml에 에이전트가 직접 접근할 수 있는 파일, 프로그램, 네트워크를 적으면 호스트 OS가 강제합니다. 둘째는 의미 기반 정책으로, policy.dw에 Dogwood로 permit과 forbid 규칙을 쓰고 에이전트 밖의 로컬 엔진이 판정합니다. 엔진이 검사하는 작업은 기본적으로 거부되고 일치하는 permit만 허용하며, 일치하는 forbid는 이를 뒤집습니다. Box는 특정 에이전트에 묶이지 않아 실행할 프로그램을 자유롭게 고를 수 있습니다.
“이력을 보는 정책”이란 무슨 뜻인가요?
Box의 인터프리터와 게이트웨이는 하나의 이벤트 이력을 공유하므로 규칙이 이전 행동과 경과 시간을 쓸 수 있습니다. README의 예는 Shell이나 Python으로 파일을 읽으면 이후의 외부 HTTP 요청을 게이트웨이가 거부할 수 있다는 것입니다. 게이트웨이는 요청의 메서드와 경로도 검사하고, MCP 브로커는 설정된 도구 호출과 인자를 검사하며, API 자격 증명이나 AWS SigV4 서명을 게이트웨이가 붙여 에이전트가 비밀을 갖지 않게 할 수 있습니다. 모든 판정은 OTLP JSON으로 기록됩니다.
운영 환경에서 쓸 수 있나요? 한계는 무엇인가요?
프로젝트 스스로 프리뷰라고 밝힙니다. Apple 실리콘 macOS의 로컬 실행만 지원하며, 시작 가이드는 macOS 15 이상, Homebrew로 설치한 Node.js 22.21 이상, Amazon Bedrock의 Claude Opus 5를 요구합니다. 또 다른 한계로 box.toml의 직접 파일 시스템 권한은 OS가 강제하며 Dogwood 판정을 만들지 않습니다. 파일 작업에 정책을 적용하려면 Box의 인터프리터를 거치고 그 파일을 직접 권한에서 빼야 합니다. 독립 감사를 보지 못했으므로 자체 검토 없이 가치가 큰 데이터를 맡기지는 마세요.