GitHub Copilot 로컬 샌드박싱 GA: 코딩 에이전트에 허용할 파일·네트워크 범위 정하는 법
GitHub가 2026년 10월 7일 Copilot 로컬 샌드박싱을 일반 제공(GA)으로 전환했다. 적용 대상은 GitHub Copilot CLI, GitHub Copilot 앱, 그리고 Agent Host를 사용하는 VS Code 세션이다. 핵심은 단순하다. 에이전트가 로컬 명령을 실행할 때 파일 시스템, 네트워크, 자격 증명, 로컬 도구 접근을 정책으로 제한한다.
실무 개발자에게 이 소식이 중요한 이유는 “모델이 똑똑해졌다”가 아니라 “에이전트가 실제 셸과 로컬 서비스를 만지는 범위가 넓어졌다”는 데 있다. 코드 생성까지만 하던 단계에서는 리뷰로 대부분의 위험을 걸러낼 수 있었다. 하지만 Copilot이 테스트를 돌리고, 패키지를 설치하고, 로컬 MCP 서버나 언어 서버를 호출하고, git 자격 증명 근처까지 접근하면 운영 기준이 달라진다. 이제는 프롬프트 품질만이 아니라 실행 경계가 제품 품질의 일부가 된다.
무엇이 바뀌었나
GitHub 발표에 따르면 로컬 샌드박싱은 Microsoft eXecution Container(MXC)를 기반으로 한다. MXC는 공통 샌드박스 정책을 Windows, macOS, Linux의 네이티브 운영체제 제어로 변환한다. 개발자나 조직이 정책을 정하면 Copilot이 실행하는 도구와 명령은 그 정책 안에서 동작한다.
제한할 수 있는 항목은 크게 네 가지다. 첫째, 에이전트가 읽거나 수정할 수 있는 파일과 디렉터리다. 둘째, 인터넷과 로컬 네트워크 접근이다. 셋째, Git 자격 증명과 GitHub CLI 자격 증명이다. 넷째, 로컬 MCP 서버와 언어 서버 같은 개발 보조 서비스다. 기업 환경에서는 관리형 설정으로 샌드박싱을 필수화하고, 개발자가 정책을 약화하지 못하게 만들 수 있다.
여기서 중요한 문장은 “모델 실행과 도구 격리는 별개의 문제”라는 점이다. 어떤 모델을 쓰든 도구 실행 정책은 그대로 적용된다. Claude Haiku를 쓰든, Gemini 계열을 쓰든, 다른 Copilot 모델을 쓰든 셸 명령이 로컬 리소스를 건드리는 순간에는 같은 경계가 필요하다.
왜 기존 권한 모델로는 부족한가
대부분의 개발팀은 이미 권한을 관리한다. 레포 권한, 브랜치 보호, CI 시크릿, 패키지 레지스트리 토큰, 배포 키가 있다. 그런데 코딩 에이전트는 이 권한 모델의 빈틈을 찌른다. 사람 개발자가 IDE에서 이미 로그인해 둔 GitHub CLI, npm 토큰, cloud CLI, 사내 VPN, 로컬 데이터베이스에 접근할 수 있기 때문이다.
예를 들어 에이전트가 “테스트를 통과시키기 위해 필요한 명령을 실행하겠다”고 판단했다고 하자. package script 안에 외부 다운로드가 숨어 있거나, postinstall 훅이 로컬 파일을 읽거나, MCP 도구가 내부 API를 호출할 수 있다. 사람은 명령을 보기 전에 위험을 감지할 수 있지만, 에이전트 워크플로우에서는 명령 생성과 실행이 짧은 루프로 연결된다. 이때 샌드박스가 없으면 프롬프트 인젝션, 악성 의존성, 과도한 자동 수정이 모두 같은 통로를 탄다.
로컬 샌드박싱은 이런 위험을 “사용자에게 조심하라고 말하는 문제”에서 “기본 실행 환경을 제한하는 문제”로 바꾼다. 특히 팀 단위에서는 이 차이가 크다. 개인 개발자의 습관에 기대지 않고, 조직 정책으로 금지 경계를 만들 수 있기 때문이다.
팀에서 먼저 정해야 할 정책 기준
첫 번째 기준은 쓰기 가능한 경로다. 에이전트가 전체 홈 디렉터리를 수정할 필요는 거의 없다. 일반적인 코드 작업이면 현재 워크스페이스, 임시 빌드 디렉터리, 패키지 캐시 일부면 충분하다. SSH 키, 클라우드 설정, 브라우저 프로필, 다운로드 폴더, 개인 문서 폴더는 기본 차단 대상이다.
두 번째 기준은 네트워크다. 단위 테스트와 정적 분석은 네트워크 없이도 돌아가야 한다. 의존성 설치가 필요한 작업만 허용 목록을 둔다. 예를 들어 npm registry, PyPI, Maven Central, 사내 패키지 레지스트리는 허용할 수 있지만 임의 도메인으로 POST 요청을 보내는 것은 막아야 한다. 내부망 접근도 더 조심해야 한다. 에이전트가 로컬에서 돌아간다는 이유로 사내 admin API까지 열어두면 위험 범위가 커진다.
세 번째 기준은 자격 증명이다. GitHub CLI와 git credential helper 접근은 편리하지만 위험하다. 에이전트가 직접 push, release, secret read에 가까운 행동을 할 수 있기 때문이다. 최소한 기본 정책에서는 읽기 전용 diff 생성과 테스트 실행까지만 허용하고, push나 PR 생성은 사람 승인 또는 별도 CI 봇 권한으로 분리하는 편이 낫다.
도입 순서: 한 번에 전면 적용하지 말 것
가장 안전한 방식은 “관찰 모드에 가까운 제한적 파일럿”이다. 먼저 1~2개 레포를 고른다. 프론트엔드 앱처럼 빌드와 테스트 경로가 비교적 명확한 레포가 좋다. 에이전트가 실제로 실행하는 명령 목록을 모은 뒤, 필요한 파일 접근과 네트워크 접근을 정책으로 좁힌다. 그다음 실패 케이스를 기록한다. 차단 때문에 실패한 것인지, 원래 불필요한 접근을 하려던 것인지 구분해야 한다.
두 번째 단계에서는 작업 유형별 프로필을 만든다. 문서 수정 프로필은 파일 쓰기 범위를 docs와 markdown으로 제한한다. 테스트 수정 프로필은 src, test, package 파일만 허용한다. 의존성 업데이트 프로필은 lockfile, package manifest, registry 접근을 허용하지만 다른 네트워크는 막는다. 보안 수정 프로필은 더 좁은 네트워크와 더 엄격한 자격 증명 차단을 적용한다.
세 번째 단계에서는 CI와 연결한다. 로컬 샌드박스 안에서 생성된 변경 사항이 PR로 올라오면, CI에서도 같은 전제의 테스트를 돌려야 한다. 로컬에서는 네트워크를 막았는데 CI에서는 모든 네트워크가 열려 있으면 검증 기준이 흔들린다.
흔한 오해와 실제 운영 포인트
샌드박싱은 에이전트를 느리게 만들기 위한 장치가 아니다. 오히려 에이전트에게 더 많은 일을 맡기기 위한 전제 조건이다. 경계가 없으면 사람은 계속 “이 명령을 실행해도 되나”를 확인해야 한다. 경계가 있으면 반복 테스트, 코드맵 생성, 로컬 정리 같은 작업을 더 과감하게 맡길 수 있다.
또 하나의 오해는 모델을 바꾸면 안전성이 해결된다는 생각이다. GitHub도 명시했듯 도구 격리는 모델과 별개의 문제다. 더 좋은 모델은 위험한 명령을 덜 만들 수 있지만, 한번 잘못 만든 명령이 실행되는 범위는 실행 환경이 결정한다. 그래서 정책은 모델별이 아니라 작업별로 설계해야 한다.
마지막으로 로컬 MCP 서버를 빼놓으면 안 된다. 요즘 개발 환경에서 MCP는 문서 검색, 이슈 조회, 데이터베이스 조회, 브라우저 조작까지 연결한다. 샌드박스 정책이 셸만 막고 MCP 도구를 무제한 허용하면 우회로가 생긴다. MCP 서버별로 읽기·쓰기 기능을 분리하고, 쓰기 도구는 별도 승인 흐름을 붙여야 한다.
실행 체크리스트
- Copilot을 쓰는 레포 중 에이전트 명령 실행이 잦은 레포 1개를 파일럿으로 고른다.
- 에이전트가 읽고 쓸 수 있는 디렉터리를 워크스페이스 중심으로 제한한다.
- 홈 디렉터리, SSH 키, 클라우드 설정, 브라우저 프로필, 개인 문서 폴더 접근을 차단한다.
- 네트워크는 기본 차단 후 패키지 레지스트리와 사내 필수 엔드포인트만 허용한다.
- GitHub CLI, git credential, 배포 토큰 접근은 기본 차단하고 PR 생성은 별도 승인으로 분리한다.
- 작업 유형별 샌드박스 프로필을 만든다. 문서, 테스트, 의존성 업데이트, 보안 수정은 권한이 달라야 한다.
- 로컬 MCP 서버와 언어 서버 접근도 정책에 포함한다.
- 차단 로그를 모아 필요한 허용과 불필요한 접근을 구분한다.
- CI에서도 로컬 샌드박스와 비슷한 네트워크·파일 접근 전제를 맞춘다.
- 개발자에게 “샌드박스가 막은 것”을 우회하지 말고 정책 개선 요청으로 남기게 한다.
Copilot 로컬 샌드박싱의 의미는 에이전트가 완벽해졌다는 뜻이 아니다. 반대로 에이전트를 믿지 않는 운영 방식이 제품에 들어왔다는 뜻에 가깝다. 실무팀이라면 이 기능을 새 장난감으로 볼 게 아니라, 코딩 에이전트를 기본 개발 흐름에 넣기 위한 최소 보안 레이어로 봐야 한다.