@haram

Docker 샌드박스 연동 — 로컬 AI 에이전트의 위험한 코드 실행 막기
내가 만든 AI 에이전트가 내 PC에서 제한 없이 파이썬 코드를 실행하도록 내버려 두면 어떻게 될까요? 잘못된 프롬프트나 외부 지시에 속아 내 컴퓨터의 중요 파일을 훔치거나 파괴적인 시스템 명령을 내리는 '에이전트 하이재킹' 위험에 노출될 수 있습니다.
이번 글에서는 소중한 PC를 완벽하게 지키면서 AI를 마음껏 실험할 수 있도록, 도커를 활용해 아주 쉽게 로컬 격리막을 치는 방법을 살펴보겠습니다.
왜 파이썬 언어 자체의 가드레일로는 부족할까요?
처음 AI 에이전트를 만들 때 흔히 하는 실수가 있습니다. 파이썬 코드 안에서 "특정 라이브러리는 쓰지 마"라거나 "위험한 명령어는 실행하지 마"라고 글자 단위로 검사하는 가드레일을 세우는 것입니다.
하지만 파이썬은 매우 유연하고 동적인 언어라 이 정도의 제한은 너무나 쉽게 뚫립니다. 클래스 상속 구조를 타고 들어가 우회하거나 런타임의 약점을 파고드는 기발한 방법들이 무궁무진하기 때문입니다. 방 안에서 문만 대충 닫아두고 벽에 금지 낙서를 적어두는 식으로는 영악한 우회를 막을 수 없습니다.
이처럼 AI 에이전트가 악성 프롬프트에 속아 사용자의 PC에서 제멋대로 명령을 실행하게 되는 위협을 에이전트 하이재킹(OWASP ASI05)이라고 부릅니다. 이 방패가 한 번 뚫리면 로컬 디렉터리에 저장된 프로젝트 파일이 지워지거나, API 키나 SSH 키 같은 핵심 비밀 정보가 외부로 통째로 유출되는 끔찍한 사고로 이어집니다.
결국 우리에게 필요한 것은 코드 몇 줄로 막는 경고가 아니라, 에이전트가 마음껏 뛰어놀아도 바깥으로 절대 탈출할 수 없는 '잠긴 놀이터'입니다. 설령 악성 코드가 실행되더라도 격리된 놀이터 안에서만 맴돌고 실제 내 컴퓨터에는 손끝 하나 대지 못하게 막아야 합니다. 로컬 개발 환경에서 이 튼튼한 물리적 울타리 역할을 가장 완벽하게 해주는 솔루션이 바로 도커입니다.
안전한 Docker 샌드박스를 만드는 핵심 설정 5가지
도커 컨테이너를 단순히 실행하는 것만으로는 안심하기 어렵습니다. 기본 설정의 도커는 호스트 컴퓨터의 시스템을 엿보거나 자원을 과도하게 끌어쓸 수 있는 미세한 틈이 남아있기 때문입니다. 에이전트가 노는 공간을 안전한 모래놀이터로 만들려면 외부로 나가는 문을 철저히 걸어 잠가야 합니다.
파이썬 도커 SDK나 설정 파일에서 지정할 수 있는 가장 확실한 잠금장치 5가지를 소개합니다.
- 네트워크 차단 (
network_mode='none'): 컨테이너 안에서 실행되는 코드가 인터넷에 접속하는 길을 원천 봉쇄합니다. 내 중요한 정보를 외부 서버로 유출하지 못하도록 사방을 높은 벽으로 막아두는 역할을 합니다. - 읽기 전용 파일시스템 (
read_only=True): 컨테이너 내부의 핵심 시스템을 얼려둡니다. 대신 임시 작업 공간은 메모리 위에 아주 작게 만들어 주는tmpfs설정을 더해, 칠판에 낙서만 할 수 있고 벽 자체는 부수지 못하게 만듭니다. - 모든 특권 해제 (
cap_drop=['ALL']): 컨테이너가 가질 수 있는 강력한 시스템 관리 권한을 모두 빼앗아 버립니다. 여기에security_opt옵션을 더하면 에이전트가 어떤 꼼수를 쓰더라도 관리자 권한을 새로 얻어낼 수 없습니다. - 비루트 사용자 실행 (
user='1000:1000'): 최고 관리자인 루트가 아니라 권한이 거의 없는 일반 사용자로 코드를 실행하게 만듭니다. 이중 자물쇠를 채워 혹시 모를 시스템 침입에 대비하는 조치입니다. - 리소스 한계 설정 (
mem_limit='256m'): 메모리와 CPU 사용량에 명확한 한계를 설정합니다. 코드가 무한 루프에 빠져 폭주하더라도 내 실제 컴퓨터가 멈추거나 느려지지 않도록 차단기를 내리는 것입니다.
이 5가지 잠금장치만 제대로 조합해도 로컬 에이전트가 내 컴퓨터를 망가뜨릴 위험은 사실상 거의 사라집니다.
더 쉽게 연동하기: Mastra 프레임워크와 Code Sandbox MCP
앞서 살펴본 복잡한 도커 설정을 개발자가 직접 하나하나 코딩하려면 꽤나 번거롭습니다. 다행히 최근 AI 생태계에는 이러한 보안 격리 작업을 알아서 처리해 주는 똑똑한 도구들이 나와 있습니다.
가장 대표적인 도구가 타입스크립트 기반의 AI 에이전트 프레임워크인 마스트라(Mastra)입니다. 이 프레임워크의 @mastra/docker 패키지를 활용하면 몇 줄의 코드만으로 로컬 도커 컨테이너를 안전하게 생성하고 제어할 수 있습니다. 메모리 제한이나 네트워크 차단 같은 규칙도 설정 파일에서 직관적으로 정의할 수 있습니다.
// Mastra의 DockerSandbox 설정 예시
import { DockerSandbox } from '@mastra/docker';
const sandbox = new DockerSandbox({
image: 'python:3.11-slim',
containerConfig: {
networkDisabled: true,
HostConfig: {
Memory: 256 * 1024 * 1024, // 256MB 제한
NanoCpus: 1000000000, // 1 CPU 코어 제한
},
},
});클로드나 제미나이 같은 LLM 클라이언트를 직접 활용하는 개발자라면 모델 컨텍스트 프로토콜(MCP) 진영의 '코드 샌드박스 MCP(Code Sandbox MCP)'를 연동하는 것도 좋은 선택입니다. 이 도구는 백그라운드에서 도커 컨테이너의 라이프사이클을 알아서 관리하며 에이전트가 생성한 코드를 격리 공간에서 실행한 뒤 결과만 안전하게 돌려줍니다. 복잡한 컨테이너 관리 코드를 한 줄도 짤 필요가 없으므로 서비스 개발 초기 단계에서 유용하게 쓰기 좋습니다.
안전한 에이전트 개발, 로컬 샌드박스부터 시작하세요
로컬 환경에서 도커로 격리막을 치는 것은 AI 에이전트 보안의 가장 중요한 첫걸음입니다.
실제 서비스 운영 단계에서는 더 강력한 가상화 솔루션이 필요할 수 있지만, 내 PC에서 실험하는 수준이라면 오늘 소개한 도커 설정만으로도 훌륭한 방패가 됩니다. 소중한 내 컴퓨터를 안전하게 지키면서 더 자유롭고 똑똑한 AI 에이전트를 만들어 보세요!