npm ci를 실행할 때만 네트워크를 여는 Claude Code 권한 설정

Claude Code 2.1.271이 샌드박스 자동 모드에 명령 단위 네트워크 접근을 추가했습니다. npm ci 설치에만 레지스트리를 열고 이후 빌드와 테스트 단계에서는 다시 닫는 설정법, 상시 허용 목록과의 차이, 실제 보안 경계를 구체적으로 정리합니다.

Tuesday, September 15, 2026Omid Saffari
npm ci를 실행할 때만 네트워크를 여는 Claude Code 권한 설정

npm ci 같은 의존성 설치 하나 때문에 Claude Code 작업의 나머지 단계까지 네트워크 경계를 넓힐 필요가 없어졌습니다. 2026년 9월 14일, Claude Code 2.1.271은 샌드박스 자동 모드에 명령 단위 네트워크 접근을 추가했습니다. 이제 설치에 허용한 레지스트리 호스트는 해당 명령이 끝나는 즉시 다시 닫힙니다.

실제로 달라진 점은 무엇인가

여기에는 서로 다른 두 가지 Claude Code 보안 계층이 얽혀 있습니다. 둘을 구분해야 이번 변경의 의미가 선명해집니다.

자동 모드는 툴 호출을 실행해도 되는지 판단합니다. 별도의 분류기가 사용자의 요청에 비춰 해당 동작을 검토합니다. 전반적인 권한 모델은 기존 Claude Code 자동 모드 가이드에서 다뤘습니다.

샌드박스는 실행 중인 셸 명령이 접근할 수 있는 범위를 정합니다. 파일 쓰기를 제한하고, 네트워크 트래픽을 프록시로 보내 목적지 호스트를 확인합니다.

2.1.271에서는 이 두 계층이 더 긴밀하게 연결됩니다. 이제 샌드박스 자동 모드의 Bash, PowerShell 또는 Monitor 호출에 allowed_domains 목록을 담을 수 있습니다. Claude Code는 명령과 그 명령에 필요한 호스트를 함께 검토합니다. 승인된 호스트는 해당 명령에만 열리고, 다른 호스트는 샌드박스가 차단합니다. 릴리스 항목에도 이 범위가 명확히 적혀 있습니다.

이 스네이크 케이스 필드는 settings.jsonsandbox.network.allowedDomains와 같은 것이 아닙니다.

제어 방식적용 기간이후 명령에 미치는 영향
명령별 allowed_domains검토를 거친 Bash, PowerShell 또는 Monitor 호출 하나접근 권한이 이어지지 않습니다. 이후 명령은 필요한 호스트를 별도로 검토받아야 합니다.
sandbox.network.allowedDomains해당 설정이 적용되는 동안 모든 샌드박스 명령지정한 호스트가 이미 열려 있으므로 이후 명령도 접근할 수 있습니다.
저장된 WebFetch(domain:...) 허용 규칙해당 규칙을 불러오는 이후 세션호스트가 일회성 작업 예외가 아니라 상시 설정이 됩니다.
sandbox.network.deniedDomains일치하는 모든 샌드박스 연결더 넓은 허용 와일드카드 안에서도 거부 규칙이 우선합니다.

이 릴리스 전에는 새 샌드박스 호스트를 승인하면서 의도보다 넓은 권한을 만들 수 있었습니다. 수동 승인은 현재 세션이 끝날 때까지 유지되고, 저장한 승인은 이후 세션까지 남을 수 있습니다. 자동 모드 역시 호스트와 포트에 대한 판단을 캐시할 수 있습니다. 새 필드는 분류기의 기존 판단을 재사용하더라도 실행 시점의 접근 범위를 바꿉니다. 네트워크가 열리는 기간은 현재 명령으로 한정됩니다.

이 경계가 적용되는 조합은 릴리스에 명시된 그대로입니다. 자동 모드와 샌드박스를 함께 사용하면서 Bash, PowerShell 또는 Monitor를 호출할 때입니다. 수동 세션, 샌드박스 밖에서 실행되는 명령, 내장 파일 툴, 네트워크를 전혀 사용하지 않는 작업에는 이 경계가 새로 생기지 않습니다.

