GKE의 에이전트 샌드박스를 사용한 자동 코드 평가

1. 소개

이 Codelab에서는 Google Kubernetes Engine (GKE)에 해커톤 심사 애플리케이션을 배포하고 Kubernetes-sigs 에이전트 샌드박스를 사용하여 에이전트 워크로드를 안전하게 실행합니다.

이 플랫폼은 LLM 에이전트를 사용하여 해커톤 프로젝트를 검토, 테스트, 평가하는 프로세스를 자동화하도록 설계되었습니다. 심사에는 신뢰할 수 없는 참가자 코드 제출을 평가해야 하므로 코드 삽입, 권한 에스컬레이션 또는 리소스 악용을 방지하려면 안전한 실행 샌드박스가 중요합니다.

실습할 내용

  • 타겟 Google Cloud 서비스를 프로비저닝하고 타겟 API를 설정합니다.
  • GKE Autopilot을 초기화하고 에이전트 Sandbox CRD, 클러스터 구성, Sandbox 라우터를 설치합니다.
  • 샌드박스 게이트웨이, 샌드박스 클레임 템플릿, 샌드박스 WarmPool을 배포합니다.
  • REST 백엔드 API, ADK 심사 작업자 에이전트, React 프런트엔드 UI를 배포합니다.
  • 외부 부하 분산 라우팅을 연결하고 플랫폼에 액세스하여 안전한 샌드박스 심사 워크플로를 실행합니다.

필요한 항목

  • 웹브라우저(예: Chrome)
  • 결제가 사용 설정된 Google Cloud 프로젝트.

이 Codelab에서 만든 리소스의 총 런타임 요금은 5달러 미만이어야 합니다.

2. 문제: 신뢰할 수 없는 코드 안전하게 평가

해커톤은 참가자가 평가를 위해 프로젝트(소스 코드를 포함하는 경우가 많음)를 빌드하고 제출하는 빠른 속도의 혁신 이벤트입니다. 이러한 제출물을 수동으로 판단하는 것은 시간과 리소스가 많이 소모됩니다. AI 에이전트를 사용하여 채점을 자동화하는 것은 유망한 솔루션이지만, 버그가 있거나 악의적이거나 리소스 집약적일 수 있는 참가자 제공 코드를 안전하게 실행하는 방법이라는 심각한 보안 문제가 발생합니다.

인프라에서 직접 신뢰할 수 없는 코드를 실행하면 다음과 같은 위험에 노출됩니다.

  • 코드 삽입: 악성 스크립트가 민감한 정보에 액세스하거나 수정하려고 시도할 수 있습니다.
  • 권한 에스컬레이션: 코드가 다른 시스템 또는 네트워크 리소스에 대한 무단 액세스를 시도할 수 있습니다.
  • 리소스 남용: 코드가 잘못 작성되었거나 서비스 거부 공격으로 인해 CPU, 메모리 또는 네트워크 대역폭이 과도하게 소비되어 다른 작업에 영향을 미칠 수 있습니다.

AI로 해커톤 심사를 자동화하려면 제출된 코드를 나머지 시스템 및 다른 제출과 완전히 격리된 환경에서 실행할 수 있어야 합니다.

3. 솔루션: GKE 에이전트 샌드박스

GKE 에이전트 샌드박스는 바로 이러한 문제를 위해 설계된 기능입니다. GKE에서 격리되고 상태 저장되며 단일 복제본 워크로드를 관리하는 데 도움이 되며, 신뢰할 수 없는 코드를 안전하고 효율적으로 실행해야 하는 AI 에이전트 런타임과 같은 사용 사례에 최적화되어 있습니다.

에이전트 샌드박스의 주요 이점은 다음과 같습니다.

  • 커널 수준 격리: gVisor와 같은 기술을 사용하여 신뢰할 수 없는 코드에 강력한 커널 수준 격리를 제공하여 코드가 호스트 시스템이나 다른 컨테이너에 액세스하지 못하도록 합니다.
  • 1초 미만 프로비저닝: 온디맨드 코드 평가에 중요한 샌드박스 환경을 빠르게 프로비저닝 (일반적으로 1초 미만)합니다.
  • 클라우드 네이티브 확장성: Kubernetes의 강력한 기능과 GKE의 관리형 인프라를 활용합니다.

