English

우분투에서
AI 에이전트 샌드박싱하기

Docker 샌드박스와 Azure Container Apps 샌드박스로 피해 범위 통제하기

유저스틴 수석 디벨로퍼 아드보캇 Microsoft / GitHub Docker Captain
English
AI 에이전트는 내 권한으로,
나보다 훨씬 빠르게 명령을 실행합니다.

그렇다면 에이전트가 실수하거나 공격받았을 때, 어디까지 영향을 미치게 해야 할까요?

English
위험과 통제 경계
AI 에이전트의 피해 범위를 어디까지 허용할 것인가
English

예상 문제점

rm
파일 손상

소스·설정·홈 디렉터리 삭제 또는 덮어쓰기

key
자격 증명

토큰과 클라우드 키의 노출 또는 오용

net
정보 유출

허용되지 않은 목적지로 코드와 데이터 전송

pkg
공급망

악성 패키지와 설치 스크립트 실행

docker.sock
호스트 장악

Docker 소켓과 로컬 프로세스 접근

English
그래서 필요한 것이 Docker 샌드박스입니다
에이전트의 능력

파일 수정, 셸 실행, 패키지 설치와 네트워크 접근이 필요합니다

격리된 실행 경계

호스트와 분리된 microVM 안에서 필요한 작업을 수행합니다

필요한 권한은 유지하고, 피해 범위는 제한합니다.
English

권한은 내부에 주고, 경계는 외부에서 강제합니다

01
컴퓨트

별도 커널과 프로세스 경계

02
파일

공유 범위와 쓰기 권한

03
네트워크

목적지 기반 송신 정책

04
자격 증명

원문을 숨긴 프록시 주입

05
수명주기

생성·중지·폐기의 자동화

English

보안 구조

AI Agent · sudo · packages · 내부 Docker Engine
microVM · 커널 분리 · 일차적인 신뢰 경계
Host OS · 호스트 파일시스템 · 호스트 Docker 데몬 · 로컬 프로세스
Workspace명시적으로 공유
Host Proxy정책·자격 증명
Allowed Network허용 목적지만
English

Direct 🤜🤛 Clone

Direct 모드

  • 프로젝트를 읽기·쓰기로 마운트
  • 변경 사항이 호스트에 즉시 반영
  • 빠른 반복, 낮은 코드 격리

Clone 모드

  • 원본 저장소는 읽기 전용
  • VM 내부의 비공개 복제본에서 작업
  • 검토 후 선택적으로 반영

Direct 모드에서는 샌드박스라고 하더라도 호스트에 저장되어 있는 프로젝트가 영향을 받습니다.

English
DEMO #1
Docker 샌드박스에서
.NET 앱 현대화하기
English

데모 #1: Docker 샌드박스에서 .NET 앱 현대화하기

  • GitHub Copilot CLI를 Docker 샌드박스에서 실행합니다
  • GitHub Copilot modernization 플러그인을 설치합니다
  • modernize 에이전트가 진단·계획·실행을 오케스트레이션합니다
  • 호스트 Docker 데몬과 공유하지 않은 파일에는 접근하지 못합니다
  • private clone의 변경 사항과 정책 로그를 검토합니다
English

데모 #1: Docker 샌드박스에서 .NET 앱 현대화하기

sbx secret set github --command 'gh auth token'
sbx run --clone --name dotnet-appmod copilot .
sbx exec -it dotnet-appmod bash
Authenticate호스트 프록시로 토큰 주입
Run샌드박스 + Copilot CLI
Shell설치·상태 확인용 접속
English

데모 #1: Docker 샌드박스에서 .NET 앱 현대화하기

/plugin marketplace add microsoft/github-copilot-modernization
/plugin install github-copilot-modernization@github-copilot-modernization
English

데모 #1: Docker 샌드박스에서 .NET 앱 현대화하기

copilot/agentgithub-copilot-modernization:modernize
Assessment의존성·.NET·위험 분석
Planning실행 가능한 작업 계획
Execution변경·빌드·검증
assessment/

현대화 평가 결과

plan.md · tasks.json

검토 가능한 실행 계획

task commits

작업별 변경 이력

English

데모 #1: Docker 샌드박스에서 .NET 앱 현대화하기

이 앱을 .NET 10으로 현대화 해줘
English
로컬에서 안전하게 실행했습니다.
이제 팀과 서비스 규모로 운영하려면 어떻게 해야 할까요?
개별 PC 종속

개발자 장비의 상태와 가용성에 의존