비용이 아니라 권한 범위를 줄이는 변화

이번 변경으로 Claude Code 좌석 가격이 달라진 것은 아닙니다. Anthropic은 명령 단위 도메인 접근을 위한 별도 요금, SKU 또는 성능 결과를 발표하지 않았습니다.

실제로 따져야 할 것은 방어해야 하는 권한의 크기입니다.

standing grant = approved host × every later command that can reuse it

command-scoped grant = approved host × the reviewed command

registry.npmjs.org가 필요한 의존성 설치를 예로 들어보겠습니다. 이전에는 무인 작업을 멈추고 네트워크 승인을 기다리거나, 레지스트리를 미리 허용해 이후 모든 샌드박스 명령도 접근할 수 있게 두는 난감한 선택을 해야 할 때가 많았습니다. 이제 자동 모드는 설치 명령과 함께 해당 호스트를 승인하고, 빌드·테스트·패키징·검토 단계로 넘어가기 전에 다시 닫을 수 있습니다.

구독 청구액은 그대로지만 두 가지 운영 비용은 달라집니다. 플랫폼 팀이 설계하고 나중에 정리해야 할 상시 예외가 줄어듭니다. 보안 검토자는 호스트가 남은 작업 전체에 열려 있다고 가정하는 대신, 명령과 호스트의 조합을 평가할 수 있습니다.

검토 과정에는 여전히 컴퓨팅 비용이 듭니다. Anthropic 권한 모드 문서에 명시된 Enterprise 및 사용량 기반 공급자 계정에서는 분류기 검사가 토큰 사용량에 포함되고 왕복 호출도 추가됩니다. 릴리스에는 소요 시간 벤치마크가 없으며 이 글을 위해 별도의 시간 측정도 하지 않았습니다. 따라서 몇 초를 절약한다는 식의 주장은 할 수 없습니다.

임시 다리가 설치 명령을 레지스트리에 연결한 뒤 테스트 명령 전에 올라가는 과정을 보여주는 건축 모형
레지스트리로 향하는 다리는 설치 명령에만 속합니다. 다음 테스트 단계는 이전 네트워크 경로를 물려받지 않은 채 시작됩니다.

당장 활용할 수 있는 사람들

장시간 빌드 작업을 돌리는 개인 창업자

Claude Code가 SaaS 저장소의 잠금 파일에 맞춰 패키지를 복원하도록 한 뒤, 공개 레지스트리를 계속 열어두지 않고 테스트와 코드 검토까지 진행할 수 있습니다. 꼭 필요한 다운로드 한 번을 세션 전체의 상시 외부 통신 권한으로 바꾸지 않으면서 작업을 계속 돌릴 수 있다는 점이 핵심입니다.

여러 고객 저장소를 오가는 에이전시 기술 리드

고객의 패키지 호스트를 프로젝트 단위 예외로 또 저장하는 대신, 그 호스트가 필요한 설치에만 연결할 수 있습니다. 권한 정리 부담이 줄고, 이후 단계의 명령이 의존성 작업을 위해서만 열었던 호스트로 고객 코드를 보내기도 어려워집니다.

무인 에이전트를 관리하는 플랫폼 또는 보안 책임자

플랫폼 팀은 조직 차원의 거부 규칙과 관리형 도메인 제한을 유지하면서, 일상적인 명령이 그 정책 안에서 더 좁은 접근 권한을 요청하도록 할 수 있습니다. 검토 기록도 설명하기 쉬워집니다. 이 명령이 이 작업을 위해 이 호스트를 필요로 했다는 뜻이지, 에이전트가 이후에 수행한 모든 작업에 해당 호스트가 안전했다는 증거는 아닙니다.

설치와 테스트를 분리하는 빌드 엔지니어

패키지 복원은 네트워크 단계로, 테스트 스위트는 오프라인 단계로 나눌 수 있습니다. 침해된 테스트나 예상하지 못한 스크립트가 설치 후 레지스트리에 접속하려 해도, 별도의 상시 규칙이 해당 호스트를 이미 허용한 경우가 아니라면 이전 명령의 접근 권한을 물려받지 않습니다.

