InfoGrab Docs

원격 실행 환경 샌드박스

요약

실행 환경 샌드박스는 애플리케이션 수준의 네트워크 및 파일시스템 격리를 제공하여 GitLab Duo Agent Platform 원격 플로우를 무단 네트워크 접근 및 데이터 유출로부터 보호하는 데 도움이 됩니다. 실행 환경 샌드박스는 Anthropic Sandbox Runtime (SRT)이 설치된 호환 Docker 이미지를 사용할 때 자동으로 적용됩니다.

히스토리
  • GitLab 18.7에서 ai_duo_agent_platform_network_firewallai_dap_executor_connects_over_ws라는 플래그와 함께 도입.
  • GitLab 18.7에서 기능 플래그 ai_duo_agent_platform_network_firewall 활성화.
  • GitLab 18.7에서 기능 플래그 ai_dap_executor_connects_over_ws 활성화.
  • GitLab 18.8에서 일반 공개.
  • GitLab 18.10에서 network_policy 설정 도입.
  • GitLab 18.11에서 allow_all_unix_sockets 네트워크 정책 설정 도입.
  • GitLab 18.11에서 인스턴스 수준 및 그룹 수준 네트워크 액세스 제어가 dap_instance_network_access_controlsdap_group_network_access_controls라는 기능 플래그와 함께 도입. 기본적으로 비활성화됨.

실행 환경 샌드박스는 애플리케이션 수준의 네트워크 및 파일시스템 격리를 제공하여 GitLab Duo Agent Platform 원격 플로우를 무단 네트워크 접근 및 데이터 유출로부터 보호하는 데 도움이 됩니다. 데이터 유출 시도, 외부 소스에서 악성 코드 로딩, 합법적인 플로우 작업에 필요한 연결을 유지하면서 무단 데이터 수집을 방지하도록 설계되었습니다.

샌드박스가 적용되는 시점#

실행 환경 샌드박스는 Anthropic Sandbox Runtime (SRT)이 설치된 호환 Docker 이미지를 사용할 때 자동으로 적용됩니다. 여기에는 기본 GitLab Docker 이미지(릴리스 v0.0.6 이상)를 사용하거나 SRT가 설치된 커스텀 이미지를 사용하는 것이 포함됩니다.

샌드박스는 다음 경우에 활성화됩니다:

  • Anthropic Sandbox Runtime (SRT)이 Docker 이미지에서 사용 가능한 경우.
  • GitLab Duo Agent Platform 세션이 러너에서 실행 중인 경우(로컬 환경은 샌드박스화되지 않음).

기본 및 커스텀 이미지 구성 간의 CI/CD 변수 차이에 대한 정보는 플로우 실행 변수를 참조하세요.

사전 요구 사항#

실행 환경 샌드박스를 사용하려면 다음이 필요합니다:

작동 방식#

실행 환경 샌드박스는 Anthropic Sandbox Runtime (SRT)를 사용하여 다음 보호 기능으로 플로우 실행을 래핑합니다:

  • 네트워크 격리: 모든 네트워크 요청이 실행 환경을 떠나기 전에 가로채어 허용된 도메인 목록에 대해 유효성을 검사합니다.
  • 파일시스템 제한: 특정 디렉토리에 대한 읽기 및 쓰기 접근을 제한하고 민감한 파일에 대한 접근을 차단합니다.
  • 우아한 폴백: SRT를 사용할 수 없거나 필요한 운영 체제 권한이 없는 경우 플로우가 경고 메시지와 함께 직접 실행됩니다.

커스텀 이미지에 Anthropic Sandbox Runtime (SRT) 설치#

agent-config.yml을 사용한 커스텀 이미지를 사용하는 경우 환경에 Anthropic SRT 버전 0.0.20 이상이 설치되어 있어야 합니다.

SRT는 @anthropic-ai/sandbox-runtime으로 npm을 통해 사용할 수 있습니다. 다음 예시는 Dockerfile의 설치 단계를 보여줍니다:

# 캐시 삭제 및 검증과 함께 srt 샌드박싱 설치
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

런타임 시 러너는 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"],"denyWrite":["/opt/.gitlab-sandbox"],"allowGitConfig":true}}' > /opt/.gitlab-sandbox/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

이를 해결하려면:

  1. bash를 사용하여 다음 명령으로 이미지를 확인하세요:

    docker run --rm -it <image>:<tag> /bin/bash
    
  2. srt를 사용하세요:

    srt ls
    
  3. 다음 오류가 표시되면 커스텀 이미지에 추가 종속성을 설치해야 합니다:

    Error: Sandbox dependencies are not available on this system. Required: ripgrep (rg), bubblewrap (bwrap), and socat.
    

네트워크 및 파일시스템 제한#

실행 환경 샌드박스가 적용되면 다음 제한이 적용됩니다.

샌드박스 설정 구성#

agent-config.yml 파일을 사용하여 일부 샌드박스 설정을 구성하세요.

기본적으로 샌드박스는 다음 구성에 대한 접근을 허용합니다:

  • 기본 허용 도메인. 자동으로 구성되며 변경하거나 업데이트할 수 없습니다.

환경 변수#

샌드박스 환경에서는 DAP 및 Git 작업 실행에 필요한 환경 변수와 파라미터만 접근 가능합니다.

파일시스템 구성#

샌드박스는 다음 파일시스템 제한을 적용합니다:

  • 읽기 제한: SSH 키(~/.ssh)가 차단됩니다.
  • 쓰기 허용: 현재 디렉토리(./) 및 /tmp.
  • 쓰기 제한: /opt/.gitlab-sandbox (샌드박스 설정과 같은 플랫폼 내부 파일에 사용).
  • Git 구성 접근: 허용됨.

네트워크 정책 구성#

SRT는 GitLab에서 제공하는 기본 Docker 이미지에 포함되어 있습니다. 커스텀 이미지에 SRT를 설치할 수도 있습니다.

SRT가 설치된 경우 플로우는 기본적으로 다음 도메인에만 접근할 수 있습니다. 이 도메인들은 항상 허용되며 제거할 수 없습니다:

  • localhost
  • host.docker.internal
  • GitLab 인스턴스 도메인(예: gitlab.com, *.gitlab.com)
  • GitLab Duo Workflow Service 도메인

SRT 없이 커스텀 이미지를 사용하는 경우 네트워크 제한이 적용되지 않으며 플로우는 러너에서 접근 가능한 모든 도메인에 접근할 수 있습니다.

Note

network_policyallowed_domains 또는 denied_domains에서 "*"를 허용하지 않습니다. SRT는 모든 네트워크 트래픽 켜기를 지원하지 않습니다. 그러나 와일드카드는 도메인의 일부로 허용됩니다. 예: "*.domain.com".

관리자 네트워크 정책 제어#

GitLab.com의 최상위 그룹 소유자 또는 GitLab Self-Managed의 인스턴스 관리자가 네트워크 액세스 제어를 구성하면 해당 설정이 모든 플로우의 기본 정책을 정의합니다. 프로젝트가 네트워크 샌드박스 설정을 확장하도록 허용 체크박스는 프로젝트 소유자가 agent-config.yml에서 설정을 구성할 때 어떤 설정이 적용되는지 결정합니다.

유연한 모드 (프로젝트가 네트워크 샌드박스 설정을 확장하도록 허용 활성화):

  • agent-config.ymlallowed_domains가 관리자 허용 목록과 병합됩니다.

  • agent-config.ymldenied_domains가 관리자 거부 목록과 병합됩니다.

  • agent-config.ymlinclude_recommended_allowed가 관리자 설정을 재정의합니다.

  • agent-config.ymlallow_all_unix_sockets가 관리자 설정을 재정의합니다.

엄격한 모드 (프로젝트가 네트워크 샌드박스 설정을 확장하도록 허용 비활성화):

  • agent-config.ymldenied_domains가 관리자 거부 목록과 병합됩니다.

  • include_recommended_allowed는 관리자가 활성화한 설정을 강화하기 위해 false로만 설정할 수 있습니다. 관리자가 비활성화한 경우에는 효과가 없습니다.

  • allow_all_unix_sockets는 관리자가 활성화한 설정을 강화하기 위해 false로만 설정할 수 있습니다. 관리자가 비활성화한 경우에는 효과가 없습니다.

  • agent-config.ymlallowed_domains는 무시됩니다.

프로젝트 수준 설정 구성#

추가 도메인을 허용하거나 거부하려면 agent-config.yml 파일에 network_policy를 추가하세요:

network_policy:
  include_recommended_allowed: true # 기본값: false
  allow_all_unix_sockets: true      # 기본값: false
  allowed_domains:
    - my-own-site.com
  denied_domains:
    - malicious.com

Unix 소켓 접근 허용#

allow_all_unix_sockets 설정을 사용하여 플로우가 호스트의 모든 Unix 도메인 소켓에 접근할 수 있도록 합니다. 기본적으로 비활성화되어 있습니다.

Warning

allow_all_unix_sockets를 활성화하면 모든 Unix 소켓에 대한 접근이 허용됩니다. 필요한 경우에만 신뢰할 수 있는 환경에서만 활성화하세요.

인스턴스 또는 그룹에 대한 네트워크 액세스 제어 구성#