에이전트 샌드박스를 사용하면 각 해커톤 제출에 대해 격리된 주문형 환경을 만들 수 있습니다. 그러면 AI 심사 에이전트가 전체 플랫폼의 무결성을 위험에 빠뜨리지 않고 이 보안 샌드박스 내에서 테스트를 실행하거나, 코드를 컴파일하거나, 기타 평가 단계를 실행하도록 에이전트 샌드박스에 지시할 수 있습니다. 이를 통해 해커톤 채점을 확장 가능하고 안전하며 효율적으로 자동화할 수 있습니다.

4. 시작하기 전에

Cloud Shell 시작

아래 버튼을 클릭하여 필요한 개발자 및 클라우드 명령줄 유틸리티가 사전 구성된 Google Cloud Shell을 시작합니다.

API 사용 설정

Cloud Shell에서 다음 명령어를 실행하여 플랫폼을 실행하는 데 필요한 모든 타겟 Google Cloud API를 사용 설정합니다.

gcloud services enable \
  container.googleapis.com \
  artifactregistry.googleapis.com \
  cloudbuild.googleapis.com \
  pubsub.googleapis.com \
  aiplatform.googleapis.com \
  cloudresourcemanager.googleapis.com \
  iam.googleapis.com \
  bigquery.googleapis.com \
  bigqueryconnection.googleapis.com

이러한 API를 사용 설정하는 이유: 무단 액세스 및 청구를 방지하기 위해 Google Cloud 서비스는 기본적으로 사용 중지되어 있습니다. 컨테이너 오케스트레이션 (GKE), 보안 컨테이너 스토리지 (Artifact Registry), 서버리스 빌드 패키징 (Cloud Build), 안정적인 메시지 큐 (Pub/Sub), AI 모델 서비스 (Vertex AI), 프로젝트 구성 (Cloud Resource Manager 및 IAM), 서버리스 데이터 분석 (BigQuery), 데이터베이스 수준 AI 바인딩 (BigQuery 연결)을 활성화하기 위해 이러한 특정 API를 사용 설정합니다.

5. 인프라 설정

이 단계에서는 코드 저장소를 클론하고 자동 설정 스크립트를 실행하여 타겟 클라우드 아키텍처와 기준 클러스터 구성요소를 배포합니다.

저장소 클론

모든 애플리케이션 서비스, 설정 스크립트, Kubernetes 매니페스트 선언이 포함된 저장소를 클론합니다.

git clone --depth 1 --filter=blob:none --sparse https://github.com/GoogleCloudPlatform/devrel-demos.git
cd devrel-demos
git sparse-checkout set codelabs/ai-toolkit-lab-2/hackathon-judge
cd codelabs/ai-toolkit-lab-2/hackathon-judge

배포 스크립트 실행

클라우드 리소스, 데이터베이스 모델, 기준 Kubernetes 클러스터 정책의 기본 설정은 deploy.sh 스크립트에 의해 자동화됩니다.

스크립트를 실행합니다.

./deploy.sh

대화형 셸 프롬프트에 따라 활성 프로젝트 ID 및 타겟 리전과 같은 구성을 제공합니다. 스크립트는 로컬 .env 구성을 자동으로 생성하고, 리소스를 바인딩하고, 컨테이너 이미지를 컴파일하고, GKE 기준 인프라를 등록합니다.

스크립트에서 실행하는 타겟 작업은 다음과 같습니다.

1. 환경 구성 설정

스크립트는 GKE, Pub/Sub, BigQuery, 프로젝트 변수 매개변수를 저장하는 .env 구성 파일을 만듭니다. 이 파일을 동적으로 소싱하면 모든 후속 Kubernetes 매니페스트 정의가 채워집니다.

이 환경 파일을 구성하는 이유: .env 파일은 구성 매개변수를 중앙 집중화하여 후속 단계에서 수동으로 적용하는 GKE 매니페스트가 동일한 지역 설정, 프로젝트 이름, 리소스를 사용하도록 보장하고 환경 구성을 소스 코드에서 엄격하게 분리합니다.

2. Google Cloud CLI 및 타겟 프로젝트 구성

스크립트는 gcloud, bq, kubectl, envsubst 유틸리티가 설치되어 있는지 확인하고, 인증 상태를 확인하고, 활성 구성 타겟을 활성 Google Cloud 프로젝트에 잠급니다.

활성 프로젝트를 타겟팅하는 이유: 활성 타겟 프로젝트를 설정하면 CLI 명령어가 계정의 다른 프로젝트에 영향을 미치지 않으며 사전 인증 검사를 실행하여 유효하지 않은 사용자 인증 정보로 인해 배포 중에 설정 명령어가 실패하지 않도록 합니다.

3. 타겟 Google Cloud API 사용 설정

스크립트는 대상 Google Cloud 서비스 API (GKE, Artifact Registry, Cloud Build, Pub/Sub, Vertex AI, BigQuery, IAM)를 확인하고 사용 설정하기 위해 멱등성 검사를 실행합니다.

Google Cloud API를 사용 설정하는 이유: 관리형 클라우드 서비스는 엔드포인트에 도달하거나 리소스를 만들기 전에 활성화해야 합니다. 시작 시 이를 사용 설정하면 후속 리소스 프로비저닝 명령어를 처리할 수 있도록 리전 GCP API 게이트웨이가 준비됩니다.

4. Artifact Registry Docker 저장소 프로비저닝

스크립트는 선택한 타겟 위치에 hackathon-judge-repo라는 Docker 컨테이너 저장소를 프로비저닝합니다.

Artifact Registry 저장소를 만드는 이유: GKE 클러스터는 동일한 리전 네트워크의 비공개 Container Registry에 안전하게 액세스하여 애플리케이션 이미지를 빠르게 가져와야 합니다. Artifact Registry는 Docker 컨테이너 이미지를 카탈로그화, 스캔, 저장할 수 있는 안전한 비공개 호스트를 제공합니다.

5. GKE Autopilot 클러스터 프로비저닝

스크립트는 hackathon-judge-cluster라는 Google Kubernetes Engine (GKE) Autopilot 클러스터를 프로비저닝합니다.

GKE Autopilot 클러스터를 배포하는 이유: GKE Autopilot은 노드 프로비저닝, 확장, 상태 모니터링, 호스트 OS 보안 업그레이드를 자동으로 관리합니다. 영구 서비스를 오케스트레이션하고 필요에 따라 안전한 작업자 샌드박스를 동적으로 예약하는 프로덕션 등급 컨테이너 플랫폼을 제공합니다.

6. Pub/Sub 주제 및 구독 구성

스크립트는 해당 작업자 및 API 구독과 함께 메시지 주제 (judging-tasksjudging-results)를 프로비저닝합니다.

Pub/Sub 주제 및 구독을 배포하는 이유: 코드 제출을 평가하는 데 시간이 오래 걸리고 리소스가 많이 소모됩니다. 메시지 대기열 아키텍처를 사용하면 동기 사용자 대상 API가 작업자 노드에서 분리됩니다. API 백엔드는 작업을 judging-tasks 주제로 푸시하고 작업자 에이전트는 사용 가능한 작업을 가져와 API 차단을 방지하고 자동 재시도 기능을 제공합니다.

7. BigQuery 데이터 세트, 테이블, AI 연결 구성

스크립트는 hackathon_judge 데이터 세트를 만들고, 구조적 SQL 데이터베이스 스키마를 적용하고, 시드 레코드를 로드하고, BigQuery ML 연결 서비스 계정에 필요한 AI 및 스토리지 역할을 부여합니다.

8. Cloud Build를 사용하여 컨테이너 빌드 트리거

이 스크립트는 cloudbuild.yaml 정의를 트리거하여 React UI, Go REST 서버, Python ADK 작업자, FastAPI 샌드박스를 컴파일하고, 활성 저장소 Git 커밋 SHA로 태그된 격리된 컨테이너 이미지로 패키징하고, Artifact Registry에 저장합니다.

9. 에이전트 샌드박스 커스텀 리소스 정의 (CRD) 등록