npm ci 의존성 설치에만 네트워크를 여는 설정

이번 변화를 가장 분명하게 확인하려면 package-lock.json이 커밋되어 있고, 알려진 레지스트리 하나를 통해 의존성을 가져오는 저장소가 좋습니다. npm은 자동화된 클린 설치에 npm ci를 사용하도록 문서화하고 있습니다. 잠금 파일이 필수이고, 잠금 파일과 매니페스트가 맞지 않으면 실패하며, 기존 node_modules를 제거하고, 매니페스트와 잠금 파일은 변경하지 않습니다. --ignore-scripts 옵션을 쓰면 설치 중 패키지 수명 주기 스크립트가 실행되지 않습니다. 이 동작은 npm 문서에서 확인할 수 있습니다.

  1. Claude Code 버전 확인

    변경 로그에 나온 버전 확인 명령을 실행합니다.

    Bash
    claude --version

    2.1.271 또는 이 기능이 포함된 이후 빌드를 사용합니다.

  2. 실패 시 닫히는 샌드박스에서 자동 모드 시작

    한 세션 동안 자동 모드와 샌드박스를 함께 사용하되, 샌드박스가 정상적으로 시작되어야 하고 차단된 명령을 경계 밖에서 다시 실행할 수 없도록 설정합니다.

    Bash
    claude --permission-mode auto --settings '{"sandbox":{"enabled":true,"failIfUnavailable":true,"allowUnsandboxedCommands":false}}'

    이 명령은 문서화된 --permission-mode, --settings, failIfUnavailable, allowUnsandboxedCommands 제어를 사용합니다. macOS에는 샌드박스가 내장되어 있습니다. Linux와 WSL2에는 bubblewrapsocat이 필요하며, 기본 제공 샌드박스는 네이티브 Windows를 지원하지 않습니다. 설정 방법과 플랫폼 제한은 샌드박스 가이드에 나와 있습니다.

  3. 설치 작업의 범위를 좁게 지정

    잠금 파일이 사설 레지스트리를 사용한다면 레지스트리 호스트를 바꾼 뒤, 다음 내용을 작업으로 전달합니다.

    package-lock.json에 잠긴 의존성만 npm ci --ignore-scripts로 설치합니다. 이 명령은 registry.npmjs.org에만 접근할 수 있습니다. 해당 호스트를 프로젝트 또는 사용자 설정에 저장하지 마세요. 설치가 끝나면 네트워크 접근 없이 별도 명령으로 테스트 스위트를 실행합니다. 설치에 다른 호스트가 필요하면 중단하세요.

    allowed_domains 필드를 직접 입력하는 것은 아닙니다. Claude Code가 셸 툴 호출을 만들고, 자동 모드가 요청된 호스트를 그 호출과 함께 검토합니다.

  4. 다음 단계가 닫힌 상태에서 시작하는지 확인

    /sandbox를 열어 해석된 Config 탭을 확인하고, registry.npmjs.org가 상시 allowedDomains 또는 저장된 WebFetch 규칙에 이미 들어 있지 않은지 점검합니다. 그런 다음 별도의 테스트 명령을 실행합니다. 이후 명령이 네트워크에 접근하려 하면 자체적으로 검토된 도메인 목록이 필요하며, 기존 정책에 따라 거부될 수도 있습니다.

흔히 놓치는 부분은 잠금 파일입니다. 패키지 잠금 파일은 사설 레지스트리, Git 호스트 또는 직접 연결된 tarball URL을 가리킬 수 있습니다. registry.npmjs.org만 적는다고 해서 그런 의존성을 그곳에서 받을 수 있게 되는 것은 아닙니다. 실제로 해석된 호스트를 확인해 목록을 정확하게 유지하고, 잠금 파일이 예상하지 못한 호스트를 요구하면 명령을 중단하도록 해야 합니다.

명령 단위 네트워크 접근이 해결하지 못하는 것

명령 단위 네트워크 접근은 호스트에 접근할 수 있는 시점을 좁힙니다. 해당 호스트가 신뢰할 만하다고 증명하거나, 암호화된 모든 요청을 검사하거나, 다운로드한 코드를 안전하게 만들지는 않습니다.