History

  • GitLab 18.11에서 dap_instance_network_access_controlsdap_group_network_access_controls라는 기능 플래그와 함께 도입. 기본적으로 비활성화됨.

    이 기능의 가용성은 기능 플래그로 제어됩니다. 자세한 내용은 이력을 참조합니다. 이 기능은 테스트용으로 사용할 수 있지만 프로덕션 사용 준비가 되지 않았습니다.

    프로젝트 수준 agent-config.yml 설정 외에도 관리자 및 최상위 그룹 소유자는 GitLab UI를 통해 네트워크 액세스 제어를 관리할 수 있습니다. 이 설정은 인스턴스 수준(GitLab Self-Managed) 또는 최상위 그룹 수준(GitLab.com)에 저장되며 하위의 모든 프로젝트에 상속됩니다.

이러한 설정이 프로젝트 수준 agent-config.yml과 어떻게 결합되는지에 대한 설명은 관리자 네트워크 정책 제어를 참조하세요.

인스턴스 수준 네트워크 액세스 제어 구성#

전제 조건:

  • 관리자여야 합니다.

인스턴스 수준 네트워크 액세스 제어를 구성하려면:

  • 오른쪽 상단에서 관리자를 선택합니다.

  • 왼쪽 사이드바에서 GitLab Duo를 선택합니다.

  • 구성 변경을 선택합니다.

  • 데이터 및 개인 정보, 네트워크 액세스 섹션에서 다음 설정을 구성합니다:

허용 목록에 권장 도메인 포함: 활성화하면 일반적으로 필요한 도메인의 엄선된 목록이 허용 목록에 자동으로 포함됩니다.

  • 모든 Unix 소켓 허용: 활성화하면 에이전트 플랫폼 작업에 대한 모든 Unix 소켓 연결이 허용됩니다.

  • 프로젝트가 네트워크 샌드박스 설정을 확장하도록 허용: 활성화하면 프로젝트 메인테이너가 agent-config.yml 파일을 통해 허용 목록에 추가 도메인을 추가하고, 모든 Unix 소켓을 허용하고, 권장 도메인을 포함할 수 있습니다.

  • 선택 사항. 허용 도메인 카드를 사용하여 허용 목록에서 특정 도메인을 추가하거나 제거합니다.

  • 선택 사항. 차단 도메인 카드를 사용하여 거부 목록에서 특정 도메인을 추가하거나 제거합니다.

  • 변경 사항 저장을 선택합니다.

최상위 그룹 네트워크 액세스 제어 구성 (GitLab.com)#

전제 조건:

  • 최상위 그룹에 대한 Owner 역할이 있어야 합니다.

  • 그룹은 GitLab.com의 최상위 그룹이어야 합니다. 하위 그룹은 최상위 그룹의 설정을 상속합니다.

그룹 수준 네트워크 액세스 제어를 구성하려면:

  • 상단 표시줄에서 검색 또는 이동을 선택하고 최상위 그룹을 찾습니다.

  • 왼쪽 사이드바에서 설정, GitLab Duo를 선택합니다.

  • 구성 변경을 선택합니다.

  • 데이터 및 개인 정보, 네트워크 액세스 섹션에서 인스턴스 수준 네트워크 액세스 제어 구성에 설명된 것과 동일한 설정을 구성합니다.

  • 변경 사항 저장을 선택합니다.

관련 API 리소스#

허용 도메인 켜기#

패키지 레지스트리 및 개발 도구에 사용되는 외부 도메인 세트에 대한 접근을 플로우에 부여하려면 include_recommended_allowed 설정을 켭니다.

이 설정은 기본적으로 비활성화되어 있습니다(false). 켜려면 agent-config.yml 파일에서 include_recommended_allowedtrue로 설정합니다.

네트워크 액세스 제어가 엄격한 모드에서 활성화된 경우(프로젝트가 네트워크 샌드박스 설정을 확장하도록 허용 비활성화), include_recommended_allowed만 비활성화할 수 있습니다. 관리자가 비활성화한 경우 true로 설정해도 효과가 없습니다.

Warning

include_recommended_allowed를 활성화하면 광범위한 외부 도메인으로의 네트워크 접근이 허용됩니다. 이러한 이그레스 엔드포인트는 환경에서 데이터를 유출하는 데 사용될 수 있습니다. 필요한 경우에만 신뢰할 수 있는 환경에서만 활성화하세요.

이 설정은 다음 도메인에 대한 접근을 허용합니다:

  • github.com
  • www.github.com
  • api.github.com
  • npm.pkg.github.com
  • raw.githubusercontent.com
  • pkg-npm.githubusercontent.com
  • objects.githubusercontent.com
  • codeload.github.com
  • avatars.githubusercontent.com
  • camo.githubusercontent.com
  • gist.github.com
  • gitlab.com
  • www.gitlab.com
  • registry.gitlab.com
  • bitbucket.org
  • www.bitbucket.org
  • api.bitbucket.org
  • registry-1.docker.io
  • auth.docker.io
  • index.docker.io
  • hub.docker.com
  • www.docker.com
  • production.cloudflare.docker.com
  • download.docker.com
  • gcr.io
  • *.gcr.io
  • ghcr.io
  • mcr.microsoft.com
  • *.data.mcr.microsoft.com
  • public.ecr.aws
  • cloud.google.com
  • accounts.google.com
  • gcloud.google.com
  • storage.googleapis.com
  • compute.googleapis.com
  • container.googleapis.com
  • artifactregistry.googleapis.com
  • cloudresourcemanager.googleapis.com
  • oauth2.googleapis.com
  • www.googleapis.com
  • login.microsoftonline.com
  • packages.microsoft.com
  • dotnet.microsoft.com
  • dot.net
  • dev.azure.com
  • s3.amazonaws.com
  • *.s3.amazonaws.com
  • *.codeartifact.amazonaws.com
  • *.s3.api.aws
  • *.codeartifact.api.aws
  • download.oracle.com
  • yum.oracle.com
  • registry.npmjs.org
  • www.npmjs.com
  • www.npmjs.org
  • npmjs.com
  • npmjs.org
  • yarnpkg.com
  • registry.yarnpkg.com
  • pypi.org
  • www.pypi.org
  • files.pythonhosted.org
  • pythonhosted.org
  • test.pypi.org
  • pypi.python.org
  • pypa.io
  • www.pypa.io
  • rubygems.org
  • www.rubygems.org
  • api.rubygems.org
  • index.rubygems.org
  • ruby-lang.org
  • www.ruby-lang.org
  • rubyonrails.org
  • www.rubyonrails.org
  • rvm.io
  • get.rvm.io
  • crates.io
  • www.crates.io
  • index.crates.io
  • static.crates.io
  • rustup.rs
  • static.rust-lang.org
  • www.rust-lang.org
  • proxy.golang.org
  • sum.golang.org
  • index.golang.org
  • golang.org
  • www.golang.org
  • goproxy.io
  • pkg.go.dev
  • maven.org
  • repo.maven.org
  • central.maven.org
  • repo1.maven.org
  • jcenter.bintray.com
  • gradle.org
  • www.gradle.org
  • services.gradle.org
  • plugins.gradle.org
  • kotlin.org
  • www.kotlin.org
  • spring.io
  • repo.spring.io
  • packagist.org
  • www.packagist.org
  • repo.packagist.org
  • nuget.org
  • www.nuget.org
  • api.nuget.org
  • pub.dev
  • api.pub.dev
  • hex.pm
  • www.hex.pm
  • cpan.org
  • www.cpan.org
  • metacpan.org
  • www.metacpan.org
  • api.metacpan.org
  • cocoapods.org
  • www.cocoapods.org
  • cdn.cocoapods.org
  • haskell.org
  • www.haskell.org
  • hackage.haskell.org
  • swift.org
  • www.swift.org
  • archive.ubuntu.com
  • security.ubuntu.com
  • ubuntu.com
  • www.ubuntu.com
  • *.ubuntu.com
  • ppa.launchpad.net
  • launchpad.net
  • www.launchpad.net
  • dl.k8s.io
  • pkgs.k8s.io
  • k8s.io
  • www.k8s.io
  • releases.hashicorp.com
  • apt.releases.hashicorp.com
  • rpm.releases.hashicorp.com
  • archive.releases.hashicorp.com
  • hashicorp.com
  • www.hashicorp.com
  • repo.anaconda.com
  • conda.anaconda.org
  • anaconda.org
  • www.anaconda.com
  • anaconda.com
  • continuum.io
  • apache.org
  • www.apache.org
  • archive.apache.org
  • downloads.apache.org
  • eclipse.org
  • www.eclipse.org
  • download.eclipse.org
  • nodejs.org
  • www.nodejs.org
  • sourceforge.net
  • *.sourceforge.net
  • packagecloud.io
  • *.packagecloud.io
  • json-schema.org
  • www.json-schema.org
  • json.schemastore.org
  • www.schemastore.org
  • *.modelcontextprotocol.io

경고 및 폴백 동작#

샌드박싱을 사용할 수 없거나 적용할 수 없는 경우:

  • 플로우가 샌드박스 보호 없이 직접 실행됩니다.
  • 러너 구성 지침 링크가 포함된 경고 메시지가 CI 작업 로그에 표시됩니다.

이렇게 하면 샌드박싱을 활성화할 수 없는 경우에도 플로우가 계속 실행되는 동시에 상황을 알릴 수 있습니다.