이 스크립트는 최신 Kubernetes-sigs 에이전트 샌드박스 커스텀 리소스 정의 (manifest.yamlextensions.yaml)를 다운로드하고 등록하여 GKE의 핵심 기능을 확장합니다.

에이전트 샌드박스 인프라를 설치하는 이유: 표준 Kubernetes 클러스터는 보호된 주문형 샌드박스 할당을 지원하지 않습니다. 에이전트 샌드박스 CRD를 등록하면 GKE의 컨트롤 플레인이 확장되어 Kubernetes가 샌드박스 샌드박스 마이크로 컨테이너를 네이티브로 오케스트레이션할 수 있습니다 (SandboxTemplates 및 SandboxClaims와 같은 커스텀 리소스 사용).

10. 네임스페이스, 서비스 계정, 워크로드 아이덴티티 구성

이 스크립트는 hackathon-judge 네임스페이스를 프로비저닝하고, Kubernetes 서비스 계정 (KSA)을 등록하고, 워크로드 아이덴티티 매핑을 설정하여 GKE 포드에 타겟 Google Cloud 권한을 부여합니다.

11. 샌드박스 라우터 배포

스크립트는 k8s/sandbox_router.yaml 매니페스트를 적용하여 샌드박스 라우터 배포 및 서비스를 시작하고 상태가 정상 상태가 될 때까지 기다립니다.

샌드박스 라우터를 배포하는 이유: 샌드박스 라우터는 중앙 내부 컨트롤 플레인 게이트웨이입니다. ADK 심사 작업자 에이전트가 호출하여 보안 샌드박스를 요청, 액세스 또는 해제하는 간단한 API를 노출하여 라우팅 매핑을 관리하고 애플리케이션 로직에서 클러스터 수준 포드 할당을 추상화합니다.

6. 에이전트 샌드박스 게이트웨이, 클레임, WarmPool 구성

이 단계에서는 특수 샌드박스 네트워크 게이트웨이를 수동으로 구성하고, 샌드박스 클레임 템플릿을 등록하고, 샌드박스 WarmPool을 배포하여 초저지연 샌드박스를 사용 설정합니다.

소스 환경 변수

환경 변수가 필요한 템플릿을 적용하기 전에 setup-env.sh 스크립트를 소싱하여 필요한 모든 변수를 파싱하고 셸로 내보냅니다.

source ./setup-env.sh

샌드박스 게이트웨이 적용

샌드박스 트래픽 라우팅을 위해 특별히 구성된 게이트웨이를 배포합니다.

kubectl apply -f k8s/sandbox-gateway.yaml

샌드박스 게이트웨이를 배포하는 이유: 샌드박스 게이트웨이는 샌드박스 라우팅 전용의 안전한 고성능 인그레스 컨트롤러 역할을 합니다. 샌드박스 네트워크를 격리하여 작업자 에이전트가 엔드포인트를 외부에 노출하지 않고도 요청된 샌드박스와 통신할 수 있는 안전한 로컬 타겟을 제공합니다.

샌드박스 클레임 템플릿 적용

envsubst를 사용하여 활성 환경 변수로 샌드박스 템플릿 정의를 채우고 적용합니다.

source ./setup-env.sh
envsubst < k8s/sandbox-claim-template.yaml | kubectl apply -f -

샌드박스 클레임 템플릿을 배포하는 이유: 샌드박스 클레임 템플릿은 환경을 정의하는 청사진 구성 역할을 합니다. 실행할 컨테이너 이미지 (개발자 도구와 함께 사전 패키지됨), 환경 매개변수 (GCP 프로젝트 ID), 포트, 리소스 한도 (CPU/메모리 타겟)를 지정합니다. gVisor (gvisor 런타임)를 활용하여 이러한 컨테이너 인스턴스를 실행하도록 GKE를 구성하여 신뢰할 수 없는 참여자 코드가 커널 가상화 격리의 추가 레이어에서 실행되도록 보장합니다.

샌드박스 WarmPool 적용

샌드박스 WarmPool을 적용하여 실행 중인 샌드박스를 사전 초기화합니다.

kubectl apply -f k8s/sandbox-warmpool.yaml

