위협 모델
에이전트는 프롬프트 주입(처리하는 콘텐츠에 포함된 지시사항) 또는 모델 오류로 인해 의도하지 않은 작업을 수행할 수 있습니다. Claude 모델은 이에 저항하도록 설계되었습니다. 자세한 평가는 모델 개요 및 배포하는 모델의 시스템 카드를 참조하십시오. 그럼에도 불구하고 심층 방어는 좋은 관행입니다. 예를 들어, 에이전트가 고객 데이터를 외부 서버로 보내도록 지시하는 악성 파일을 처리하는 경우, 네트워크 제어가 해당 요청을 완전히 차단할 수 있습니다.기본 제공 보안 기능
Claude Code에는 일반적인 문제를 해결하는 여러 보안 기능이 포함되어 있습니다. 전체 세부사항은 보안 설명서를 참조하십시오.- 권한 시스템: 모든 도구 및 bash 명령을 허용, 차단 또는 사용자 승인 요청으로 구성할 수 있습니다. glob 패턴을 사용하여 “모든 npm 명령 허용” 또는 “sudo가 있는 모든 명령 차단”과 같은 규칙을 만듭니다. 조직은 모든 사용자에게 적용되는 정책을 설정할 수 있습니다. 권한을 참조하십시오.
- 권한을 위한 명령 파싱: bash 명령을 실행하기 전에 Claude Code는 이를 AST로 파싱하고 결과를 권한 규칙과 비교합니다. 깔끔하게 파싱할 수 없거나 허용 규칙과 일치하지 않는 명령은 명시적 승인이 필요합니다.
eval과 같은 작은 구성 집합은 허용 규칙에 관계없이 항상 승인이 필요합니다. 이는 권한 게이트이지 샌드박스가 아닙니다. 대상 경로나 효과에서 명령이 위험한지 여부를 추론하지 않습니다. - 웹 검색 요약: 검색 결과는 원본 콘텐츠를 컨텍스트에 직접 전달하는 대신 요약되어 악성 웹 콘텐츠로부터의 프롬프트 주입 위험을 줄입니다.
- 샌드박스 모드: Bash 명령은 파일 시스템 및 네트워크 접근을 제한하는 샌드박스 환경에서 실행될 수 있습니다. 자세한 내용은 샌드박싱 설명서를 참조하십시오.
보안 원칙
Claude Code의 기본값을 넘어 추가 강화가 필요한 배포의 경우, 이러한 원칙이 사용 가능한 옵션을 안내합니다.보안 경계
보안 경계는 신뢰 수준이 다른 구성 요소를 분리합니다. 높은 보안 배포의 경우, 민감한 리소스(자격증명 등)를 에이전트를 포함하는 경계 외부에 배치할 수 있습니다. 에이전트의 환경에서 문제가 발생하면, 해당 경계 외부의 리소스는 보호된 상태로 유지됩니다. 예를 들어, 에이전트에 API 키에 대한 직접 접근을 제공하는 대신, 에이전트의 환경 외부에서 실행되는 프록시를 실행하여 요청에 키를 주입할 수 있습니다. 에이전트는 API 호출을 할 수 있지만 자격증명 자체는 볼 수 없습니다. 이 패턴은 다중 테넌트 배포 또는 신뢰할 수 없는 콘텐츠를 처리할 때 유용합니다.최소 권한
필요한 경우, 에이전트를 특정 작업에 필요한 기능으로만 제한할 수 있습니다:심층 방어
높은 보안 환경의 경우, 여러 제어를 계층화하면 추가 보호를 제공합니다. 옵션은 다음을 포함합니다:- 컨테이너 격리
- 네트워크 제한
- 파일 시스템 제어
- 프록시에서의 요청 검증
격리 기술
다양한 격리 기술은 보안 강도, 성능, 운영 복잡성 간의 다양한 트레이드오프를 제공합니다.이러한 모든 구성에서 Claude Code(또는 Agent SDK 애플리케이션)는 격리 경계(샌드박스, 컨테이너 또는 VM) 내부에서 실행됩니다. 아래에 설명된 보안 제어는 에이전트가 해당 경계 내에서 접근할 수 있는 것을 제한합니다.
샌드박스 런타임
컨테이너 없이 경량 격리를 위해 sandbox-runtime은 OS 수준에서 파일 시스템 및 네트워크 제한을 적용합니다. 주요 장점은 단순성입니다: Docker 구성, 컨테이너 이미지 또는 네트워킹 설정이 필요하지 않습니다. 프록시 및 파일 시스템 제한이 기본 제공됩니다. 허용된 도메인 및 경로를 지정하는 설정 파일을 제공합니다. 작동 방식:- 파일 시스템: OS 기본 요소(
bubblewrapon Linux,sandbox-execon macOS)를 사용하여 구성된 경로에 대한 읽기/쓰기 접근을 제한합니다 - 네트워크: 네트워크 네임스페이스(Linux)를 제거하거나 Seatbelt 프로필(macOS)을 사용하여 네트워크 트래픽을 기본 제공 프록시를 통해 라우팅합니다
- 구성: 도메인 및 파일 시스템 경로에 대한 JSON 기반 허용 목록
- 동일 호스트 커널: VM과 달리 샌드박스 프로세스는 호스트 커널을 공유합니다. 커널 취약점은 이론적으로 탈출을 가능하게 할 수 있습니다. 일부 위협 모델의 경우 이는 허용되지만, 커널 수준 격리가 필요한 경우 gVisor 또는 별도의 VM을 사용하십시오.
- TLS 검사 없음: 프록시는 클라이언트가 제공한 호스트명을 기반으로 도메인을 허용 목록에 추가하며 암호화된 트래픽을 종료하거나 검사하지 않습니다. 샌드박스 내부에서 실행되는 코드는 잠재적으로 도메인 프론팅 또는 유사한 기술을 사용하여 허용 목록 외부의 호스트에 도달할 수 있습니다. 위협 모델이 더 강력한 보장을 요구하는 경우, TLS 종료 프록시를 구성하십시오. 자세한 내용은 샌드박싱 보안 제한사항을 참조하십시오. 별도로, 에이전트가 허용된 도메인에 대한 허용 자격증명을 가지고 있는 경우, 해당 도메인을 사용하여 다른 네트워크 요청을 트리거하거나 데이터를 유출할 수 없도록 하십시오.
컨테이너
컨테이너는 Linux 네임스페이스를 통해 격리를 제공합니다. 각 컨테이너는 파일 시스템, 프로세스 트리 및 네트워크 스택의 자체 보기를 가지면서 호스트 커널을 공유합니다. 보안 강화 컨테이너 구성은 다음과 같을 수 있습니다:
Unix 소켓 아키텍처:
--network none을 사용하면 컨테이너에는 네트워크 인터페이스가 전혀 없습니다. 에이전트가 외부 세계에 도달할 수 있는 유일한 방법은 호스트에서 실행되는 프록시에 연결된 마운트된 Unix 소켓을 통하는 것입니다. 이 프록시는 도메인 허용 목록을 적용하고, 자격증명을 주입하며, 모든 트래픽을 기록할 수 있습니다.
이는 sandbox-runtime에서 사용하는 것과 동일한 아키텍처입니다. 에이전트가 프롬프트 주입을 통해 손상되더라도, 임의의 서버로 데이터를 유출할 수 없습니다. 프록시를 통해서만 통신할 수 있으며, 프록시는 어떤 도메인에 도달할 수 있는지 제어합니다. 자세한 내용은 Claude Code 샌드박싱 블로그 게시물을 참조하십시오.
추가 강화 옵션:
gVisor
표준 컨테이너는 호스트 커널을 공유합니다: 컨테이너 내부의 코드가 시스템 호출을 할 때, 호스트를 실행하는 동일한 커널로 직접 이동합니다. 이는 커널 취약점이 컨테이너 탈출을 허용할 수 있다는 의미입니다. gVisor는 시스템 호출을 사용자 공간에서 호스트 커널에 도달하기 전에 가로채서 이를 해결하며, 실제 커널을 포함하지 않고 대부분의 시스템 호출을 처리하는 자체 호환성 계층을 구현합니다. 에이전트가 악성 코드를 실행하는 경우(아마도 프롬프트 주입으로 인해), 해당 코드는 컨테이너에서 실행되고 커널 익스플로잇을 시도할 수 있습니다. gVisor를 사용하면 공격 표면이 훨씬 더 작습니다: 악성 코드는 먼저 gVisor의 사용자 공간 구현을 익스플로잇해야 하며 실제 커널에 대한 접근이 제한됩니다. Docker에서 gVisor를 사용하려면runsc 런타임을 설치하고 데몬을 구성하십시오:
다중 테넌트 환경이나 신뢰할 수 없는 콘텐츠를 처리할 때, 추가 격리는 종종 오버헤드의 가치가 있습니다.
가상 머신
VM은 CPU 가상화 확장을 통해 하드웨어 수준 격리를 제공합니다. 각 VM은 자체 커널을 실행하여 강력한 경계를 만듭니다. 게스트 커널의 취약점은 호스트를 직접 손상시키지 않습니다. 그러나 VM이 자동으로 gVisor와 같은 대안보다 “더 안전한” 것은 아닙니다. VM 보안은 하이퍼바이저 및 장치 에뮬레이션 코드에 크게 달려 있습니다. Firecracker는 경량 microVM 격리를 위해 설계되었습니다. 125ms 미만에 VM을 부팅할 수 있으며 메모리 오버헤드는 5MiB 미만이며, 불필요한 장치 에뮬레이션을 제거하여 공격 표면을 줄입니다. 이 접근 방식을 사용하면 에이전트 VM에는 외부 네트워크 인터페이스가 없습니다. 대신vsock(가상 소켓)을 통해 통신합니다. 모든 트래픽은 vsock을 통해 호스트의 프록시로 라우팅되며, 프록시는 허용 목록을 적용하고 요청을 전달하기 전에 자격증명을 주입합니다.
클라우드 배포
클라우드 배포의 경우, 위의 격리 기술 중 하나를 클라우드 네이티브 네트워크 제어와 결합할 수 있습니다:- 에이전트 컨테이너를 인터넷 게이트웨이가 없는 프라이빗 서브넷에서 실행합니다
- 클라우드 방화벽 규칙(AWS 보안 그룹, GCP VPC 방화벽)을 구성하여 프록시를 제외한 모든 송신을 차단합니다
- 요청을 검증하고, 도메인 허용 목록을 적용하며, 자격증명을 주입하고, 외부 API로 전달하는 프록시(예:
credential_injector필터가 있는 Envoy)를 실행합니다 - 에이전트의 서비스 계정에 최소 IAM 권한을 할당하여 가능한 경우 민감한 접근을 프록시를 통해 라우팅합니다
- 감사 목적으로 프록시에서 모든 트래픽을 기록합니다
자격증명 관리
에이전트는 종종 API를 호출하고, 저장소에 접근하거나, 클라우드 서비스와 상호작용하기 위해 자격증명이 필요합니다. 과제는 자격증명 자체를 노출하지 않으면서 이러한 접근을 제공하는 것입니다.프록시 패턴
권장되는 접근 방식은 에이전트의 보안 경계 외부에서 실행되는 프록시를 실행하여 나가는 요청에 자격증명을 주입하는 것입니다. 에이전트는 자격증명 없이 요청을 보내고, 프록시가 이를 추가하며, 요청을 대상으로 전달합니다. 이 패턴에는 여러 이점이 있습니다:- 에이전트는 실제 자격증명을 볼 수 없습니다
- 프록시는 허용된 엔드포인트의 허용 목록을 적용할 수 있습니다
- 프록시는 감사를 위해 모든 요청을 기록할 수 있습니다
- 자격증명은 각 에이전트에 분산되는 대신 하나의 안전한 위치에 저장됩니다
Claude Code를 프록시를 사용하도록 구성
Claude Code는 샘플링 요청을 프록시를 통해 라우팅하기 위한 두 가지 방법을 지원합니다: 옵션 1: ANTHROPIC_BASE_URL(간단하지만 샘플링 API 요청만 해당)프록시 구현
자신의 프록시를 구축하거나 기존 프록시를 사용할 수 있습니다:- Envoy Proxy: 인증 헤더를 추가하기 위한
credential_injector필터가 있는 프로덕션 등급 프록시 - mitmproxy: HTTPS 트래픽을 검사하고 수정하기 위한 TLS 종료 프록시
- Squid: 접근 제어 목록이 있는 캐싱 프록시
- LiteLLM: 자격증명 주입 및 속도 제한이 있는 LLM 게이트웨이
다른 서비스를 위한 자격증명
Claude API에서 샘플링하는 것 외에도, 에이전트는 종종 git 저장소, 데이터베이스, 내부 API와 같은 다른 서비스에 대한 인증된 접근이 필요합니다. 두 가지 주요 접근 방식이 있습니다:사용자 정의 도구
에이전트의 보안 경계 외부에서 실행되는 서비스에 대한 요청을 라우팅하는 MCP 서버 또는 사용자 정의 도구를 통해 접근을 제공합니다. 에이전트는 도구를 호출하지만, 실제 인증된 요청은 외부에서 발생합니다. 도구 호출은 자격증명을 주입하는 프록시로 이동합니다. 예를 들어, git MCP 서버는 에이전트로부터 명령을 수락할 수 있지만 호스트에서 실행되는 git 프록시로 전달하여 원격 저장소에 연결하기 전에 인증을 추가합니다. 에이전트는 자격증명을 볼 수 없습니다. 장점:- TLS 검사 없음: 외부 서비스는 인증된 요청을 직접 만듭니다
- 자격증명이 외부에 유지됨: 에이전트는 기본 자격증명이 아닌 도구 인터페이스만 봅니다
트래픽 전달
Claude API 호출의 경우,ANTHROPIC_BASE_URL을 사용하면 평문으로 요청을 검사하고 수정할 수 있는 프록시로 요청을 라우팅할 수 있습니다. 그러나 다른 HTTPS 서비스(GitHub, npm 레지스트리, 내부 API)의 경우, 트래픽은 종종 엔드 투 엔드로 암호화됩니다. HTTP_PROXY를 통해 프록시로 라우팅하더라도, 프록시는 불투명한 TLS 터널만 보고 자격증명을 주입할 수 없습니다.
사용자 정의 도구를 사용하지 않고 임의의 서비스에 대한 HTTPS 트래픽을 수정하려면, 트래픽을 해독하고, 검사하거나 수정한 다음, 전달하기 전에 다시 암호화하는 TLS 종료 프록시가 필요합니다. 이는 다음이 필요합니다:
- 에이전트의 컨테이너 외부에서 프록시를 실행합니다
- 프록시의 CA 인증서를 에이전트의 신뢰 저장소에 설치합니다(에이전트가 프록시의 인증서를 신뢰하도록)
HTTP_PROXY/HTTPS_PROXY를 구성하여 트래픽을 프록시를 통해 라우팅합니다
HTTP_PROXY/HTTPS_PROXY를 존중하는 것은 아닙니다. 대부분의 도구(curl, pip, npm, git)는 존중하지만, 일부는 이러한 변수를 무시하고 직접 연결할 수 있습니다. 예를 들어, Node.js fetch()는 기본적으로 이러한 변수를 무시합니다. Node 24+에서는 NODE_USE_ENV_PROXY=1을 설정하여 지원을 활성화할 수 있습니다. 포괄적인 범위를 위해 proxychains를 사용하여 네트워크 호출을 가로채거나, iptables를 구성하여 아웃바운드 트래픽을 투명 프록시로 리디렉션할 수 있습니다.
투명 프록시는 네트워크 수준에서 트래픽을 가로채므로 클라이언트가 이를 사용하도록 구성할 필요가 없습니다. 일반 프록시는 클라이언트가 명시적으로 연결하고 HTTP CONNECT 또는 SOCKS를 말해야 합니다. 투명 프록시(Squid 또는 투명 모드의 mitmproxy와 같은)는 리디렉션된 원본 TCP 연결을 처리할 수 있습니다.
파일 시스템 구성
파일 시스템 제어는 에이전트가 읽고 쓸 수 있는 파일을 결정합니다.읽기 전용 코드 마운트
에이전트가 코드를 분석해야 하지만 수정하지 않아야 할 때, 디렉토리를 읽기 전용으로 마운트합니다:쓰기 가능한 위치
에이전트가 파일을 작성해야 하는 경우, 변경사항을 유지할지 여부에 따라 몇 가지 옵션이 있습니다: 컨테이너의 임시 워크스페이스의 경우, 메모리에만 존재하고 컨테이너가 중지될 때 지워지는tmpfs 마운트를 사용합니다: