네트워크 정책 관리하기
네트워크 정책 관리하기
Docker 계정에 재사용 가능한 네트워크 정책을 만들고, 샌드박스를 만들 때 그 ID를 첨부해 봐요. SDK의 거버넌스 컬렉션은 샌드박스 클라이언트와 같은 Docker 인증을 사용해요.
출처: 문서
본문
인증된 클라이언트로 시작하세요. 이 메서드들은 개인 정책을 관리하지, 조직 차원의 관리를 하지는 않아요.
정책의 수명 관리
예시는 정책을 만들고, 사용 가능한 정책을 나열하고, 새로 만든 것을 읽고, 그 정의를 교체해요. 정리에서 임시 정책을 삭제하려 시도하는데, 이후 단계가 실패해도 그래요. 정리 오류를 확인하세요. 취소된 요청은 정책을 남겨 둘 수 있어요.
SDK의 정책 입력 타입으로 정책 정의와 교체를 제공하세요. 워크로드가 필요로 하는 대상을 포함하세요. 기본 거부(deny-by-default) 정책에서는 에이전트의 모델 제공자와 필요한 패키지 레지스트리를 명시적으로 허용하세요.
정책과 그 교체 모두에 status: 'POLICY_STATUS_ACTIVE'를 설정하세요. SDK 타입이 이 필드를 선택 사항으로 만들지만, 서비스는 생략되거나 다른 값은 unimplemented로 거부해요.
업데이트는 규칙을 추가하는 대신 정의를 교체해요. 무엇을 보존할지 결정하기 전에 기존 정책을 읽어요. 개인 정책 변형은 자동으로 재생(replay)되지 않으므로, 불확실한 결과 후 재시도하기 전에 현재 상태를 검사하세요.
이것은 일회용 정책 관리 예시예요. 함수가 끝날 때쯤 반환된 정책 ID는 이미 삭제됐어요. 실제 워크로드를 위해 정책을 유지하려면 그 데모 정리를 제거하고 그 ID를 애플리케이션 구성에 저장하세요. 첨부하고 시행된 규칙을 검사하려면 샌드박스가 도달할 수 있는 것 제어하기 문서를 따르세요.
핵심 코드:
const created = await client.governance.policies.create(policy);
try {
const listed = await client.governance.policies.list();
const current = await client.governance.policies.get(created.id);
const updated = await client.governance.policies.update(
created.id,
replacement,
);
return { listed, current, updated };
} finally {
await client.governance.policies.delete(created.id);
}
완전한 TypeScript 예시: policies/manage.ts
import type { GovernancePolicyInput, Sandboxes } from '@docker/sandboxes';
export async function managePolicy(
client: Sandboxes,
policy: GovernancePolicyInput,
replacement: GovernancePolicyInput,
) {
const created = await client.governance.policies.create(policy);
try {
const listed = await client.governance.policies.list();
const current = await client.governance.policies.get(created.id);
const updated = await client.governance.policies.update(
created.id,
replacement,
);
return { listed, current, updated };
} finally {
await client.governance.policies.delete(created.id);
}
}