서비스의 샌드박스 구성

Cloud Run 샌드박스는 2세대 환경의 기존 서비스 내에서 신뢰할 수 없는 코드를 실행하거나 AI 에이전트와 같은 도구를 실행할 수 있는 빠르고 안전하며 격리된 환경을 제공합니다. 샌드박스는 지연 시간이 매우 최적화되어 있으며 컨테이너와 동일한 인스턴스 내에서 실행되어 할당된 CPU와 메모리를 공유합니다.

이 페이지에서는 컨테이너에서 샌드박스를 구성하는 방법을 설명합니다. CLI를 사용하여 샌드박스와 상호작용하는 코드를 작성하는 방법에 대한 자세한 내용은 Cloud Run의 코드 실행을 참조하세요.

시작하기 전에

  1. 계정에 로그인합니다. Google Cloud 를 처음 사용하는 경우 계정을 만들고 Google 제품의 실제 성능을 평가해 보세요. Google Cloud신규 고객에게는 워크로드를 실행, 테스트, 배포하는 데 사용할 수 있는 $300의 무료 크레딧이 제공됩니다.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  5. Verify that billing is enabled for your Google Cloud project.

  6. gcloud CLI를 설치하고 초기화합니다.
  7. 2세대 실행 환경에서 Cloud Run 서비스를 배포합니다 .

필요한 역할

Cloud Run 서비스를 구성하고 배포하는 데 필요한 권한을 얻으려면 관리자에게 다음 IAM 역할을 부여해 달라고 요청하세요.

소스 코드에서 서비스 또는 함수를 배포하는 경우 프로젝트와 Cloud Build 서비스 계정에 추가 역할을 부여해야 합니다.

Cloud Run과 연결된 IAM 역할 및 권한 목록은 Cloud Run IAM 역할Cloud Run IAM 권한을 참조하세요. Cloud Run 서비스가 Cloud 클라이언트 라이브러리와 같은Google Cloud API와 상호작용하는 경우에는 서비스 ID 구성 가이드를 참조하세요. 역할 부여에 대한 자세한 내용은 배포 권한액세스 관리를 참조하세요.

샌드박스 사용 설정

구성을 변경하면 새 버전이 생성됩니다. 이를 변경하는 명시적 업데이트가 없으면 이후 버전에도 이 구성 설정이 자동으로 적용됩니다.

샌드박스를 사용 설정하면 Cloud Run 서비스가 2세대 실행 환경에 배포됩니다. Cloud Run 서비스에서 샌드박스를 사용 설정하려면 Google Cloud CLI 또는 YAML 구성을 사용하세요.

gcloud

서비스를 배포하거나 업데이트하려면 --sandbox-launcher 플래그를 지정하세요.

  • 새 서비스를 배포하려면 다음 명령어를 실행합니다.

    gcloud beta run deploy SERVICE --image IMAGE_URL --sandbox-launcher

    다음을 바꿉니다.

    • SERVICE: Cloud Run 서비스 이름
    • IMAGE_URL: 컨테이너 이미지에 대한 참조(예: us-docker.pkg.dev/cloudrun/container/hello:latest). Artifact Registry를 사용하는 경우 저장소 REPO_NAME이 이미 생성되어 있어야 합니다. URL은 LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG 형식을 따릅니다.
  • 기존 서비스를 업데이트하려면 다음 명령어를 실행합니다.

    gcloud beta run services update SERVICE --sandbox-launcher

YAML

  1. 새 서비스를 만드는 경우에는 이 단계를 건너뜁니다. 기존 서비스를 업데이트하는 경우 YAML 구성을 다운로드합니다.

    gcloud run services describe SERVICE --format export > service.yaml
  2. 컨테이너 구성 내에서 sandboxLauncher 속성이 true로 설정되도록 서비스 YAML 파일을 업데이트합니다.

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
      annotations:
        run.googleapis.com/launch-stage: BETA
    spec:
      template:
        spec:
          containers:
          - name: CONTAINER
            image: IMAGE_URL
            sandboxLauncher: true
            port: 8080
    

    다음을 바꿉니다.

    • SERVICE: Cloud Run 서비스 이름
    • CONTAINER: 컨테이너 이름
    • IMAGE_URL: 컨테이너 이미지에 대한 참조(예: us-docker.pkg.dev/cloudrun/container/hello:latest). Artifact Registry를 사용하는 경우 저장소 REPO_NAME이 이미 생성되어 있어야 합니다. URL은 LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG 형식을 따릅니다.
  3. 다음 명령어를 사용하여 서비스를 만들거나 업데이트합니다.

    gcloud run services replace service.yaml

    gcloud run services replace 명령어는 service.yaml 파일이 있는 경우 기본적으로 이 파일을 사용합니다.

