개요
Claude Code는 에이전트 실행을 위한 더 안전한 환경을 제공하고 지속적인 권한 프롬프트의 필요성을 줄이기 위해 기본 샌드박싱 기능을 제공합니다. 각 bash 명령에 대해 권한을 요청하는 대신, 샌드박싱은 Claude Code가 위험을 줄이면서 더 자유롭게 작업할 수 있는 정의된 경계를 미리 생성합니다. 샌드박싱된 bash 도구는 OS 수준의 기본 요소를 사용하여 파일시스템 및 네트워크 격리를 모두 적용합니다.샌드박싱이 중요한 이유
기존의 권한 기반 보안은 bash 명령에 대한 지속적인 사용자 승인이 필요합니다. 이는 제어를 제공하지만 다음과 같은 문제를 야기할 수 있습니다:- 승인 피로: “승인” 버튼을 반복적으로 클릭하면 사용자가 승인하는 내용에 덜 주의를 기울이게 될 수 있습니다
- 생산성 감소: 지속적인 중단으로 인해 개발 워크플로우가 느려집니다
- 제한된 자율성: Claude Code는 승인을 기다릴 때 효율적으로 작업할 수 없습니다
- 명확한 경계 정의: Claude Code가 액세스할 수 있는 정확한 디렉토리 및 네트워크 호스트를 지정합니다
- 권한 프롬프트 감소: 샌드박스 내의 안전한 명령은 승인이 필요하지 않습니다
- 보안 유지: 샌드박스 외부의 리소스에 액세스하려는 시도는 즉시 알림을 트리거합니다
- 자율성 활성화: Claude Code는 정의된 제한 내에서 더 독립적으로 실행할 수 있습니다
작동 방식
파일시스템 격리
샌드박싱된 bash 도구는 파일 시스템 액세스를 특정 디렉토리로 제한합니다:- 기본 쓰기 동작: 현재 작업 디렉토리 및 그 하위 디렉토리에 대한 읽기 및 쓰기 액세스
- 기본 읽기 동작: 특정 거부된 디렉토리를 제외한 전체 컴퓨터에 대한 읽기 액세스
- 차단된 액세스: 명시적 권한 없이 현재 작업 디렉토리 외부의 파일을 수정할 수 없습니다
- 구성 가능: 설정을 통해 사용자 정의 허용 및 거부 경로를 정의합니다
sandbox.filesystem.allowWrite를 사용하여 추가 경로에 대한 쓰기 액세스를 부여할 수 있습니다. 이러한 제한은 OS 수준(macOS의 Seatbelt, Linux의 bubblewrap)에서 적용되므로 Claude의 파일 도구뿐만 아니라 kubectl, terraform, npm과 같은 도구를 포함한 모든 하위 프로세스 명령에 적용됩니다.
네트워크 격리
네트워크 액세스는 샌드박스 외부에서 실행되는 프록시 서버를 통해 제어됩니다:- 도메인 제한: 승인된 도메인만 액세스할 수 있습니다
- 사용자 확인: 새 도메인 요청은 권한 프롬프트를 트리거합니다(
allowManagedDomainsOnly가 활성화된 경우 제외, 이는 허용되지 않은 도메인을 자동으로 차단합니다) - 사용자 정의 프록시 지원: 고급 사용자는 나가는 트래픽에 대한 사용자 정의 규칙을 구현할 수 있습니다
- 포괄적 범위: 제한은 명령으로 생성된 모든 스크립트, 프로그램 및 하위 프로세스에 적용됩니다
OS 수준 적용
샌드박싱된 bash 도구는 운영 체제 보안 기본 요소를 활용합니다:- macOS: 샌드박스 적용을 위해 Seatbelt를 사용합니다
- Linux: 격리를 위해 bubblewrap을 사용합니다
- WSL2: Linux와 동일하게 bubblewrap을 사용합니다
시작하기
필수 조건
macOS에서는 기본 제공 Seatbelt 프레임워크를 사용하여 샌드박싱이 기본적으로 작동합니다. Linux 및 WSL2에서는 먼저 필수 패키지를 설치합니다:- Ubuntu/Debian
- Fedora
샌드박싱 활성화
/sandbox 명령을 실행하여 샌드박싱을 활성화할 수 있습니다:
bubblewrap 또는 socat과 같은 필수 종속성이 누락된 경우 메뉴에 플랫폼에 대한 설치 지침이 표시됩니다.
기본적으로 샌드박스를 시작할 수 없는 경우(누락된 종속성, 지원되지 않는 플랫폼 또는 플랫폼 제한), Claude Code는 경고를 표시하고 샌드박싱 없이 명령을 실행합니다. 대신 이를 하드 실패로 만들려면 sandbox.failIfUnavailable을 true로 설정합니다. 이는 샌드박싱을 보안 게이트로 요구하는 관리 배포를 위한 것입니다.
샌드박스 모드
Claude Code는 두 가지 샌드박스 모드를 제공합니다: 자동 허용 모드: Bash 명령은 샌드박스 내에서 실행을 시도하며 권한 없이 자동으로 허용됩니다. 샌드박싱할 수 없는 명령(허용되지 않은 호스트에 대한 네트워크 액세스가 필요한 경우 등)은 일반 권한 흐름으로 폴백됩니다. 구성한 명시적 요청/거부 규칙은 항상 존중됩니다. 일반 권한 모드: 모든 bash 명령은 샌드박싱되었더라도 표준 권한 흐름을 거칩니다. 이는 더 많은 제어를 제공하지만 더 많은 승인이 필요합니다. 두 모드 모두에서 샌드박스는 동일한 파일시스템 및 네트워크 제한을 적용합니다. 차이점은 샌드박싱된 명령이 자동 승인되는지 또는 명시적 권한이 필요한지 여부뿐입니다.자동 허용 모드는 권한 모드 설정과 독립적으로 작동합니다. “편집 수락” 모드에 있지 않더라도 자동 허용이 활성화되면 샌드박싱된 bash 명령이 자동으로 실행됩니다. 이는 샌드박스 경계 내에서 파일을 수정하는 bash 명령이 파일 편집 도구가 일반적으로 승인을 요구할 때도 프롬프트 없이 실행됨을 의미합니다.
샌드박싱 구성
settings.json 파일을 통해 샌드박스 동작을 사용자 정의합니다. 전체 구성 참조는 설정을 참조하세요.
특정 경로에 대한 하위 프로세스 쓰기 액세스 부여
기본적으로 샌드박싱된 명령은 현재 작업 디렉토리에만 쓸 수 있습니다.kubectl, terraform 또는 npm과 같은 하위 프로세스 명령이 프로젝트 디렉토리 외부에 쓰기해야 하는 경우 sandbox.filesystem.allowWrite를 사용하여 특정 경로에 대한 액세스를 부여합니다:
excludedCommands로 샌드박스에서 완전히 제외하는 것보다 도구가 특정 위치에 쓰기 액세스가 필요할 때 권장되는 방법입니다.
allowWrite(또는 denyWrite/denyRead/allowRead)가 여러 설정 범위에서 정의된 경우 배열이 병합됩니다. 즉, 모든 범위의 경로가 결합되며 대체되지 않습니다. 예를 들어 관리 설정이 /opt/company-tools에 대한 쓰기를 허용하고 사용자가 개인 설정에서 ~/.kube를 추가하면 두 경로 모두 최종 샌드박스 구성에 포함됩니다. 이는 사용자와 프로젝트가 더 높은 우선순위 범위에서 설정한 경로를 복제하거나 재정의하지 않고 목록을 확장할 수 있음을 의미합니다.
경로 접두사는 경로가 해석되는 방식을 제어합니다:
| 접두사 | 의미 | 예시 |
|---|---|---|
/ | 파일시스템 루트의 절대 경로 | /tmp/build는 /tmp/build로 유지됩니다 |
~/ | 홈 디렉토리에 상대적 | ~/.kube는 $HOME/.kube가 됩니다 |
./ 또는 접두사 없음 | 프로젝트 설정의 경우 프로젝트 루트에 상대적이거나, ~/.claude에 대한 사용자 설정의 경우 | .claude/settings.json의 ./output은 <project-root>/output으로 해석됩니다 |
//path 접두사는 절대 경로용으로 여전히 작동합니다. 이전에 프로젝트 상대 해석을 기대하면서 단일 슬래시 /path를 사용했다면 ./path로 전환하세요. 이 구문은 절대 경로에 //path를 사용하고 프로젝트 상대에 /path를 사용하는 Read 및 Edit 권한 규칙과 다릅니다. 샌드박스 파일시스템 경로는 표준 규칙을 사용합니다: /tmp/build는 절대 경로입니다.
sandbox.filesystem.denyWrite 및 sandbox.filesystem.denyRead를 사용하여 쓰기 또는 읽기 액세스를 거부할 수도 있습니다. 이들은 Edit(...) 및 Read(...) 권한 규칙의 모든 경로와 병합됩니다. 거부된 영역 내에서 특정 경로 읽기를 다시 허용하려면 denyRead보다 우선하는 sandbox.filesystem.allowRead를 사용합니다. allowManagedReadPathsOnly가 관리 설정에서 활성화되면 관리 allowRead 항목만 존중되고 사용자, 프로젝트 및 로컬 allowRead 항목은 무시됩니다.
예를 들어 홈 디렉토리 전체에서의 읽기를 차단하면서도 현재 프로젝트에서의 읽기를 허용하려면 프로젝트의 .claude/settings.json에 다음을 추가합니다:
allowRead의 .은 프로젝트 루트로 해석됩니다. 동일한 구성을 ~/.claude/settings.json에 배치했다면 .은 ~/.claude로 해석되고 프로젝트 파일은 denyRead 규칙에 의해 차단된 상태로 유지됩니다.
Claude Code는 필요할 때 명령이 샌드박스 외부에서 실행될 수 있도록 하는 의도적인 탈출 해치 메커니즘을 포함합니다. 명령이 샌드박스 제한으로 인해 실패할 때(예: 네트워크 연결 문제 또는 호환되지 않는 도구), Claude는 실패를 분석하도록 프롬프트되며
dangerouslyDisableSandbox 매개변수로 명령을 다시 시도할 수 있습니다. 이 매개변수를 사용하는 명령은 실행을 위해 사용자 권한이 필요한 일반 Claude Code 권한 흐름을 거칩니다. 이를 통해 Claude Code는 특정 도구 또는 네트워크 작업이 샌드박스 제약 내에서 작동할 수 없는 경우를 처리할 수 있습니다.샌드박스 설정에서 "allowUnsandboxedCommands": false를 설정하여 이 탈출 해치를 비활성화할 수 있습니다. 비활성화되면 dangerouslyDisableSandbox 매개변수가 완전히 무시되고 모든 명령은 샌드박싱되거나 excludedCommands에 명시적으로 나열되어야 합니다.보안 이점
프롬프트 주입으로부터의 보호
공격자가 프롬프트 주입을 통해 Claude Code의 동작을 성공적으로 조작하더라도 샌드박스는 시스템이 안전하게 유지되도록 보장합니다: 파일시스템 보호:~/.bashrc와 같은 중요한 구성 파일을 수정할 수 없습니다/bin/의 시스템 수준 파일을 수정할 수 없습니다- Claude 권한 설정에서 거부된 파일을 읽을 수 없습니다
- 공격자가 제어하는 서버로 데이터를 유출할 수 없습니다
- 승인되지 않은 도메인에서 악성 스크립트를 다운로드할 수 없습니다
- 승인되지 않은 서비스에 예상치 못한 API 호출을 할 수 없습니다
- 명시적으로 허용된 도메인이 아닌 다른 도메인에 연락할 수 없습니다
- 샌드박스 외부의 모든 액세스 시도는 OS 수준에서 차단됩니다
- 경계가 테스트될 때 즉시 알림을 받습니다
- 요청을 거부하거나, 한 번만 허용하거나, 구성을 영구적으로 업데이트하도록 선택할 수 있습니다
공격 표면 감소
샌드박싱은 다음으로 인한 잠재적 피해를 제한합니다:- 악성 종속성: 해로운 코드가 있는 NPM 패키지 또는 기타 종속성
- 손상된 스크립트: 보안 취약점이 있는 빌드 스크립트 또는 도구
- 사회 공학: 사용자를 속여 위험한 명령을 실행하도록 하는 공격
- 프롬프트 주입: Claude를 속여 위험한 명령을 실행하도록 하는 공격
투명한 작동
Claude Code가 샌드박스 외부의 네트워크 리소스에 액세스하려고 시도할 때:- 작업이 OS 수준에서 차단됩니다
- 즉시 알림을 받습니다
- 다음을 선택할 수 있습니다:
- 요청 거부
- 한 번만 허용
- 샌드박스 구성을 업데이트하여 영구적으로 허용
보안 제한 사항
- 네트워크 샌드박싱 제한: 네트워크 필터링 시스템은 프로세스가 연결할 수 있는 도메인을 제한하여 작동합니다. 프록시를 통과하는 트래픽을 검사하지 않으며 사용자는 정책에서 신뢰할 수 있는 도메인만 허용하도록 해야 합니다.
- Unix 소켓을 통한 권한 상승:
allowUnixSockets구성은 실수로 샌드박스 우회로 이어질 수 있는 강력한 시스템 서비스에 대한 액세스를 부여할 수 있습니다. 예를 들어/var/run/docker.sock에 대한 액세스를 허용하는 데 사용되면 docker 소켓을 악용하여 호스트 시스템에 대한 액세스를 효과적으로 부여합니다. 사용자는 샌드박스를 통해 허용하는 모든 unix 소켓을 신중하게 고려하도록 권장됩니다. - 파일시스템 권한 상승: 과도하게 광범위한 파일시스템 쓰기 권한은 권한 상승 공격을 가능하게 할 수 있습니다.
$PATH의 실행 파일을 포함하는 디렉토리, 시스템 구성 디렉토리 또는 사용자 셸 구성 파일(.bashrc,.zshrc)에 대한 쓰기를 허용하면 다른 사용자 또는 시스템 프로세스가 이러한 파일에 액세스할 때 다른 보안 컨텍스트에서 코드 실행으로 이어질 수 있습니다. - Linux 샌드박스 강도: Linux 구현은 강력한 파일시스템 및 네트워크 격리를 제공하지만 권한 있는 네임스페이스 없이 Docker 환경 내에서 작동할 수 있도록 하는
enableWeakerNestedSandbox모드를 포함합니다. 이 옵션은 보안을 상당히 약화시키며 추가 격리가 다른 방식으로 적용되는 경우에만 사용해야 합니다.
샌드박싱이 권한과 어떻게 관련되는지
샌드박싱과 권한은 함께 작동하는 상호 보완적인 보안 계층입니다:- 권한은 Claude Code가 사용할 수 있는 도구를 제어하며 도구가 실행되기 전에 평가됩니다. 이들은 모든 도구에 적용됩니다: Bash, Read, Edit, WebFetch, MCP 등.
- 샌드박싱은 Bash 명령이 파일시스템 및 네트워크 수준에서 액세스할 수 있는 것을 제한하는 OS 수준의 적용을 제공합니다. Bash 명령 및 그 자식 프로세스에만 적용됩니다.
sandbox.filesystem.allowWrite를 사용하여 작업 디렉토리 외부의 경로에 대한 하위 프로세스 쓰기 액세스를 부여합니다sandbox.filesystem.denyWrite및sandbox.filesystem.denyRead를 사용하여 특정 경로에 대한 하위 프로세스 액세스를 차단합니다sandbox.filesystem.allowRead를 사용하여denyRead영역 내의 특정 경로 읽기를 다시 허용합니다Read및Edit거부 규칙을 사용하여 특정 파일 또는 디렉토리에 대한 액세스를 차단합니다WebFetch허용/거부 규칙을 사용하여 도메인 액세스를 제어합니다- 샌드박스
allowedDomains를 사용하여 Bash 명령이 도달할 수 있는 도메인을 제어합니다
sandbox.filesystem 설정 및 권한 규칙의 경로는 최종 샌드박스 구성으로 병합됩니다.
이 저장소에는 샌드박스 관련 예제를 포함한 일반적인 배포 시나리오에 대한 시작 설정 구성이 포함되어 있습니다. 이를 시작점으로 사용하고 필요에 맞게 조정합니다.
고급 사용
사용자 정의 프록시 구성
고급 네트워크 보안이 필요한 조직의 경우 사용자 정의 프록시를 구현하여 다음을 수행할 수 있습니다:- HTTPS 트래픽 복호화 및 검사
- 사용자 정의 필터링 규칙 적용
- 모든 네트워크 요청 로깅
- 기존 보안 인프라와 통합
기존 보안 도구와의 통합
샌드박싱된 bash 도구는 다음과 함께 작동합니다:- 권한 규칙: 권한 설정과 결합하여 심층 방어를 수행합니다
- 개발 컨테이너: devcontainers와 함께 사용하여 추가 격리를 수행합니다
- 엔터프라이즈 정책: 관리 설정을 통해 샌드박스 구성을 적용합니다
모범 사례
- 제한적으로 시작: 최소 권한으로 시작하여 필요에 따라 확장합니다
- 로그 모니터링: 샌드박스 위반 시도를 검토하여 Claude Code의 필요 사항을 이해합니다
- 환경별 구성 사용: 개발 및 프로덕션 컨텍스트에 대해 다른 샌드박스 규칙을 사용합니다
- 권한과 결합: 포괄적인 보안을 위해 샌드박싱을 IAM 정책과 함께 사용합니다
- 구성 테스트: 샌드박스 설정이 합법적인 워크플로우를 차단하지 않는지 확인합니다
오픈 소스
샌드박스 런타임은 자신의 에이전트 프로젝트에서 사용할 수 있는 오픈 소스 npm 패키지로 제공됩니다. 이를 통해 더 넓은 AI 에이전트 커뮤니티가 더 안전하고 보안이 강화된 자율 시스템을 구축할 수 있습니다. 이를 사용하여 실행하려는 다른 프로그램을 샌드박싱할 수도 있습니다. 예를 들어 MCP 서버를 샌드박싱하려면 다음을 실행할 수 있습니다:제한 사항
- 성능 오버헤드: 최소이지만 일부 파일시스템 작업이 약간 더 느릴 수 있습니다
- 호환성: 특정 시스템 액세스 패턴이 필요한 일부 도구는 구성 조정이 필요할 수 있으며 샌드박스 외부에서 실행해야 할 수도 있습니다
- 플랫폼 지원: macOS, Linux 및 WSL2를 지원합니다. WSL1은 지원되지 않습니다. 기본 Windows 지원이 계획되어 있습니다.
샌드박싱이 다루지 않는 것
샌드박스는 Bash 하위 프로세스를 격리합니다. 다른 도구는 다른 경계에서 작동합니다:- 기본 제공 파일 도구: Read, Edit 및 Write는 샌드박스를 통해 실행되지 않고 권한 시스템을 직접 사용합니다. 권한을 참조하세요.
- Desktop의 컴퓨터 사용: Claude가 macOS에서 앱을 열고 화면을 제어할 때 격리된 환경이 아닌 실제 데스크톱에서 실행됩니다. 앱별 권한 프롬프트가 각 애플리케이션을 제어합니다. 컴퓨터 사용을 참조하세요.