웜 풀 대기 인스턴스가 성공적으로 시작되었는지 확인합니다.

kubectl get pods -n hackathon-judge -l app=sandbox

샌드박스 WarmPool을 배포하는 이유: 온디맨드로 프로비저닝, 예약, 이미지 가져오기, 새 컨테이너 포드 부팅은 상당한 시작 오버헤드 (콜드 스타트 시간 30초 이상)를 발생시킵니다. 샌드박스 WarmPool은 활성 상태의 사전 워밍된 샌드박스 포드 (기본적으로 5개의 복제본)의 대기 풀을 유지합니다. 작업자 에이전트가 평가 환경을 요청하면 샌드박스 라우터는 즉시 실행 중인 사전 워밍된 포드를 할당하여 시작 지연 시간을 1초 미만으로 줄입니다.

7. 애플리케이션 구성요소 배포

이제 보안 샌드박스 인프라가 완전히 활성화되었으므로 중앙 백엔드 API, 작업자 에이전트, React 웹 인터페이스, 인그레스 게이트웨이 매핑을 배포합니다.

백엔드 배포

오케스트레이터 REST API 백엔드를 배포합니다.

source ./setup-env.sh
envsubst < k8s/backend.yaml | kubectl apply -f -

에이전트 배포

ADK 심사 작업자 에이전트를 배포합니다.

source ./setup-env.sh
envsubst < k8s/agent.yaml | kubectl apply -f -

프런트엔드 배포하기

대화형 웹 사용자 인터페이스를 배포합니다.

source ./setup-env.sh
envsubst < k8s/frontend.yaml | kubectl apply -f -

외부 게이트웨이 및 라우팅 구성

외부 클라이언트 트래픽을 매핑하는 기본 게이트웨이 및 인그레스 HTTP 경로를 배포합니다.

kubectl apply -f k8s/gateway.yaml