수명주기 자동화

요청마다 생성·중지·폐기하는 자동화 인터페이스 필요

동시 실행

다수 사용자와 에이전트의 격리 운영

English
로컬에서 클라우드로
ACA 샌드박스로 수명주기와 규모 확장
English

샌드박스를 클라우드에 올린다면?

ACA CLIPortal · SDK · Bicep · Skills
샌드박스 그룹정책·이미지·네트워크
샌드박스격리된 상태 저장 실행
Snapshot메모리·디스크

Microsoft.App/SandboxGroups · Azure Container Apps Sandboxes

English
< 1s
빠른 시작

사전 준비 풀을 활용한 sub-second 프로비저닝

대규모 확장

Zero-to-Scale · 0에서 수천 개의 동시 샌드박스로 확장

⏸︎ ▶︎
Suspend / Resume

유휴 시 상태를 보존하고 빠르게 재개

ID
Azure 거버넌스

Entra ID, RBAC, Azure 리소스 경계

VNet
네트워크

수신·송신 정책과 가상 네트워크 통합

OCI
사용자 이미지

준비된 도구 체인을 루트 파일시스템으로 사용

English
DEMO #2
ACA 샌드박스에서
Copilot CLI 활용하기
English

데모 #2: ACA 샌드박스에서 Copilot CLI 활용하기

1 · 샌드박스 그룹 준비

aca sandboxgroup create \
  --name ghcp-sandbox-demo \
  --location koreacentral \
  --set-config

2 · 샌드박스 생성

aca sandbox create \
  --disk copilot \
  --credential <copilot-credential-id> \
  --label name=ghcp-demo
샌드박스 그룹 구성 저장 샌드박스 ID · Running
English

데모 #2: ACA 샌드박스에서 Copilot CLI 활용하기

$ aca sandbox shell -l name=ghcp-demo

workspaces$ git clone https://github.com/devkimchi/battle-school-lunch.git
workspaces$ cd battle-school-lunch
workspaces$ copilot
Clone 작업 디렉터리 이동 Copilot CLI 실행
English

데모 #2: ACA 샌드박스에서 Copilot CLI 활용하기

이 프로젝트의 Web UI를 Brutal Design 스타일로 변경하려고 해. 코드는 수정하지 말고, 변경 계획을 design-update.md 파일로 작성해 줘
English

데모 #2: ACA 샌드박스에서 Copilot CLI 활용하기

1 · Suspend

aca sandbox stop \
  -l name=ghcp-demo

2 · Resume

aca sandbox resume \
  -l name=ghcp-demo
  • 동일한 샌드박스 ID와 실행 컨텍스트로 재개합니다
  • design-update.md 파일이 유지되는지 확인합니다
  • 중지한 동안 CPU·메모리 컴퓨팅 비용이 발생하지 않습니다
English
선택과 방어 계층
제품 선택 기준과 여전히 남는 위험
English

Docker 샌드박스 🤜🤛 ACA 샌드박스

기준Docker 샌드박스ACA 샌드박스
주요 사용자개별 개발자팀·서비스·멀티테넌트
실행 위치로컬 PCAzure 관리형 인프라
생성 방식대화형 CLIPortal · CLI · SDK · Bicep · Skills
상태 수명주기로컬 지속snapshot · suspend · resume
대규모 동시성장비 용량 한도수천 개로 확장
English

샌드박스를 써도 여전히 위험 요소는 남아 있습니다

네트워크·자격 증명

허용 목적지로 정보가 유출되거나 부여된 권한이 오용될 수 있습니다

공급망 공격

악성 패키지, 플러그인, 이미지와 설치 스크립트가 실행될 수 있습니다

생성 결과물 오염

코드, 빌드 스크립트와 CI 설정은 외부 실행 전에 검토해야 합니다

외부 도구 신뢰

MCP 서버, Skills와 외부 API는 별도의 신뢰 경계입니다

English

샌드박스를 써도 여전히 위험 요소는 남아 있습니다

Docker 샌드박스

Direct 모드

공유 워크스페이스 변경이 호스트에 즉시 반영됩니다

호스트 통합

로컬 stdio MCP와 공유 Skills는 microVM 밖의 호스트 자원에 연결됩니다

ACA 샌드박스

RBAC·테넌트 격리

역할 범위나 사용자별 샌드박스 매핑 오류로 권한이 노출될 수 있습니다

상태 데이터 잔존

Snapshot과 Volume에 코드, 로그와 민감한 데이터가 남을 수 있습니다

