サービスのサンドボックスを構成する

Cloud Run サンドボックスは、第 2 世代環境の既存のサービス内で、信頼できないコードの実行や AI エージェントなどのツールの実行を行うための高速で安全な分離環境を提供します。サンドボックスはレイテンシに対して高度に最適化されており、コンテナと同じインスタンス内で実行され、割り当てられた CPU とメモリを共有します。

このページでは、コンテナでサンドボックスを構成する方法について説明します。CLI を使用してサンドボックスとやり取りするコードの作成の詳細については、Cloud Run でのコード実行をご覧ください。

始める前に

  1. Google Cloud アカウントにログインします。 Google Cloudを初めて使用する場合は、 アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $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 サービスがGoogle Cloud APIs(Cloud クライアント ライブラリなど)と連携している場合は、サービス 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. サービス YAML ファイルを更新して、コンテナ構成内に sandboxLauncher 属性を true に設定します。

    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. サービス YAML ファイルを更新して、コンテナ構成内の sandboxLauncher 属性を削除します。

    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()

Sandbox CLI

コマンドラインからサンドボックス コマンドを直接実行するには、次のコマンドを実行します。

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

このガイドの例では、絶対パス /usr/local/gcp/bin/sandbox ではなく sandbox コマンドを使用します。

使用可能なコマンドの完全なリストを表示するには、/usr/local/gcp/bin/sandbox -h コマンドを実行します。

サービスからサンドボックスで信頼できないコードを実行するには、Cloud Run でのコード実行をご覧ください。