Anthropic의 내장 프록시는 호스트 이름을 기준으로 필터링하며, 기본적으로 TLS 내용을 검사하지 않습니다. 승인된 명령 안에서는 프로세스가 허용된 호스트의 어떤 경로에도 접근할 수 있습니다. 해당 명령이 만든 자식 프로세스도 같은 샌드박스 경계를 공유합니다. 그래서 npm ci --ignore-scripts가 교육용 예시로 유용합니다. 설치 단계에서 패키지 수명 주기 스크립트를 제외하지만, 다운로드한 패키지를 감사해 주는 것은 아닙니다.

관리형 정책은 여전히 이 기능보다 상위에 있습니다. strictAllowlist는 설정된 목록 밖의 모든 항목을 거부할 수 있고, allowManagedDomainsOnly는 관리형 설정에 있는 호스트만 허용하도록 제한할 수 있습니다. 명시적인 거부 규칙도 계속 차단합니다. 명령 단위 도메인이 이런 제어를 우회하지는 못합니다.

샌드박스 밖에서 다시 시도하는 동작도 실제로 고려해야 할 경계 조건입니다. Claude Code에는 일반적으로 샌드박스에서 실행할 수 없는 명령을 위한 탈출구가 있습니다. allowUnsandboxedCommandsfalse로 설정해야 실패한 설치가 “이 명령은 어떤 호스트에 접근할 수 있는가?”라는 질문을 “이 명령을 샌드박스 밖에서 실행해도 되는가?”로 조용히 바꾸는 일을 막을 수 있습니다.

이번 주에 바로 점검할 것

Claude Code 자동 모드로 의존성 업데이트, 야간 유지보수 또는 무인 빌드 작업을 실행하면서 현재 패키지 레지스트리를 넓은 샌드박스 허용 목록에 넣어두고 있다면 이번 주에 조치할 가치가 있습니다. 이번 기능을 계기로 그런 상시 항목을 제거할 수 있는지 시험해 볼 수 있습니다.

조직에서 모든 명령에 레지스트리를 의도적으로 사전 승인하는 관리형 네트워크 정책을 쓰거나, 외부 컨테이너 또는 CI 러너가 이미 더 엄격한 프로세스별 외부 통신 규칙을 적용한다면 서두를 필요는 없습니다. 새 필드가 심층 방어를 보탤 수는 있지만, 이미 운영 중인 경계를 대체하지는 않습니다.

샌드박스와 자동 모드를 함께 사용하지 않거나, Bash, PowerShell 또는 Monitor가 네트워크를 사용하는 작업이 아니라면 이번 변경의 영향을 받지 않습니다.

실행 방법은 간단합니다. Claude Code 2.1.271 이상인지 확인하고, 잠금 파일이 있는 의존성 설치 하나를 고릅니다. 실패 시 닫히는 샌드박스의 자동 모드에서 설치를 시작해 예상한 레지스트리 호스트만 지정한 다음, 이어지는 테스트 명령이 그 네트워크 경로를 재사용할 수 없는지 확인합니다. 실제 환경에서 이 검증을 통과한 뒤에만 상시 레지스트리 예외를 제거해야 합니다.

다음 플랫폼 변화가 실제 워크플로를 어떻게 바꾸는지 계속 받아보려면 뉴스레터를 구독하세요.

마지막 업데이트
2026년 9월 15일
카테고리
Explained

Google에서 이 사이트를 우선하기

Google 검색에서 omidsaffari.com을 선호 소스로 추가

omidsaffari.com을 선호 소스로 지정하면 Google이 Top Stories, AI Overviews, AI Mode에서 우선적으로 보여 줍니다.

Claude Code 구독으로 Vercel AI SDK 에이전트 비용 줄이기

Claude Code 구독으로 Vercel AI SDK 에이전트 비용 줄이기

기존 Claude Code 구독을 Vercel AI SDK 에이전트 실행에 연결하면 어떤 계정에 모델 비용이 잡히는지 설명합니다. auto·direct·ai-gateway 인증 우선순위부터 공유 사용량 한도, 별도로 남는 Sandbox 비용, 팀별 운영 선택까지 한 번에 정리했습니다.2026년 9월 15일Explained
Playwright 자동화에 Cloudflare 승인 호스트와 읽기 전용 검토 적용하기

