Cloud Run 샌드박스는 2세대 환경의 기존 서비스 내에서 신뢰할 수 없는 코드를 실행하거나 AI 에이전트와 같은 도구를 실행할 수 있는 빠르고 안전하며 격리된 환경을 제공합니다. 샌드박스는 지연 시간이 매우 최적화되어 있으며 컨테이너와 동일한 인스턴스 내에서 실행되어 할당된 CPU와 메모리를 공유합니다.
이 페이지에서는 컨테이너에서 샌드박스를 구성하는 방법을 설명합니다. CLI를 사용하여 샌드박스와 상호작용하는 코드를 작성하는 방법에 대한 자세한 내용은 Cloud Run의 코드 실행을 참조하세요.
시작하기 전에
- 계정에 로그인합니다. Google Cloud 를 처음 사용하는 경우 계정을 만들고 Google 제품의 실제 성능을 평가해 보세요. Google Cloud신규 고객에게는 워크로드를 실행, 테스트, 배포하는 데 사용할 수 있는 $300의 무료 크레딧이 제공됩니다.
-
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 theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
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 theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
- gcloud CLI를 설치하고 초기화합니다.
- 2세대 실행 환경에서 Cloud Run 서비스를 배포합니다 .
필요한 역할
Cloud Run 서비스를 구성하고 배포하는 데 필요한 권한을 얻으려면 관리자에게 다음 IAM 역할을 부여해 달라고 요청하세요.
- Cloud Run 서비스에 대한 Cloud Run 개발자(
roles/run.developer) 역할 - 서비스 계정 사용자 (
roles/iam.serviceAccountUser) 서비스 ID에 대한
소스 코드에서 서비스 또는 함수를 배포하는 경우 프로젝트와 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
새 서비스를 만드는 경우에는 이 단계를 건너뜁니다. 기존 서비스를 업데이트하는 경우 YAML 구성을 다운로드합니다.
gcloud run services describe SERVICE --format export > service.yaml
컨테이너 구성 내에서
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형식을 따릅니다.
다음 명령어를 사용하여 서비스를 만들거나 업데이트합니다.
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
새 서비스를 만드는 경우에는 이 단계를 건너뜁니다. 기존 서비스를 업데이트하는 경우 YAML 구성을 다운로드합니다.
gcloud run services describe SERVICE --format export > service.yaml
컨테이너 구성 내에서
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형식을 따릅니다.
다음 명령어를 사용하여 서비스를 만들거나 업데이트합니다.
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의 코드 실행을 참조하세요.