외부 인그레스 게이트웨이를 배포하는 이유: 외부 게이트웨이는 Kubernetes Gateway API를 사용하여 서비스를 노출합니다. 부하 분산된 공개 IP 주소를 프로비저닝하고 경로 규칙에 따라 경로를 매핑하여 /api/* 아래의 API 요청을 Go 백엔드로 전달하고 다른 모든 클라이언트 웹 트래픽 (/)을 React 프런트엔드로 매핑하여 공개 클러스터 액세스를 보호합니다.

출시 확인

셸 실행을 차단하고 세 가지 핵심 서비스 배포가 모두 정상 상태의 준비된 출시 상태가 될 때까지 기다립니다.

kubectl rollout status deployment/backend -n hackathon-judge --timeout=300s
kubectl rollout status deployment/agent -n hackathon-judge --timeout=300s
kubectl rollout status deployment/frontend -n hackathon-judge --timeout=300s

8. 애플리케이션 확인 및 사용

UI 액세스

새로 프로비저닝된 기본 부하 분산기 게이트웨이의 외부 공개 IP 주소를 가져옵니다.

프로비저닝 상태를 실시간으로 확인하려면 watch 플래그 (-w)를 사용하여 명령어를 실행하고 ADDRESS 필드에 공개 IP 주소가 채워질 때까지 기다립니다.

kubectl get gateway -n hackathon-judge hackathon-judge-gateway -w

프로비저닝이 완료되면 다음과 비슷한 출력이 표시됩니다.

NAME                      CLASS    ADDRESS          PROGRAMMED   AGE
hackathon-judge-gateway   gke-l7   34.120.120.120   True         3m

ADDRESS 열에 유효한 공개 IP 주소가 표시되고 PROGRAMMED 상태가 True이면 Ctrl+C를 눌러 감시를 중지합니다.

게이트웨이 상태를 가져오는 이유: 게이트웨이 API는 공개 인그레스를 처리합니다. 게이트웨이 상태를 확인하면 Google Cloud의 외부 전역 부하 분산기가 클러스터에 할당한 공개, 부하 분산 외부 IP 주소가 반환됩니다. 이는 플랫폼의 공개 주소를 나타냅니다.

브라우저에서 할당된 공개 IP 주소를 열어 해커톤 심사위원 대시보드를 로드합니다.

작업 제출

  • 프런트엔드 UI를 사용하여 대시보드로 이동하고 해커톤을 선택합니다.

대시보드

  • 프로젝트에서 Run Agent를 클릭하여 에이전트가 루브릭에 따라 전체 프로젝트를 평가하도록 할 수 있습니다.

프로젝트

샌드박스 시작 시청

hackathon-judge 네임스페이스 내의 활성 포드를 모니터링하여 실행을 판단하기 위해 샌드박스 포드가 동적으로 요청되고 프로비저닝되는지 확인합니다.

kubectl get pods -n hackathon-judge -w

작업자 에이전트 포드의 로그를 확인하여 단계별 ADK 심사 평가 로직을 확인합니다.

kubectl logs -l app=agent -n hackathon-judge

에이전트 로그를 검사하는 이유: 작업자 에이전트 로그를 검사하면 평가 파이프라인의 자세한 내부 단계가 실시간으로 표시됩니다. 작업을 가져오고, 샌드박스 컨테이너를 요청하고, 컴파일 타겟을 실행하고, Gemini로 보고서를 분석하고, 스코어카드를 게시하는 ADK 에이전트를 추적할 수 있습니다.

9. (선택사항) 작동 방식

에이전트 샌드박스 아키텍처

BigQuery AI 함수는 텍스트 기반 제출 및 README 주장을 평가하는 데 유용하지만 엔지니어링 프로젝트를 평가하려면 코드를 컴파일하고, 서드 파티 라이브러리를 설치하고, 실제 테스트 스위트를 실행해야 합니다.

원시 사용자 코드를 실행하면 호스트 손상, 컨테이너 브레이크아웃, 무단 리소스 액세스 등 심각한 보안 위험이 발생합니다. GKE 에이전트 샌드박스 프레임워크는 gVisor (runsc) 가상화를 사용하여 격리된 샌드박스 워크로드를 오케스트레이션하여 이러한 위험을 완화합니다.

시스템 상호작용 흐름

아래 다이어그램은 보안 샌드박스 심사 실행 중에 이벤트 기반 시스템의 다양한 요소가 통신하는 방식을 보여줍니다.

참여 도구 및 구성요소의 작동 방식

  • React 프런트엔드 UI: 사용자가 기준 모델을 구성하고, 팀을 등록하고, 프로젝트 URL을 제출하고, 전체 파일 불일치 및 엔지니어링 의견을 포함한 최종 채점 스코어카드를 검토하는 대화형 인터페이스를 노출합니다.
  • Go REST 백엔드 API: 전역 API 엔드포인트를 관리합니다. BigQuery에 프로젝트 구성을 저장하고 Pub/Sub에 심사 작업을 푸시하여 과도한 컴퓨팅 실행 파이프라인을 분리합니다.
  • Google Pub/Sub: 작업 메시지를 대기열에 안전하게 보관하여 API와 활성 작업자 인스턴스 간의 통신을 비동기식으로 오케스트레이션하는 메시지 지향 브로커입니다.
  • Python ADK 작업자 (감독자 에이전트): Pub/Sub에서 작업을 가져오는 백그라운드 작업자입니다. Google 에이전트 개발 키트 (ADK)를 활용하여 평가를 오케스트레이션하도록 지시된 상위 수준 감독자 에이전트를 시작합니다. 감독자는 기본 도구인 evaluate_repository를 호출하여 심층 원시 명령어 테스트를 위임합니다.
  • 샌드박스 라우터 및 게이트웨이 (GKE 컨트롤 플레인): 표준 샌드박스 커스텀 리소스 정의 (SandboxClaims, SandboxTemplates)를 등록하는 내부 제어 게이트웨이입니다. GKE 네트워크를 조정하여 포드를 할당하고 보호하며 연결 스트림을 작업자 클라이언트에 다시 반환합니다.
  • 샌드박스 WarmPool: 긴 GKE 컨테이너 시작 시간(30초 이상의 '콜드 스타트')을 방지하기 위해 WarmPool은 활성 대기 포드를 유지합니다. 샌드박스가 요청되면 라우터는 1초 미만의 시간 내에 즉시 매핑한 후 출시 시 재활용을 예약합니다.
  • gVisor (runsc) 격리: 보안 샌드박스 경계 역할을 하는 사용자 공간 가상 커널입니다. 컨테이너 공간에서 GKE 노드 커널로의 시스템 호출을 가로채 위험한 원시 명령어 (예: 시스템 스크립트 또는 패키지 설정)가 절대 가상화 격리에서 실행되도록 합니다.
  • FastAPI 샌드박스 런타임: 샌드박스 컨테이너 내에서 실행되는 경량 Python API 서버입니다. 외부 작업자 도구가 파일을 조작하고 셸 작업을 트리거할 수 있는 보안 엔드포인트 (/execute, /upload, /download)를 노출합니다.
  • Gemini CLI (@google/gemini-cli): 샌드박스 내에 설치된 자율 에이전트 스크립트입니다. 개발자 환경 런타임 플래그 (--yolo)로 트리거되면 엄격한 평가 지침 시트 (prompt.md)와 기준 정의 (criteria.md)를 사용하여 다음 작업을 실행합니다.
    • 코드베이스 계층 구조를 동적으로 분석합니다 (tree 또는 ripgrep과 같은 도구 사용).
    • 요구사항을 자동으로 설치합니다 (npm install, pip install, go build 등의 명령어를 통해).
    • 실제 개발 테스트 (예: npm test 또는 pytest)를 실행하여 기능을 확인합니다.
    • 컨테이너의 워크로드 아이덴티티 바인딩 사용자 인증 정보를 통해 Vertex AI 모델을 호출하여 파일 로직을 평가하고, 리드미에 대한 주장을 교차 확인하고, 고스트 기능을 감지하고, 품질 문제를 로깅하고, evaluation.json에 구조화된 스코어카드 보고서를 작성합니다.
  • 표준 개발자 환경: 샌드박스 컨테이너 이미지에 node, npm, yarn, pnpm, python, pip, uv, go, gh, git, tree, ripgrep, playwright를 번들로 묶어 자율 하위 에이전트에게 완전한 테스트 작업공간을 제공합니다.

10. 삭제

Google Cloud 계정에 지속적으로 비용이 청구되지 않도록 하려면 이 Codelab에서 만든 리소스를 삭제하세요.

./destroy.sh

리소스를 정리하는 이유: Google Cloud는 리소스 활용 모델에 따라 요금을 청구합니다. GKE Autopilot 클러스터, 네트워크 부하 분산기, 영구 디스크와 같은 활성 리소스는 유휴 상태일 때도 지속적으로 요금이 청구됩니다. 이 단계를 실행하면 클러스터 네임스페이스가 삭제되어 Kubernetes 객체가 정리되고 GKE Autopilot 클러스터 호스트 자체가 삭제되어 모든 기본 청구 요금이 즉시 종료됩니다.

11. 마무리

축하합니다. GKE의 에이전트 샌드박스를 사용하여 해커톤 심사위원 애플리케이션을 성공적으로 배포했습니다.

격리된 컨테이너화된 보안 제약 조건에서 신뢰할 수 없는 코드베이스 제출을 테스트하고 평가할 수 있는 안전한 최신 이벤트 기반 AI 플랫폼을 구현했습니다.

학습한 내용

  • GKE 인프라: GKE Autopilot 및 Pub/Sub, BigQuery와 같은 지원 Google Cloud 서비스를 프로비저닝하는 방법
  • 에이전트 샌드박스 구성: 커스텀 리소스 정의, SandboxTemplate, SandboxClaim, 고성능 샌드박스 WarmPool을 구성하는 방법
  • 마이크로서비스 배포: 워크로드 아이덴티티 바인딩을 구성하고 다중 구성요소 마이크로서비스 아키텍처 (프런트엔드 React, REST Go, 작업자 ADK 에이전트, 격리된 샌드박스)를 배포하는 방법
  • 안전한 샌드박스: gVisor 가상화 컨테이너를 활용하여 GKE 노드에서 신뢰할 수 없는 서드 파티 명령어를 안전하게 실행하는 방법

다음 단계

참조 문서