본문 바로가기
C.W.K.
Stream
Lesson 02 of 05 · published

샌드박스는 cwd·환경변수·네트워크에서 시작해

~14 min · sandbox, cwd, environment, network

Level 0Observer
0 XP0/64 lessons0/13 achievements
0/150 XP to next level150 XP to go0% complete

보여 준 범위가 에이전트의 세계가 돼

cwd는 Read·Write·Edit·Bash가 시작할 작업 범위를 정하고, env는 서브프로세스가 볼 환경변수를 정해. 네트워크는 운영체제 방화벽이나 VPN, MCP 서버 정책으로 제한할 수 있어. 세 손잡이가 함께 피해 반경을 만든다.

작업 디렉터리를 가능한 한 좁혀

/srv/myapp 아래만 고칠 에이전트의 cwd/로 둘 이유는 없어. 모델은 상대 경로로 작업하고 SDK 기본 설정은 바깥으로 벗어나는 경로를 거부해. 필요한 가장 작은 디렉터리를 고르는 것만으로 파일 접근 위험의 절반을 줄여.

환경변수도 허용 목록으로 전달해

Bash는 넘겨받은 환경을 읽을 수 있어. 로그인 셸의 전체 변수를 그대로 물려주면 모든 자격 증명도 함께 보이게 돼. PATH와 HOME, 해당 작업에 필요한 전용 키만 골라 보내고 나머지는 지워. 많은 비밀 유출은 프롬프트보다 환경 상속에서 시작돼.

원칙: 샌드박스는 Docker 하나가 아니야. cwd·env·도구·네트워크마다 최소 범위를 정하는 일이야.

Code

Tight sandbox options·python
import os

options = ClaudeAgentOptions(
    cwd="/srv/agent-workspace",  # / 아니라
    env={
        "PATH": "/usr/local/bin:/usr/bin:/bin",
        "HOME": "/srv/agent-workspace",
        "LANG": "en_US.UTF-8",
        # 이 task 필요한 키만:
        "WEATHER_API_KEY": os.environ["WEATHER_API_KEY"],
    },
    allowed_tools=["Read", "Bash"],
    permission_mode="default",
)
Untrusted run 위한 컨테이너 sandbox·yaml
# docker-compose.yml — read-only mount 가진 컨테이너 안 에이전트 run
services:
  agent:
    image: claude-agent:latest
    read_only: true
    tmpfs:
      - /tmp
      - /var/run
    volumes:
      - ./workspace:/workspace
      - ./input:/input:ro
    networks:
      - egress-allowlisted
    environment:
      - PATH=/usr/local/bin:/usr/bin:/bin
      # Task-specific 시크릿만 inject
networks:
  egress-allowlisted:
    driver: bridge
    internal: false
    # 외부 방화벽 / Calico / 비슷한 거가 outbound 룰 강제

External links

Exercise

Agent SDK 프로세스 하나의 cwd와 env 키, 도구 목록을 적고 각각을 한 구절로 정당화해. 근거 없는 항목은 제거해.
Hint
os.environ 전체를 넘기지 말고 허용 목록으로 필요한 환경변수만 골라.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.