샌드박스가 도달할 수 있는 것 제어하기

샌드박스가 도달할 수 있는 것 제어하기

에이전트나 명령이 도달할 수 있는 대상을 제어해 봐요. 샌드박스의 유효 정책은 계정 규칙과 샌드박스에 첨부된 정책을 결합해요.

출처: 문서

본문

인증된 클라이언트, 관리되는 이미지, 계정의 정책 ID가 필요해요. 정책은 콘솔이나 네트워크 정책 관리 문서로 만들 수 있어요.

생성 시 정책 첨부

샌드박스를 만들 때 정책 ID를 전달하세요. 예시는 샌드박스가 실행될 때까지 기다리고 그 핸들을 반환해요.

첨부는 기존 정책을 참조하지, 정책 정의를 포함하지 않아요. ID를 표시 이름과 구별하세요. 첨부된 정책은 계정 정책과 함께 접근을 제한하므로, 계정이 거부하는 접근을 허용할 수는 없어요.

워크로드가 필요로 하는 모든 대상을 포함하세요. 모델 제공자와 패키지 레지스트리를 포함해서요. 키트의 네트워크 요구 사항은 계정 제한을 덮어쓰지 않아요.

핵심 코드:

const sandbox = await client.create(
  { displayName: name, image, network: { policyIds } },
  { timeoutMs: 300_000, idempotencyKey: requestId },
);
return sandbox.waitUntilRunning();

완전한 TypeScript 예시: netpolicy/reference.ts

import type { Sandboxes } from '@docker/sandboxes';

export async function createWithPolicyIds(
  client: Sandboxes,
  name: string,
  image: string,
  policyIds: string[],
  requestId: string,
) {
  const sandbox = await client.create(
    { displayName: name, image, network: { policyIds } },
    { timeoutMs: 300_000, idempotencyKey: requestId },
  );
  return sandbox.waitUntilRunning();
}

시행 중인 규칙 검사

애플리케이션 타임아웃을 해결하기 전에 샌드박스의 유효 정책을 읽어요. 결과는 결합된 허용·거부 규칙, 그 기원, 정확한 정책 표현을 포함해요.

유효 뷰는 "이 샌드박스가 api.anthropic.com에 도달할 수 있나?" 같은 질문에 대한 유용한 출발점이에요. 기본 모드와 일치하는 규칙을 모두 확인하세요. 기본 거부(deny-by-default) 정책은 대상에 대한 명시적 허용이 필요해요.

핵심 코드:

return sandbox.networkPolicies.get();

완전한 TypeScript 예시: netpolicy/effective.ts

import type { Sandbox } from '@docker/sandboxes';

export async function getNetworkPolicies(sandbox: Sandbox) {
  return sandbox.networkPolicies.get();
}

허용·차단 트래픽 확인

domain=network를 사용해 네트워크 결정을 선택하며 샌드박스의 정책 로그 항목을 나열해요. 예시는 페이지 매김을 따르고 모든 일치 항목을 반환해요.

각 항목의 대상, 결정, 이유, 횟수를 사용해 차단된 의존성을 식별하세요. 빈 결과는 일치하는 항목이 없음을 뜻하지, 대상에 도달할 수 있음을 증명하지는 않아요. 로그는 최근 활동을 기록하지, 영구 감사 기록은 아니에요.

핵심 코드:

return sandbox.networkPolicies.logs.all({ filter }).collect();

완전한 TypeScript 예시: netpolicy/logs.ts

import type { Sandboxes } from '@docker/sandboxes';

export async function listPolicyLogEntries(
  client: Sandboxes,
  sandboxName: string,
  filter: string,
) {
  const sandbox = await client.get(sandboxName);
  return sandbox.networkPolicies.logs.all({ filter }).collect();
}

더 알아보기 (Learn more)