원격 실행 환경 샌드박스

원문 보기
요약

실행 환경 샌드박스는 애플리케이션 수준의 네트워크 및 파일시스템 격리를 제공하여 GitLab Duo Agent Platform 원격 플로우를 무단 네트워크 접근 및 데이터 유출로부터 보호하는 데 도움이 됩니다. 실행 환경 샌드박스는 Anthropic Sandbox Runtime (SRT)이 설치된 호환 Docker 이미지를 사용할 때 자동으로 적용됩니다.

히스토리
  • GitLab 18.7에서 ai_duo_agent_platform_network_firewallai_dap_executor_connects_over_ws라는 플래그와 함께 도입.
  • GitLab 18.7에서 기능 플래그 ai_duo_agent_platform_network_firewall 활성화.
  • GitLab 18.7에서 기능 플래그 ai_dap_executor_connects_over_ws 활성화.
  • GitLab 18.8에서 일반 공개.
  • GitLab 18.10에서 network_policy 설정 도입.
  • GitLab 18.11에서 allow_all_unix_sockets 네트워크 정책 설정 도입.
  • GitLab 18.11에서 인스턴스 수준 및 그룹 수준 네트워크 액세스 제어가 dap_instance_network_access_controlsdap_group_network_access_controls라는 기능 플래그와 함께 도입. 기본적으로 비활성화됨.

실행 환경 샌드박스는 애플리케이션 수준의 네트워크 및 파일시스템 격리를 제공하여 GitLab Duo Agent Platform 원격 플로우를 무단 네트워크 접근 및 데이터 유출로부터 보호하는 데 도움이 됩니다. 데이터 유출 시도, 외부 소스에서 악성 코드 로딩, 합법적인 플로우 작업에 필요한 연결을 유지하면서 무단 데이터 수집을 방지하도록 설계되었습니다.

샌드박스가 적용되는 시점#

실행 환경 샌드박스는 Anthropic Sandbox Runtime (SRT)이 설치된 호환 Docker 이미지를 사용할 때 자동으로 적용됩니다. 여기에는 기본 GitLab Docker 이미지(릴리스 v0.0.6 이상)를 사용하거나 SRT가 설치된 커스텀 이미지를 사용하는 것이 포함됩니다.

샌드박스는 다음 경우에 활성화됩니다:

  • Anthropic Sandbox Runtime (SRT)이 Docker 이미지에서 사용 가능한 경우.
  • GitLab Duo Agent Platform 세션이 러너에서 실행 중인 경우(로컬 환경은 샌드박스화되지 않음).

기본 및 커스텀 이미지 구성 간의 CI/CD 변수 차이에 대한 정보는 플로우 실행 변수를 참조하세요.

사전 요구 사항#

실행 환경 샌드박스를 사용하려면 다음이 필요합니다:

작동 방식#

실행 환경 샌드박스는 Anthropic Sandbox Runtime (SRT)를 사용하여 다음 보호 기능으로 플로우 실행을 래핑합니다:

  • 네트워크 격리: 모든 네트워크 요청이 실행 환경을 떠나기 전에 가로채어 허용된 도메인 목록에 대해 유효성을 검사합니다.
  • 파일시스템 제한: 특정 디렉토리에 대한 읽기 및 쓰기 접근을 제한하고 민감한 파일에 대한 접근을 차단합니다.
  • 우아한 폴백: SRT를 사용할 수 없거나 필요한 운영 체제 권한이 없는 경우 플로우가 경고 메시지와 함께 직접 실행됩니다.

커스텀 이미지에 Anthropic Sandbox Runtime (SRT) 설치#

agent-config.yml을 사용한 커스텀 이미지를 사용하는 경우 환경에 Anthropic SRT 버전 0.0.20 이상이 설치되어 있어야 합니다.

SRT는 @anthropic-ai/sandbox-runtime으로 npm을 통해 사용할 수 있습니다. 다음 예시는 Dockerfile의 설치 단계를 보여줍니다:

# 캐시 삭제 및 검증과 함께 srt 샌드박싱 설치
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

런타임 시 러너는 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"],"denyWrite":["/opt/.gitlab-sandbox"],"allowGitConfig":true}}' > /opt/.gitlab-sandbox/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

이를 해결하려면:

  1. bash를 사용하여 다음 명령으로 이미지를 확인하세요:

    docker run --rm -it <image>:<tag> /bin/bash
    
  2. srt를 사용하세요:

    srt ls
    
  3. 다음 오류가 표시되면 커스텀 이미지에 추가 종속성을 설치해야 합니다:

    Error: Sandbox dependencies are not available on this system. Required: ripgrep (rg), bubblewrap (bwrap), and socat.
    

네트워크 및 파일시스템 제한#