English
샌드박스는
GitHub Copilot과 같은 AI 코딩 에이전트
안전을 보장하는 장치라기보다
피해 범위를 최소화하는 방어 계층에 가깝습니다
English

오늘의 결론

1

에이전트에게 필요한 권한은 주되, 경계는 외부에서 강제합니다.

2

개발자 PC의 대화형 실행에는 Docker 샌드박스, 원격 자동화·다중 실행에는 ACA 샌드박스를 선택합니다.

3

샌드박스는 피해 범위를 작고, 관찰 가능하며, 폐기 가능하게 만듭니다.

English

샌드박스에 대해 더 궁금하다면?

Docker 샌드박스docs.docker.com/ai/sandboxes
Docker 샌드박스 보안 모델docs.docker.com/ai/sandboxes/security
Docker 샌드박스에서 GitHub Copilot CLI 실행하기docs.docker.com/ai/sandboxes/agents/copilot
Copilot CLI로 Java 앱 현대화하기aka.ms/ghcp/appmod/java
Copilot CLI로 .NET 앱 현대화하기aka.ms/ghcp/appmod/dotnet
Azure Container Apps 샌드박스 소개aka.ms/aca/sandboxes
Azure Container Apps 샌드박스 문서sandboxes.azure.com/docs
English
감사합니다
우분투에서 AI 에이전트 샌드박싱하기
유저스틴| 수석 디벨로퍼 아드보캇| Microsoft/GitHub| Docker Captain| GitHub @justinyoo| LinkedIn @justinyoo

발표자 노트 · 00:00–01:00 · 1분 - 자기 소개 - GHCP와 같은 AI 코딩 에이전트가 갑자기 디렉토리를 삭제했다거나 하는 경험이 있나? - AI 에이전트는 종종 예상하지 않은 방향으로 튈 때가 있음. 이런 경우에도 안전하게 사용할 수 있어야 함 - 오늘은 샌드박스 기능에 대해 얘기해 보려고 함

발표자 노트 · 01:00–02:00 · 1분 - GHCP가 처음 나왔을 때는 코드를 제안하는 수준이었음 - 이제는 직접 파일을 수정하고, 패키지 설치하고, 셸 명령 실행하고, 네트워크에 접속함 - 점점 코딩 에이전트의 성능이 올라가면서 내 PC의 권한을 마음대로 부릴 수 있게 됨 - 문제가 생길 수 있는 여지가 충분히 있지만, 그렇다고 권한을 허용하지 않자니 제약이 너무 많음 - 권한을 허용할 경우 문제가 생긴다면, 문제가 생길 수 있는 범위를 어디까지 허용해야 할까?

발표자 노트 · 02:00–02:10 · 10초 - 로컬 개발 환경에서 코딩 에이전트가 만들어 낼 수 있는 위험 요소와 이를 통제하기 위한 경계는 어떤 것들이 있을까?

발표자 노트 · 02:10–04:10 · 2분 - 다섯 가지 정도로 봄 - 원하지 않는 파일을 건드릴 수 있음 - 환경 변수라든가 설정 파일에 있는 토큰을 읽을 수 있음 - 연결된 네트워크를 통해 정보가 유출될 수 있음 - 공급망 공격을 통한 악성 패키지 설치 - 도커 소켓을 통해 호스트를 장악할 수 있는 가능성 - 그렇다면 이 위험 요소를 통제하면 되지 않을까?

발표자 노트 · 04:10–04:40 · 30초 - 이 위험 요소를 통제하기 위해 에이전트의 권한을 제거하면 작업을 할 수가 없음 - 그래서 나온 것이 바로 도커 샌드박스임 - 에이전트는 microVM 안에서 필요한 모든 권한을 유지함 - 동시에 호스트에서 공유하지 않은 파일과 자원에는 접근할 수 없음

발표자 노트 · 04:40–06:00 · 1분 20초 - 샌드박스는 단순한 컨테이너라기 보다는 하나의 VM임 - 그 안에서 에이전트는 sudo 권한을 포함해서 충분한 권한을 가질 수 있음 - 대신 호스트 파일에 접근하지 못하고, 네트워크 접근 권한이 제한적이고, 시크릿 값은 호스트에서 프록시로 제공하고, 샌드박스의 라이프사이클은 호스트에서 관리함 - 이런 식으로 자율성과 통제를 동시에 구현할 수 있음