Playwright 자동화에 Cloudflare 승인 호스트와 읽기 전용 검토 적용하기

Cloudflare Browser Run의 세션 가드레일과 읽기 전용 Live View를 고객 프로젝트에 적용하는 법을 설명합니다. Playwright 설정, 승인 호스트 목록, 차단 테스트, 검토 링크 보안과 Browser Sessions 요금까지 실무 기준으로 확인합니다.2026년 9월 14일Explained
음성 AI 통화 비용, GPT-Live-1의 $0.05가 전부는 아닙니다

음성 AI 통화 비용, GPT-Live-1의 $0.05가 전부는 아닙니다

음성 AI 모델 GPT-Live-1의 분당 $0.05 요금만 보면 실제 통화 비용을 놓치기 쉽습니다. 음성 세션, 백엔드 추론과 툴, 통신사 비용을 합쳐 처리가 완료된 통화 한 건의 총비용을 계산하는 법과 90초 예약 전화 사례, 도입 전 점검할 기준을 정리했습니다.2026년 9월 14일Explained
ChatGPT 윈도우 Appshots 활용법: 컨텍스트 복사 시간을 줄이는 방법

ChatGPT 윈도우 Appshots 활용법: 컨텍스트 복사 시간을 줄이는 방법

ChatGPT 윈도우 Appshots로 이메일, 오류 창, 설정 화면을 채팅에 바로 첨부하는 방법을 정리했습니다. 두 Alt 키 단축키와 대상 채팅 설정, 보이지 않는 텍스트의 공유 범위, Google 앱의 한계, 실제 업무 시간이 줄었는지 측정하는 기준까지 확인하세요.2026년 9월 14일Explained
Vercel 요금 절감: FastAPI 정적 파일이 Function을 건너뛴다

Vercel 요금 절감: FastAPI 정적 파일이 Function을 건너뛴다

Vercel이 FastAPI의 app.frontend()와 StaticFiles 요청을 CDN에서 직접 처리하기 시작했습니다. Function 호출·컴퓨팅 사용량은 줄지만 CDN 요청과 전송량은 남습니다. 적용 조건, 보안 예외, 실제 Vercel 요금 절감 범위를 정리합니다.2026년 9월 13일Explained
OpenAI API 키 만료, 서비스 중단 없이 교체하는 법

OpenAI API 키 만료, 서비스 중단 없이 교체하는 법

OpenAI API 키 만료에 대비해 서비스 중단 없이 새 키를 배포하는 방법을 설명합니다. 최대 수명 정책의 범위부터 담당자 지정, 교체 비용 산정, 시크릿 저장소 배포, 실제 작업 검증, 기존 키 폐기까지 안전한 API 키 관리 절차를 한 번에 정리했습니다.2026년 9월 13일Explained
Vercel 권한 관리: 공유 커넥터 담당자를 분리하는 법

Vercel 권한 관리: 공유 커넥터 담당자를 분리하는 법

Vercel Connect의 Connector Permissions로 Pro·Enterprise 팀의 공유 커넥터 관리 권한을 분리하는 방법을 정리했습니다. Connector Manager 지정, Member 역할 점검, 공급자 권한과 런타임 승인 분리까지 인수인계 절차를 확인하세요.2026년 9월 13일Explained
Cloudflare R2 파일, 이름 그대로 AI Search에 인덱싱하는 법

Cloudflare R2 파일, 이름 그대로 AI Search에 인덱싱하는 법

Cloudflare AI Search는 이제 확장자 없는 R2 객체도 HTTP Content-Type으로 인식합니다. 기존 키를 유지한 채 파일을 인덱싱하는 방법, 메타데이터 복구 비용, 동기화 한계, 실제 검색 가능 여부를 확인하는 운영 절차를 한 번에 정리했습니다.2026년 9월 12일Explained
뉴스레터

매주 일요일, 한 통의 편지.뜨거운 의견이 아닌, 돌아가는 시스템.

주간 발행. 스팸 없음. 언제든 해지 가능합니다.