실행 환경 샌드박스가 적용되면 다음 제한이 적용됩니다.

샌드박스 설정 구성#

agent-config.yml 파일을 사용하여 일부 샌드박스 설정을 구성하세요.

기본적으로 샌드박스는 다음 구성에 대한 접근을 허용합니다:

  • 기본 허용 도메인. 자동으로 구성되며 변경하거나 업데이트할 수 없습니다.

환경 변수#

샌드박스 환경에서는 DAP 및 Git 작업 실행에 필요한 환경 변수와 파라미터만 접근 가능합니다.

파일시스템 구성#

샌드박스는 다음 파일시스템 제한을 적용합니다:

  • 읽기 제한: SSH 키(~/.ssh)가 차단됩니다.
  • 쓰기 허용: 현재 디렉토리(./) 및 /tmp.
  • 쓰기 제한: /opt/.gitlab-sandbox (샌드박스 설정과 같은 플랫폼 내부 파일에 사용).
  • Git 구성 접근: 허용됨.

네트워크 정책 구성#

SRT는 GitLab에서 제공하는 기본 Docker 이미지에 포함되어 있습니다. 커스텀 이미지에 SRT를 설치할 수도 있습니다.

SRT가 설치된 경우 플로우는 기본적으로 다음 도메인에만 접근할 수 있습니다. 이 도메인들은 항상 허용되며 제거할 수 없습니다:

  • localhost
  • host.docker.internal
  • GitLab 인스턴스 도메인(예: gitlab.com, *.gitlab.com)
  • GitLab Duo Workflow Service 도메인

SRT 없이 커스텀 이미지를 사용하는 경우 네트워크 제한이 적용되지 않으며 플로우는 러너에서 접근 가능한 모든 도메인에 접근할 수 있습니다.

Note

network_policyallowed_domains 또는 denied_domains에서 "*"를 허용하지 않습니다. SRT는 모든 네트워크 트래픽 켜기를 지원하지 않습니다. 그러나 와일드카드는 도메인의 일부로 허용됩니다. 예: "*.domain.com".

관리자 네트워크 정책 제어#

GitLab.com의 최상위 그룹 소유자 또는 GitLab Self-Managed의 인스턴스 관리자가 네트워크 액세스 제어를 구성하면 해당 설정이 모든 플로우의 기본 정책을 정의합니다. 프로젝트가 네트워크 샌드박스 설정을 확장하도록 허용 체크박스는 프로젝트 소유자가 agent-config.yml에서 설정을 구성할 때 어떤 설정이 적용되는지 결정합니다.

유연한 모드 (프로젝트가 네트워크 샌드박스 설정을 확장하도록 허용 활성화):

  • agent-config.ymlallowed_domains가 관리자 허용 목록과 병합됩니다.

  • agent-config.ymldenied_domains가 관리자 거부 목록과 병합됩니다.

  • agent-config.ymlinclude_recommended_allowed가 관리자 설정을 재정의합니다.

  • agent-config.ymlallow_all_unix_sockets가 관리자 설정을 재정의합니다.

엄격한 모드 (프로젝트가 네트워크 샌드박스 설정을 확장하도록 허용 비활성화):

  • agent-config.ymldenied_domains가 관리자 거부 목록과 병합됩니다.

  • include_recommended_allowed는 관리자가 활성화한 설정을 강화하기 위해 false로만 설정할 수 있습니다. 관리자가 비활성화한 경우에는 효과가 없습니다.

  • allow_all_unix_sockets는 관리자가 활성화한 설정을 강화하기 위해 false로만 설정할 수 있습니다. 관리자가 비활성화한 경우에는 효과가 없습니다.

  • agent-config.ymlallowed_domains는 무시됩니다.

프로젝트 수준 설정 구성#

추가 도메인을 허용하거나 거부하려면 agent-config.yml 파일에 network_policy를 추가하세요:

network_policy:
  include_recommended_allowed: true # 기본값: false
  allow_all_unix_sockets: true      # 기본값: false
  allowed_domains:
    - my-own-site.com
  denied_domains:
    - malicious.com

Unix 소켓 접근 허용#

allow_all_unix_sockets 설정을 사용하여 플로우가 호스트의 모든 Unix 도메인 소켓에 접근할 수 있도록 합니다. 기본적으로 비활성화되어 있습니다.

Warning

allow_all_unix_sockets를 활성화하면 모든 Unix 소켓에 대한 접근이 허용됩니다. 필요한 경우에만 신뢰할 수 있는 환경에서만 활성화하세요.

인스턴스 또는 그룹에 대한 네트워크 액세스 제어 구성#