발표자 노트 · 06:00–07:30 · 1분 30초 - 샌드박스의 기본 경계는 microVM임 - 이 안에서 높은 권한을 가지지만 호스트가 공유하기 전에는 호스트에 접근할 수 없음 - 호스트의 도커 엔진에 접근 못함. 샌드박스 내부의 도커 엔진을 쓸 수 있음 - 즉, 샌드박스 안에서는 정해진 경로로만 외부와 소통한다는 것

발표자 노트 · 07:30–09:00 · 1분 30초 - 도커 샌드박스에서 제공하는 코드 접근 원칙이 두 가지가 있음 - 다이렉트 모드와 클론 모드가 둘 다 장단점이 있음 - 다이렉트 모드의 경우 호스트와 프로젝트를 공유함. 빠른 반영이 가능함. 대신 격리 수준이 낮음 - 클론 모드의 경우 호스트와 프로젝트를 공유하지 않음. 코드 변경 사항은 PR로 처리해야 함. 높은 수준으로 격리가 가능함

발표자 노트 · 09:00–09:10 · 10초 - 그럼 첫번째 데모를 보쟈 - 도커 샌드박스 안에서 GHCP CLI와 앱 현대화 플러그인을 통해 앱을 현대화 해 보쟈

## 데모 #1: Docker 샌드박스에서 Java 앱 현대화하기

발표자 노트 · 09:10–09:50 · 40초 - 이번 데모에서는 이런 것들을 보여줄 거임 - 앱 현대화 자체를 하는 것도 중요하지만, 이게 샌드박스 안에서만 동작하는 것을 보는게 중요함

## 데모 #1: Docker 샌드박스에서 Java 앱 현대화하기

```bash sbx secret set github --command 'gh auth token' sbx run --clone --name java-appmod copilot . sbx exec -it java-appmod bash ```

발표자 노트 · 09:50–11:10 · 1분 20초 - 깃헙 토큰을 호스트의 시크릿으로 저장함 - 그 다음에 샌드박스를 하나 클론 모드로 열면서 곧바로 GHCP CLI를 실행함 - 또는 sbx exec 명령어를 통해 샌드박스의 bash 셸로 들어감

## 데모 #1: Docker 샌드박스에서 Java 앱 현대화하기

발표자 노트 · 11:10–12:10 · 1분 - 플러그인 설치 - 플러그인 설치 중 관련 MCP 서버도 함께 설치 - MCP 실행 실패는 샌드박스의 환경 설정 때문인 것 보여줌

## 데모 #1: Docker 샌드박스에서 Java 앱 현대화하기

발표자 노트 · 12:10–13:40 · 1분 30초 - /agent 실행 후 github-copilot-modernization:modernize 선택 - 현대화 에이전트는 알아서 Assessment, Planning, Execution 단계를 진행함 - 이미 GHCP는 --allow-all 옵션을 자동으로 적용시켜 놨기 때문에 맨 마지막에 진행할까요? 정도만 남겨두고 알아서 진행함

## 데모 #1: Docker 샌드박스에서 Java 앱 현대화하기

<div class="prompt-box">이 앱을 Java 21과 Spring Boot 4.1로 업그레이드 해줘</div>

발표자 노트 · 13:40–17:00 · 3분 20초 - 프롬프트 실행 - 화면처럼 얘기할 수도 있고, 아예 "해줘!" 라고 해도 됨 - 여기서는 .NET 10으로 현대화 해달라고 했음 - 여기서는 Java 21과 Spring Boot 4.1로 현대화 해달라고 했음 - 시간이 오래 걸리므로 우선 여기까지 진행하는 것 보여주고 다음으로 넘어감

발표자 노트 · 17:00–17:30 · 30초 - 지금까지 도커 샌드박스 안에서 GHCP CLI로 앱 현대화 하는 과정을 보여줬음 - 이번에는 팀 단위로 많은 작업을 동시에 실행시켜야 한다면? 그땐 개발자 개인 PC에 의존할 수 없음 - 이때부터는 클라우드에 올라간 샌드박스를 고려해야 함 - ACA 샌드박스가 이 문제를 해결할 수 있음

발표자 노트 · 17:30–17:40 · 10초 - 로컬 개발환경 격리를 넘어, 클라우드 규모에서 샌드박스를 운영해 보쟈

