リモート実行環境サンドボックス
実行環境サンドボックスは、アプリケーションレベルのネットワークとファイルシステムの分離を実現し、GitLab Duo Agent Platformのリモートフローを不正なネットワークアクセスやデータ流出から保護します。このサンドボックスは、正当なフロー操作に必要な接続を維持しながら、データ流出の試み、外部ソースからの悪意のあるコードの読み込み、不正なデータ収集を防止するように設計されています。
サンドボックスが適用される条件
Anthropic Sandbox Runtime (SRT)がインストールされている互換性のあるDockerイメージを使用すると、実行環境サンドボックスが自動的に適用されます。これには、デフォルトのGitLab Dockerイメージ(リリースv0.0.6以降)またはカスタムイメージにSRTがインストールされたものの使用が含まれます。
サンドボックスは、次の条件を満たす場合に有効になります:
- Anthropic Sandbox Runtime (SRT)はDockerイメージで利用可能です。
- GitLab Duo Agent PlatformのセッションがRunner上で実行されている(ローカル環境はサンドボックス化されません)。
デフォルトとカスタムイメージの設定におけるCI/CD変数の違いについては、Flow execution variablesを参照してください。
前提条件
実行環境サンドボックスを使用するには、次の条件を満たしている必要があります:
- プロジェクトでGitLab Duo Agent Platformが有効になっていること。
- 特権Runnerモードが有効になっていること。これはサンドボックスを機能させるために必須です。
- 互換性のあるDockerイメージ: デフォルトGitLab Dockerイメージのバージョン
v0.0.6以降、またはAnthropic Sandbox Runtime (SRT)がインストールされたカスタムイメージが該当します。
仕組み
実行環境サンドボックスは、Anthropic Sandbox Runtime(SRT)を使用してフローの実行をラップし、次の保護を行います:
- ネットワーク分離: 実行環境から外部に送信される前にすべてのネットワークリクエストを傍受し、許可リストに登録されたドメインに対して検証します。
- ファイルシステムの制限: 特定のディレクトリへの読み取りおよび書き込みアクセスを制限し、機密ファイルへのアクセスをブロックします。
- グレースフルフォールバック: SRTが使用できない場合や必要なオペレーティングシステムの権限が不足している場合でも、警告メッセージを表示したうえでフローを直接実行します。
カスタムイメージにAnthropic Sandbox Runtime (SRT)をインストールする
たとえば、agent-config.ymlを使用するカスタムイメージを使用する場合、Anthropic SRTバージョン0.0.20以降がインストールされ、環境で利用可能である必要があります。
SRTはnpmを介して@anthropic-ai/sandbox-runtimeとして利用できます。次の例は、Dockerfileでのインストールステージを示しています:
# Install srt sandboxing with cache clearing and verification
ARG SANDBOX_RUNTIME_VERSION=0.0.20
RUN npm cache clean --force && \
npm install -g @anthropic-ai/sandbox-runtime@${SANDBOX_RUNTIME_VERSION} && \
test -s "$(npm root -g)/@anthropic-ai/sandbox-runtime/package.json" && \
srt --versionランタイム時に、RunnerはSRTが利用可能で動作していることを確認します:
$ if which srt > /dev/null; then
$ echo "SRT found, creating config..."
SRT found, creating config...
$ echo '{"network":{"allowedDomains":["host.docker.internal","localhost","gitlab.com","*.gitlab.com","duo-workflow-svc.runway.gitlab.net"],"deniedDomains":[],"allowAllUnixSockets":false},"filesystem":{"denyRead":["~/.ssh"],"allowWrite":["./","/tmp/gitlab_duo_agent_platform"],"denyWrite":[],"allowGitConfig":true}}' > /tmp/gitlab_duo_agent_platform/srt-settings.json
$ echo "Testing SRT sandbox capabilities..."
Testing SRT sandbox capabilities...次のエラーがランタイム時に発生する可能性があり、これはSRTの依存関係が利用できないことを示している場合があります:
Warning: SRT found but can't create sandbox (insufficient privileges), running command directlyこれを解決するには、次の手順に従います:
次のコマンドを使用して、bashでイメージを検証します:
docker run --rm -it <image>:<tag> /bin/bashsrtを使用します:srt ls次のエラーが表示された場合、カスタムイメージに追加の依存関係をインストールする必要があります:
Error: Sandbox dependencies are not available on this system. Required: ripgrep (rg), bubblewrap (bwrap), and socat.
ネットワークおよびファイルシステムの制限
実行環境サンドボックスを適用すると、次の制限が適用されます。
サンドボックス設定を構成する
サンドボックスの設定の一部を構成するには、agent-config.ymlファイルを使用します。
デフォルトでは、サンドボックスは次の設定へのアクセスを許可します:
- デフォルトで許可されたドメイン。これらは自動的に設定され、変更または更新することはできません。
環境変数
DAPおよびGit操作の実行に必要な環境変数とパラメータのみがサンドボックス環境からアクセス可能です。
ファイルシステム設定
サンドボックスでは、次のファイルシステムの制限が適用されます:
- 読み取り制限: SSHキー(
~/.ssh)へのアクセスはブロックされます。 - 書き込み許可: 現在のディレクトリ(
./)および一時ディレクトリ(/tmp/gitlab_duo_agent_platform)。 - Git設定へのアクセス: 許可されます。
ネットワークポリシーを構成する
SRTはデフォルトでGitLabが提供するDockerイメージに含まれています。また、カスタムイメージにSRTをインストールすることもできます。
SRTがインストールされている場合、フローはデフォルトで次のドメインのみにアクセスできます。これらのドメインは常に許可されており、削除することはできません:
localhosthost.docker.internal- お使いのGitLabインスタンスドメイン(例:
gitlab.com,*.gitlab.com) - The GitLab DuoワークフローService domain
SRTを使用しないカスタムイメージを使用する場合、ネットワーク制限は適用されず、フローはRunnerから到達可能な任意のドメインにアクセスできます。
追加のドメインを許可または拒否するには、network_policyをagent-config.ymlファイルに追加します。
network_policyは、allowed_domainsまたはdenied_domainsで"*"を許可しません。SRTは、すべてのネットワークトラフィックを有効にすることをサポートしていません。ただし、ドメインの一部としてワイルドカードは許可されます。例: "*.domain.com"。
network_policy:
include_recommended_allowed: true # default: false
allow_all_unix_sockets: true # default: false
allowed_domains:
- my-own-site.com
denied_domains:
- malicious.comUnixソケットアクセスを許可
allow_all_unix_sockets設定を使用して、ホスト上のすべてのUnixドメインソケットへのフローアクセスを許可します。これはデフォルトで無効になっています。
allow_all_unix_socketsを有効にすると、すべてのUnixソケットへのアクセスが許可されます。これは必要な場合、かつ信頼できる環境でのみ有効にしてください。
許可されたドメインを有効にする
パッケージレジストリや開発ツールで使用される外部ドメインへのフローアクセスを許可するには、include_recommended_allowed設定を有効にします。
この設定はデフォルトで無効になっています(false)。これを有効にするには、agent-config.ymlファイルでinclude_recommended_allowedをtrueに設定します。
include_recommended_allowedを有効にすると、広範な外部ドメインへのネットワークアクセスが許可されます。これらのエグレスエンドポイントは、環境からデータを抜き出すために悪用される可能性があります。これは必要な場合、かつ信頼できる環境でのみ有効にしてください。
この設定は、以下のドメインへのアクセスを有効にします:
github.comwww.github.comapi.github.comnpm.pkg.github.comraw.githubusercontent.compkg-npm.githubusercontent.comobjects.githubusercontent.comcodeload.github.comavatars.githubusercontent.comcamo.githubusercontent.comgist.github.comgitlab.comwww.gitlab.comregistry.gitlab.combitbucket.orgwww.bitbucket.orgapi.bitbucket.orgregistry-1.docker.ioauth.docker.ioindex.docker.iohub.docker.comwww.docker.comproduction.cloudflare.docker.comdownload.docker.comgcr.io*.gcr.ioghcr.iomcr.microsoft.com*.data.mcr.microsoft.compublic.ecr.awscloud.google.comaccounts.google.comgcloud.google.comstorage.googleapis.comcompute.googleapis.comcontainer.googleapis.comartifactregistry.googleapis.comcloudresourcemanager.googleapis.comoauth2.googleapis.comwww.googleapis.comlogin.microsoftonline.compackages.microsoft.comdotnet.microsoft.comdot.netdev.azure.coms3.amazonaws.com*.s3.amazonaws.com*.codeartifact.amazonaws.com*.s3.api.aws*.codeartifact.api.awsdownload.oracle.comyum.oracle.comregistry.npmjs.orgwww.npmjs.comwww.npmjs.orgnpmjs.comnpmjs.orgyarnpkg.comregistry.yarnpkg.compypi.orgwww.pypi.orgfiles.pythonhosted.orgpythonhosted.orgtest.pypi.orgpypi.python.orgpypa.iowww.pypa.iorubygems.orgwww.rubygems.orgapi.rubygems.orgindex.rubygems.orgruby-lang.orgwww.ruby-lang.orgrubyonrails.orgwww.rubyonrails.orgrvm.ioget.rvm.iocrates.iowww.crates.ioindex.crates.iostatic.crates.iorustup.rsstatic.rust-lang.orgwww.rust-lang.orgproxy.golang.orgsum.golang.orgindex.golang.orggolang.orgwww.golang.orggoproxy.iopkg.go.devmaven.orgrepo.maven.orgcentral.maven.orgrepo1.maven.orgjcenter.bintray.comgradle.orgwww.gradle.orgservices.gradle.orgplugins.gradle.orgkotlin.orgwww.kotlin.orgspring.iorepo.spring.iopackagist.orgwww.packagist.orgrepo.packagist.orgnuget.orgwww.nuget.orgapi.nuget.orgpub.devapi.pub.devhex.pmwww.hex.pmcpan.orgwww.cpan.orgmetacpan.orgwww.metacpan.orgapi.metacpan.orgcocoapods.orgwww.cocoapods.orgcdn.cocoapods.orghaskell.orgwww.haskell.orghackage.haskell.orgswift.orgwww.swift.orgarchive.ubuntu.comsecurity.ubuntu.comubuntu.comwww.ubuntu.com*.ubuntu.comppa.launchpad.netlaunchpad.netwww.launchpad.netdl.k8s.iopkgs.k8s.iok8s.iowww.k8s.ioreleases.hashicorp.comapt.releases.hashicorp.comrpm.releases.hashicorp.comarchive.releases.hashicorp.comhashicorp.comwww.hashicorp.comrepo.anaconda.comconda.anaconda.organaconda.orgwww.anaconda.comanaconda.comcontinuum.ioapache.orgwww.apache.orgarchive.apache.orgdownloads.apache.orgeclipse.orgwww.eclipse.orgdownload.eclipse.orgnodejs.orgwww.nodejs.orgsourceforge.net*.sourceforge.netpackagecloud.io*.packagecloud.iojson-schema.orgwww.json-schema.orgjson.schemastore.orgwww.schemastore.org*.modelcontextprotocol.io
警告およびフォールバック動作
サンドボックスが利用できない、または適用できない場合:
- フローはサンドボックス保護なしで直接実行される
- CIジョブログ内に警告メッセージが表示され、Runner設定ガイダンスへのリンクが提示される
これにより、サンドボックスを有効にできない場合でもフローの実行が継続され、状況が通知されます。