History

  • GitLab 18.11에서 dap_instance_network_access_controlsdap_group_network_access_controls라는 기능 플래그와 함께 도입. 기본적으로 비활성화됨.

    이 기능의 가용성은 기능 플래그로 제어됩니다. 자세한 내용은 이력을 참조합니다. 이 기능은 테스트용으로 사용할 수 있지만 프로덕션 사용 준비가 되지 않았습니다.

    프로젝트 수준 agent-config.yml 설정 외에도 관리자 및 최상위 그룹 소유자는 GitLab UI를 통해 네트워크 액세스 제어를 관리할 수 있습니다. 이 설정은 인스턴스 수준(GitLab Self-Managed) 또는 최상위 그룹 수준(GitLab.com)에 저장되며 하위의 모든 프로젝트에 상속됩니다.

이러한 설정이 프로젝트 수준 agent-config.yml과 어떻게 결합되는지에 대한 설명은 관리자 네트워크 정책 제어를 참조하세요.

인스턴스 수준 네트워크 액세스 제어 구성#

전제 조건:

  • 관리자여야 합니다.

인스턴스 수준 네트워크 액세스 제어를 구성하려면:

  • 오른쪽 상단에서 관리자를 선택합니다.

  • 왼쪽 사이드바에서 GitLab Duo를 선택합니다.

  • 구성 변경을 선택합니다.

  • 데이터 및 개인 정보, 네트워크 액세스 섹션에서 다음 설정을 구성합니다:

허용 목록에 권장 도메인 포함: 활성화하면 일반적으로 필요한 도메인의 엄선된 목록이 허용 목록에 자동으로 포함됩니다.

  • 모든 Unix 소켓 허용: 활성화하면 에이전트 플랫폼 작업에 대한 모든 Unix 소켓 연결이 허용됩니다.

  • 프로젝트가 네트워크 샌드박스 설정을 확장하도록 허용: 활성화하면 프로젝트 메인테이너가 agent-config.yml 파일을 통해 허용 목록에 추가 도메인을 추가하고, 모든 Unix 소켓을 허용하고, 권장 도메인을 포함할 수 있습니다.

  • 선택 사항. 허용 도메인 카드를 사용하여 허용 목록에서 특정 도메인을 추가하거나 제거합니다.

  • 선택 사항. 차단 도메인 카드를 사용하여 거부 목록에서 특정 도메인을 추가하거나 제거합니다.

  • 변경 사항 저장을 선택합니다.

최상위 그룹 네트워크 액세스 제어 구성 (GitLab.com)#

전제 조건:

  • 최상위 그룹에 대한 Owner 역할이 있어야 합니다.

  • 그룹은 GitLab.com의 최상위 그룹이어야 합니다. 하위 그룹은 최상위 그룹의 설정을 상속합니다.

그룹 수준 네트워크 액세스 제어를 구성하려면:

  • 상단 표시줄에서 검색 또는 이동을 선택하고 최상위 그룹을 찾습니다.

  • 왼쪽 사이드바에서 설정, GitLab Duo를 선택합니다.

  • 구성 변경을 선택합니다.

  • 데이터 및 개인 정보, 네트워크 액세스 섹션에서 인스턴스 수준 네트워크 액세스 제어 구성에 설명된 것과 동일한 설정을 구성합니다.

  • 변경 사항 저장을 선택합니다.

관련 API 리소스#

허용 도메인 켜기#

패키지 레지스트리 및 개발 도구에 사용되는 외부 도메인 세트에 대한 접근을 플로우에 부여하려면 include_recommended_allowed 설정을 켭니다.

이 설정은 기본적으로 비활성화되어 있습니다(false). 켜려면 agent-config.yml 파일에서 include_recommended_allowedtrue로 설정합니다.

네트워크 액세스 제어가 엄격한 모드에서 활성화된 경우(프로젝트가 네트워크 샌드박스 설정을 확장하도록 허용 비활성화), include_recommended_allowed만 비활성화할 수 있습니다. 관리자가 비활성화한 경우 true로 설정해도 효과가 없습니다.

Warning

include_recommended_allowed를 활성화하면 광범위한 외부 도메인으로의 네트워크 접근이 허용됩니다. 이러한 이그레스 엔드포인트는 환경에서 데이터를 유출하는 데 사용될 수 있습니다. 필요한 경우에만 신뢰할 수 있는 환경에서만 활성화하세요.

