diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a88fb97..edd7c48 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -30,7 +30,7 @@ jobs: - name: Validate Marp presentation run: | - mkdir -p site/ko site/en + mkdir -p site/ko site/en site/ubucon npx --yes @marp-team/marp-cli@4 \ ai-agent-sandboxing-ko.md \ --html \ @@ -41,6 +41,11 @@ jobs: --html \ --allow-local-files \ -o site/en/index.html + npx --yes @marp-team/marp-cli@4 \ + ai-agent-sandboxing-ubucon.md \ + --html \ + --allow-local-files \ + -o site/ubucon/index.html cp index.html site/index.html cp -R assets site/assets diff --git a/ai-agent-sandboxing-ubucon.md b/ai-agent-sandboxing-ubucon.md new file mode 100644 index 0000000..7114f3b --- /dev/null +++ b/ai-agent-sandboxing-ubucon.md @@ -0,0 +1,1617 @@ +--- +marp: true +theme: default +size: 16:9 +# paginate: true +# footer: AI 에이전트 샌드박싱 +--- + + + + + + +# 우분투에서
AI 에이전트 샌드박싱하기 + +Docker 샌드박스와 Azure Container Apps 샌드박스로 피해 범위 통제하기 + +
+ 유저스틴 + 수석 디벨로퍼 아드보캇 + Microsoft / GitHub + Docker Captain + + + + +
+ + + +--- + +
+AI 에이전트는 내 권한으로,
+나보다 훨씬 빠르게 명령을 실행합니다. +
+ +

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

+ + + +--- + + + + +
위험과 통제 경계
+
AI 에이전트의 피해 범위를 어디까지 허용할 것인가
+ + + +--- + +## 예상 문제점 +
+
rm
파일 손상

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

+
key
자격 증명

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

+
net
정보 유출

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

+
pkg
공급망

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

+
docker.sock
호스트 장악

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

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

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

+
+
격리된 실행 경계

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

+
+ +
필요한 권한은 유지하고, 피해 범위는 제한합니다.
+ + + +--- + +## 권한은 내부에 주고, 경계는 외부에서 강제합니다 +
+
01
컴퓨트

별도 커널과 프로세스 경계

+
02
파일

공유 범위와 쓰기 권한

+
03
네트워크

목적지 기반 송신 정책

+
04
자격 증명

원문을 숨긴 프록시 주입

+
05
수명주기

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

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

Direct 모드

+ +
+
+

Clone 모드

+ +
+
+ +

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

+ + + +--- + + + + +
DEMO #1
+ +
Docker 샌드박스에서
.NET 앱 현대화하기
+ + + +--- + + +## 데모 #1: Docker 샌드박스에서 .NET 앱 현대화하기 + + + + +--- + + + + +## 데모 #1: Docker 샌드박스에서 .NET 앱 현대화하기 + +```bash +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설치·상태 확인용 접속
+
+ + + +--- + + + + +## 데모 #1: Docker 샌드박스에서 .NET 앱 현대화하기 +
/plugin marketplace add microsoft/github-copilot-modernization
+/plugin install github-copilot-modernization@github-copilot-modernization
+ + + +--- + + +## 데모 #1: Docker 샌드박스에서 .NET 앱 현대화하기 +
copilot/agentgithub-copilot-modernization:modernize
+ +
+ +
Assessment의존성·.NET·위험 분석
+
+
Planning실행 가능한 작업 계획
+
+
Execution변경·빌드·검증
+
+ +
+
assessment/

현대화 평가 결과

+
plan.md · tasks.json

검토 가능한 실행 계획

+
task commits

작업별 변경 이력

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

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

+
수명주기 자동화

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

+
동시 실행

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

+
+ + + +--- + + + + +
로컬에서 클라우드로
+
ACA 샌드박스로 수명주기와 규모 확장
+ + + +--- + +## 샌드박스를 클라우드에 올린다면? +
+
ACA CLIPortal · SDK · Bicep · Skills
+
+
샌드박스 그룹정책·이미지·네트워크
+
+
샌드박스격리된 상태 저장 실행
+
+
Snapshot메모리·디스크
+
+ +

Microsoft.App/SandboxGroups · Azure Container Apps Sandboxes

+ + + +--- + +
+
< 1s
빠른 시작

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

+
대규모 확장

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

+
⏸︎ ▶︎
Suspend / Resume

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

+
ID
Azure 거버넌스

Entra ID, RBAC, Azure 리소스 경계

+
VNet
네트워크

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

+
OCI
사용자 이미지

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

+
+ + + +--- + + + + +
DEMO #2
+
ACA 샌드박스에서
Copilot CLI 활용하기
+ + + +--- + +## 데모 #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 +
+ + + +--- + + + +## 데모 #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 실행 +
+ + + +--- + +## 데모 #2: ACA 샌드박스에서 Copilot CLI 활용하기 + +
이 프로젝트의 Web UI를 Brutal Design 스타일로 변경하려고 해. 코드는 수정하지 말고, 변경 계획을 design-update.md 파일로 작성해 줘
+ + + +--- + +## 데모 #2: ACA 샌드박스에서 Copilot CLI 활용하기 + +
+
+

1 · Suspend

+
aca sandbox stop \
+  -l name=ghcp-demo
+
+
+

2 · Resume

+
aca sandbox resume \
+  -l name=ghcp-demo
+
+
+ + + + + +--- + + + + +
선택과 방어 계층
+
제품 선택 기준과 여전히 남는 위험
+ + + +--- + +## Docker 샌드박스 🤜🤛 ACA 샌드박스 + + + + + + + +
기준Docker 샌드박스ACA 샌드박스
주요 사용자개별 개발자팀·서비스·멀티테넌트
실행 위치로컬 PCAzure 관리형 인프라
생성 방식대화형 CLIPortal · CLI · SDK · Bicep · Skills
상태 수명주기로컬 지속snapshot · suspend · resume
대규모 동시성장비 용량 한도수천 개로 확장
+ + + +--- + +## 샌드박스를 써도 여전히 위험 요소는 남아 있습니다 +
+
네트워크·자격 증명

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

+
공급망 공격

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

+
생성 결과물 오염

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

+
외부 도구 신뢰

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

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

Docker 샌드박스

+
Direct 모드

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

+
호스트 통합

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

+
+
+

ACA 샌드박스

+
RBAC·테넌트 격리

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

+
상태 데이터 잔존

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

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

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

+
2

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

+
3

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

+ + + +--- + +## 샌드박스에 대해 더 궁금하다면? + +
+
+
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
+
+
+ + + +--- + + + + +
+우분투에서 AI 에이전트 샌드박싱하기 +
+ + + +
+ 유저스틴| + 수석 디벨로퍼 아드보캇| + Microsoft/GitHub| + Docker Captain| + GitHub @justinyoo| + LinkedIn @justinyoo +
+ +