샌드박스는 호스트 컨테이너에 할당된 CPU와 메모리를 공유합니다. CPU 및 메모리에 대한 기본 컨테이너 한도가 애플리케이션과 동시에 실행하는 활성 샌드박스를 모두 수용할 수 있을 만큼 충분한지 확인합니다.

샌드박스 사용 중지

서비스에서 샌드박스를 실행하는 기능을 사용 중지하려면 Google Cloud CLI 또는 YAML 구성을 사용하세요.

gcloud

다음 명령어를 실행하여 --no-sandbox-launcher 플래그를 사용하여 서비스를 업데이트합니다.

gcloud beta run services update SERVICE --no-sandbox-launcher

SERVICE를 서비스 이름으로 바꿉니다.

YAML

  1. 새 서비스를 만드는 경우에는 이 단계를 건너뜁니다. 기존 서비스를 업데이트하는 경우 YAML 구성을 다운로드합니다.

    gcloud run services describe SERVICE --format export > service.yaml
  2. 컨테이너 구성 내에서 sandboxLauncher 속성을 삭제하도록 서비스 YAML 파일을 업데이트합니다.

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        spec:
          containers:
          - name: CONTAINER
            image: IMAGE_URL
            port: 8080
    

    다음을 바꿉니다.

    • SERVICE: Cloud Run 서비스 이름
    • CONTAINER: 컨테이너 이름
    • IMAGE_URL: 컨테이너 이미지에 대한 참조(예: us-docker.pkg.dev/cloudrun/container/hello:latest). Artifact Registry를 사용하는 경우 저장소 REPO_NAME이 이미 생성되어 있어야 합니다. URL은 LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG 형식을 따릅니다.
  3. 다음 명령어를 사용하여 서비스를 만들거나 업데이트합니다.

    gcloud run services replace service.yaml

    gcloud run services replace 명령어는 service.yaml 파일이 있는 경우 기본적으로 이 파일을 사용합니다.

샌드박스 실행

샌드박스를 사용 설정하면 컨테이너 실행 환경 내에서 샌드박스를 실행할 수 있습니다. 샌드박스 바이너리는 /usr/local/gcp/bin/sandbox에 있습니다.

소스 코드에서 절대 경로를 참조하여 바이너리를 실행할 수 있습니다. 예를 들어 격리된 샌드박스 내에서 Hello를 출력하려면 다음 옵션 중 하나를 선택하세요.

Node.js

Node.js 애플리케이션에서 샌드박스 명령어를 실행하려면 다음 코드를 포함하세요.

exec(`/usr/local/gcp/bin/sandbox do -- /bin/echo "Hello"`, (e, stdout, stderr) => {
    res.send({ stdout, stderr });
});

Python

Python 애플리케이션에서 샌드박스 명령어를 실행하려면 다음 코드를 포함하세요.

import subprocess
result = subprocess.run(
    ["/usr/local/gcp/bin/sandbox", "do", "--", "/bin/echo", "Hello"],
    capture_output=True,
    text=True,
)
return {"stdout": result.stdout, "stderr": result.stderr}

Go

Go 애플리케이션에서 샌드박스 명령어를 실행하려면 다음 코드를 포함하세요.

cmd := exec.Command("/usr/local/gcp/bin/sandbox", "do", "--", "/bin/echo", "Hello")
out, err := cmd.CombinedOutput()

샌드박스 CLI

명령줄에서 직접 샌드박스 명령어를 실행하려면 다음 명령어를 실행합니다.

/usr/local/gcp/bin/sandbox do -- /bin/echo "Hello"

이 가이드의 예시에서는 절대 경로 /usr/local/gcp/bin/sandbox 대신 sandbox 명령어를 사용합니다.

사용 가능한 명령어의 전체 목록을 보려면 /usr/local/gcp/bin/sandbox -h 명령어를 실행합니다.

서비스의 샌드박스에서 신뢰할 수 없는 코드를 실행하려면 Cloud Run의 코드 실행을 참조하세요.