이 설정은 다음 도메인에 대한 접근을 허용합니다:

  • github.com
  • www.github.com
  • api.github.com
  • npm.pkg.github.com
  • raw.githubusercontent.com
  • pkg-npm.githubusercontent.com
  • objects.githubusercontent.com
  • codeload.github.com
  • avatars.githubusercontent.com
  • camo.githubusercontent.com
  • gist.github.com
  • gitlab.com
  • www.gitlab.com
  • registry.gitlab.com
  • bitbucket.org
  • www.bitbucket.org
  • api.bitbucket.org
  • registry-1.docker.io
  • auth.docker.io
  • index.docker.io
  • hub.docker.com
  • www.docker.com
  • production.cloudflare.docker.com
  • download.docker.com
  • gcr.io
  • *.gcr.io
  • ghcr.io
  • mcr.microsoft.com
  • *.data.mcr.microsoft.com
  • public.ecr.aws
  • cloud.google.com
  • accounts.google.com
  • gcloud.google.com
  • storage.googleapis.com
  • compute.googleapis.com
  • container.googleapis.com
  • artifactregistry.googleapis.com
  • cloudresourcemanager.googleapis.com
  • oauth2.googleapis.com
  • www.googleapis.com
  • login.microsoftonline.com
  • packages.microsoft.com
  • dotnet.microsoft.com
  • dot.net
  • dev.azure.com
  • s3.amazonaws.com
  • *.s3.amazonaws.com
  • *.codeartifact.amazonaws.com
  • *.s3.api.aws
  • *.codeartifact.api.aws
  • download.oracle.com
  • yum.oracle.com
  • registry.npmjs.org
  • www.npmjs.com
  • www.npmjs.org
  • npmjs.com
  • npmjs.org
  • yarnpkg.com
  • registry.yarnpkg.com
  • pypi.org
  • www.pypi.org
  • files.pythonhosted.org
  • pythonhosted.org
  • test.pypi.org
  • pypi.python.org
  • pypa.io
  • www.pypa.io
  • rubygems.org
  • www.rubygems.org
  • api.rubygems.org
  • index.rubygems.org
  • ruby-lang.org
  • www.ruby-lang.org
  • rubyonrails.org
  • www.rubyonrails.org
  • rvm.io
  • get.rvm.io
  • crates.io
  • www.crates.io
  • index.crates.io
  • static.crates.io
  • rustup.rs
  • static.rust-lang.org
  • www.rust-lang.org
  • proxy.golang.org
  • sum.golang.org
  • index.golang.org
  • golang.org
  • www.golang.org
  • goproxy.io
  • pkg.go.dev
  • maven.org
  • repo.maven.org
  • central.maven.org
  • repo1.maven.org
  • jcenter.bintray.com
  • gradle.org
  • www.gradle.org
  • services.gradle.org
  • plugins.gradle.org
  • kotlin.org
  • www.kotlin.org
  • spring.io
  • repo.spring.io
  • packagist.org
  • www.packagist.org
  • repo.packagist.org
  • nuget.org
  • www.nuget.org
  • api.nuget.org
  • pub.dev
  • api.pub.dev
  • hex.pm
  • www.hex.pm
  • cpan.org
  • www.cpan.org
  • metacpan.org
  • www.metacpan.org
  • api.metacpan.org
  • cocoapods.org
  • www.cocoapods.org
  • cdn.cocoapods.org
  • haskell.org
  • www.haskell.org
  • hackage.haskell.org
  • swift.org
  • www.swift.org
  • archive.ubuntu.com
  • security.ubuntu.com
  • ubuntu.com
  • www.ubuntu.com
  • *.ubuntu.com
  • ppa.launchpad.net
  • launchpad.net
  • www.launchpad.net
  • dl.k8s.io
  • pkgs.k8s.io
  • k8s.io
  • www.k8s.io
  • releases.hashicorp.com
  • apt.releases.hashicorp.com
  • rpm.releases.hashicorp.com
  • archive.releases.hashicorp.com
  • hashicorp.com
  • www.hashicorp.com
  • repo.anaconda.com
  • conda.anaconda.org
  • anaconda.org
  • www.anaconda.com
  • anaconda.com
  • continuum.io
  • apache.org
  • www.apache.org
  • archive.apache.org
  • downloads.apache.org
  • eclipse.org
  • www.eclipse.org
  • download.eclipse.org
  • nodejs.org
  • www.nodejs.org
  • sourceforge.net
  • *.sourceforge.net
  • packagecloud.io
  • *.packagecloud.io
  • json-schema.org
  • www.json-schema.org
  • json.schemastore.org
  • www.schemastore.org
  • *.modelcontextprotocol.io

경고 및 폴백 동작#

샌드박싱을 사용할 수 없거나 적용할 수 없는 경우:

  • 플로우가 샌드박스 보호 없이 직접 실행됩니다.
  • 러너 구성 지침 링크가 포함된 경고 메시지가 CI 작업 로그에 표시됩니다.

이렇게 하면 샌드박싱을 활성화할 수 없는 경우에도 플로우가 계속 실행되는 동시에 상황을 알릴 수 있습니다.