발표자 노트 · 17:40–19:00 · 1분 20초 - ACA 샌드박스는 컨테이너 앱 기반의 리소스임. 현재 프리뷰 상태 - 포탈, CLI, 파이썬 SDK, Skills 등으로 샌드박스를 생성하고 관리할 수 있음 - 오늘은 ACA CLI를 사용할 거임 - 각각의 샌드박스는 격리된 실행환경이고 도커에서 제공하는 컨테이너 이미지를 루트 파일 시스템으로 사용함 - 샌드박스마다 스냅샷을 제공해서 사용하지 않을 경우에는 컨테이너를 멈추고 필요한 경우 다시 실행시킬 수 있음

발표자 노트 · 19:00–20:20 · 1분 20초 - 로컬에서 돌아가는 도커 샌드박스에 더해 이런 장점이 있음 - 빠른 시작, 스케일링, 스냅샷, 클라우드 거버넌스, 네트워크 통제, 커스텀 OCI 이미지 - 중지상태에서는 스냅샷 저장 공간을 제외한 나머지 비용이 발생하지 않음 - 샌드박스 사용자는 별도의 RBAC 권한이 필요함

발표자 노트 · 20:20–20:30 · 10초 - 쟈 그러면 두번째 데모를 한 번 볼까?

발표자 노트 · 20:30–21:30 · 1분 - aca sandboxgroup create 명령으로 샌드박스 그룹 생성 - 모든 샌드박스가 여기서 돌아감 - aca sandbox create 명령으로 샌드박스 생성 - 샌드박스 안으로 들어가서 로그인해도 되지만, 그 전에 GitHub PAT 활용해서 사전에 로그인할 수 있음 - 이후 샌드박스 안으로 들어가면 됨

발표자 노트 · 21:30–22:30 · 1분 - aca sandbox shell 명령어로 샌드박스에 접속 - 깃헙 리포 클론, GHCP CLI 실행

발표자 노트 · 22:30–23:30 · 1분 - 프롬프트 실행

발표자 노트 · 23:30–24:30 · 1분 - aca sandbox stop 명령어로 샌드박스 중단 - aca sandbox resume 명령어로 다시 샌드박스 실행 - design-update.md 파일 보이는지 확인

발표자 노트 · 24:30–24:40 · 10초 - 하지만 과연 샌드박스가 보안 관점에서 만능칼일까? 여전히 조심해야 할 부분이 있음

발표자 노트 · 24:40–25:40 · 1분 - 로컬에서 개발자가 에이전트를 안전하게 사용하려면 Docker 샌드박스가 자연스러움 - 원격에서 동적으로 샌드박스 기능을 여러개 동시다발적으로 돌리려면 ACA 샌드박스가 자연스러움

발표자 노트 · 25:40–26:40 · 1분 - 여전히 위험요소는 남아있음 - 네트워크, 토큰 등은 정보 유출 및 권한 오남용의 경로가 될 수 있음 - 서플라이 체인 어택, 플러그인, 설치 스크립트 등 별도로 검토해야 함 - 샌드박스는 이런 영향을 받을 수 있는 범위를 제한함

발표자 노트 · 26:40–27:40 · 1분 - 도커 샌드박스에서는 Direct 모드 사용시 조심할 것, 샌드 박스 밖에서 실행되는 로컬 MCP, 공유 스킬 등을 조심해야 함 - ACA 샌드박스에서는 RBAC 권한 등을 정확하게 통제해야 함 - 스냅샷은 작업 상태를 보존해 준다는 장점도 있지만, 결국 데이터가 남아있으니 라이프사이클 관리에 조심해야 함

발표자 노트 · 27:40–28:00 · 20초 - 따라서, 샌드박스는 GHCP 같은 AI 코딩 에이전트를 무조건 안전하게 만들어주거나 하는 장치가 아님 - 오히려 무슨 문제가 생겼을 경우 피해를 최소하 시켜주는 방어 계층임

발표자 노트 · 28:00–29:00 · 1분 - 오늘 세션 내용은 요렇게 세가지로 정리 가능함 - 1. 에이전트에게 일할 권한은 주되 실행 경계는 외부 정책으로 강제 - 2. GHCP CLI를 개발자 PC에서 대화형으로 실행할 때는 Docker 샌드박스, 원격에서 자동화하거나 여러 작업을 동시에 실행할 때는 ACA 샌드박스 - 3. 샌드박스는 에이전트를 완전히 믿고 실행하는 대신 문제 발생시 피해 범위를 작고 관찰 가능하고 폐기 가능하게 만들어줌

발표자 노트 · 29:00–29:20 · 20초 - 샌드박스와 관련해서 더욱 궁금하다면? 링크 찾아봐라

발표자 노트 · 29:20–30:00 · 40초 - 땡큐베리감사!