본문 바로가기
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는 CLI가 네 프로세스에서 물려받은 환경변수 위에 변수를 더해. 네트워크는 운영체제 방화벽이나 VPN, MCP 서버 정책으로 제한할 수 있어. 세 손잡이가 함께 피해 반경을 만든다.

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

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

환경변수는 출발점에서 줄여

Bash는 CLI가 받은 환경을 물려받고, CLI는 네 작업자 프로세스의 환경에 options.env를 덮어쓴 걸 받아. options.env는 더하거나 덮어쓸 수는 있어도 지우지는 못해. 작업자가 로그인 셸의 전체 변수를 들고 돌면, env에 뭘 넘기든 에이전트는 모든 자격 증명을 보게 돼. 그러니 작업자부터 최소 환경(env -i, 서비스 유닛, 컨테이너)으로 띄우고 도구에 정말 필요한 것만 더해. 많은 비밀 유출은 프롬프트보다 환경 상속에서 시작돼.

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

Code

촘촘한 샌드박스 options·python
# options.env는 이 작업자 프로세스가 이미 가진 환경 위에 합쳐져.
# 더하고 덮어쓸 뿐, 지우지는 않아. 그러니 작업자부터 최소 환경으로 띄우고,
#   env -i PATH=/usr/local/bin:/usr/bin:/bin HOME=/srv/agent-home python worker.py
# (또는 환경을 명시한 서비스 유닛이나 컨테이너로) 이 작업에 필요한 것만 여기서 더해.
from claude_agent_sdk import ClaudeAgentOptions

options = ClaudeAgentOptions(
    cwd="/srv/agent-workspace",  # / 말고
    env={
        "LANG": "en_US.UTF-8",
        # 이 작업에 필요한 키만, 물려받지 말고 여기서 가져와:
        "WEATHER_API_KEY": load_secret("weather-api-key"),
    },
    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을 통째로 물려받으면 에이전트도 네 비밀을 전부 갖고, options.env로는 하나도 뺄 수 없어. 작업자 자신의 환경을 허용 목록으로 걸러.

Progress

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

댓글 0

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

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