Gateway
멀티테넌트 호스팅
멀티테넌트 호스팅
OpenClaw의 기본 보안 모델은 하나의 공유 Gateway 내부에서 적대적인 멀티테넌트 격리를 제공하는 것이 아니라, Gateway당 하나의 신뢰할 수 있는 운영자 경계를 두는 것입니다. 따라서 신뢰 경계를 공유하지 않는 사용자나 조직을 호스팅하려면 테넌트마다 별도의 완전한 OpenClaw 인스턴스를 실행해야 합니다.
openclaw fleet에서는 격리된 각 인스턴스를 셀이라고 합니다. 셀은 강화된 컨테이너에서 실행되는 완전한 Gateway이며, 자체 상태, 자격 증명, 작업 공간, 채널 계정, 토큰 및 호스트의 루프백 전용 포트를 갖습니다.
Fleet은 실험적 기능입니다. 기능이 안정화되는 동안 명령, 플래그 및 컨테이너 프로필은 지원 중단 유예 기간 없이 릴리스 간에 변경될 수 있습니다.
Fleet은 Linux 및 macOS 호스트에서 테스트됩니다. 현재 Windows 호스트에서는 테스트되지 않았습니다.
각 테넌트에 셀이 필요한 이유
하나의 Gateway 내부에서 인증된 운영자는 신뢰할 수 있는 제어 영역 역할을 맡습니다. 세션 ID는 라우팅 대상을 선택할 뿐, 한 테넌트를 다른 테넌트에 대해 인가하지 않습니다. 에이전트 샌드박싱은 신뢰할 수 없는 콘텐츠와 도구 실행의 영향을 줄일 수 있지만, 하나의 공유 Gateway를 테넌트 인가 경계로 바꾸지는 않습니다.
각 신뢰 도메인이 별도의 Gateway 프로세스, 컨테이너, 영구 상태 트리 및 Gateway 자격 증명을 갖도록 테넌트마다 하나의 셀을 사용하십시오. 이는 Gateway 보안 모델을 따릅니다. 상호 신뢰하지 않는 사용자를 하나의 OpenClaw 프로세스 또는 하나의 OS 사용자에 함께 배치하지 마십시오.
아키텍처
Fleet CLI는 호스트 측 수명 주기 감독자입니다. 셀을 OpenClaw 상태 데이터베이스에 기록하고 로컬 Docker 또는 Podman 런타임에 컨테이너 생성, 검사, 시작, 중지, 교체 및 제거를 요청합니다. Fleet의 바인드 경로와 루프백 URL은 로컬 호스트에 속하므로 원격 런타임 엔드포인트는 거부됩니다. 원격 셀 호스트는 명시적인 스토리지 및 엔드포인트 계약이 마련될 때까지 지원이 유보됩니다. Fleet은 테넌트 메시지를 프록시하지 않으며 셀 간에 공유되는 애플리케이션 수준 데이터 경로를 추가하지 않습니다.
각 셀은 자체 사용자 정의 브리지 네트워크에서 공식 ghcr.io/openclaw/openclaw 이미지를 실행합니다. 별도의 브리지는 공급자와 채널을 위한 아웃바운드 NAT 액세스를 유지하면서 셀 간의 직접적인 컨테이너 IP 트래픽을 차단합니다. 아웃바운드 송신은 기본적으로 제한되지 않습니다. Podman 셀은 --network internal을 사용하여 게시된 루프백 Gateway 포트를 유지하면서 송신을 차단할 수 있습니다. Docker 내부 네트워크에서는 게시된 포트가 작동하지 않으므로 Fleet은 이 조합을 거부합니다. 대신 DOCKER-USER 체인과 같은 호스트 방화벽 규칙으로 Docker 송신 정책을 적용하십시오. 셀 Gateway는 컨테이너 내부의 18789 포트에서 수신 대기하며, 런타임은 호스트의 127.0.0.1:<allocated-port>에만 이를 게시합니다. 원격 액세스가 필요한 경우 운영자는 승인된 리버스 프록시, SSH 터널 또는 테일넷을 해당 루프백 엔드포인트 앞에 배치할 수 있습니다.
영구 Gateway 상태는 <state-dir>/fleet/cells/<tenant>/에서 제공되며 /home/node/.openclaw에 마운트됩니다. 인증 프로필 암호화 키는 별도의 호스트 경로인 <state-dir>/fleet/auth-profile-secrets/<tenant>/에서 제공되며 공식 Docker 영속성 레이아웃에 따라 /home/node/.config/openclaw에 마운트됩니다. 이 키는 일반 상태 마운트 아래에 중첩되지 않습니다. 테넌트별 채널 계정은 해당 계정을 소유하는 셀 내부에서 종단되므로 Fleet MVP에는 공유 채널 계정이나 공유 인바운드 메시지 라우터가 없습니다.
공식 이미지는 기본적으로 UID 1000인 루트가 아닌 node 사용자를 사용합니다. Fleet은 비공개 바인드 마운트를 쓰기 가능한 상태로 유지하기 위해 호스트와 호환되는 사용자 매핑을 사용합니다. Podman은 keep-id를 사용하고, 루트 권한 Docker는 명령을 실행한 루트가 아닌 사용자의 ID를 사용하며, 루트리스 Docker는 컨테이너 루트를 권한이 없는 데몬 사용자에게 매핑합니다. 호스트에서 SELinux가 활성화된 경우 Docker와 Podman은 비공개 :Z 레이블 재지정을 적용합니다. 컨테이너 프로필은 권한이 필요한 호스트 기능을 사용하지 않으며 루트리스 환경에 적합하지만, 루트리스 운영은 호스트 런타임의 선택 사항이자 전제 조건이며 Fleet이 자동으로 활성화하는 기능은 아닙니다.
신뢰 경계
멀티테넌시는 테넌트 간의 상호 격리를 제공합니다. Fleet 운영자와 호스트는 모든 테넌트가 신뢰합니다. 침해된 호스트에 대한 방어는 목표가 아닙니다.
이는 호스트 관리자가 컨테이너 구성과 환경을 검사하고, 마운트된 셀 데이터를 읽고, 이미지를 교체하거나 컨테이너에 진입할 수 있음을 의미합니다. Gateway 토큰과 --env로 전달된 값은 Docker 또는 Podman 검사를 통해 관리자에게 노출됩니다. 이에 맞게 호스트 제어, 관리 액세스 정책, 모니터링, 백업 및 승인된 비밀 관리자를 사용하십시오.
기본 구성은 실수로 인한 와일드카드 네트워크 노출을 방지하고 일반적인 컨테이너 권한 상승 수단을 제거하지만, 신뢰할 수 없는 호스트를 안전하게 만들지는 않습니다.
격리 단계
호스팅하는 테넌트에 적합한 경계를 선택하십시오.
- 강화된 컨테이너 기본 구성. Fleet은 모든 Linux 기능을 제거하고,
no-new-privileges를 활성화하며, PID, 메모리, CPU 및 선택적 쓰기 가능 계층 디스크 제한을 적용하고, 별도의 영구 마운트와 셀별 네트워크를 사용하며, 호스트 루프백에만 게시합니다. 브리지 네트워킹에서는 송신이 제한되지 않습니다. 셀이 아웃바운드 연결을 시작하지 못하게 해야 하는 경우 Podman의--network internal또는 Docker 호스트 방화벽 정책을 사용하십시오. 이는 운영자와 호스트를 신뢰하는 테넌트를 위한 MVP 프로필입니다. - 더 강력한 컨테이너 또는 VM 격리. 위험도가 높은 워크로드에서는 Docker 또는 Podman이 gVisor나 Kata Containers와 같은 더 강력한 OCI 격리 런타임을 사용하도록 구성하거나 셀을 microVM에 배치하십시오. 이는 런타임 또는 인프라 구성입니다. Fleet의
--runtime docker|podman옵션은 OCI 격리 백엔드가 아니라 컨테이너 CLI를 선택합니다. Docker의 대체 컨테이너 런타임 및 Docker VM 런타임 가이드를 참조하십시오. - 적대적인 테넌트를 위한 별도 머신. 적대적인 테넌트를 하나의 OpenClaw 프로세스 또는 OS 사용자에 함께 배치하지 마십시오. 테넌트가 동일한 호스트 운영자를 신뢰하지 않거나 더 강력한 관리 경계가 필요한 경우, 런타임 관리를 분리한 별도의 VM 또는 물리적 호스트를 사용하십시오.
이 격리 단계 중 어느 것도 OpenClaw 애플리케이션 신뢰 모델을 변경하지 않습니다. 하나의 Gateway는 계속해서 하나의 신뢰할 수 있는 운영자 도메인입니다.
빠른 시작
셀을 생성합니다. 이 명령은 생성된 Gateway 토큰을 한 번만 출력하므로 즉시 저장하십시오.
openclaw fleet create acmeFleet 호스트에서 표시된 http://127.0.0.1:<port> URL을 열고 해당 테넌트의 토큰으로 인증한 다음, 셀 내부에서 공급자 자격 증명과 채널 계정을 구성하십시오.
컨테이너 상태와 Gateway 활성 상태를 확인합니다.
openclaw fleet status acme호스트 포트, 마운트된 데이터, 리소스 프로필, 사용자가 제공한 환경 및 Gateway 토큰을 유지하면서 업그레이드합니다.
openclaw fleet upgrade acme테넌트 데이터는 유지하면서 컨테이너와 레지스트리 행을 제거합니다.
openclaw fleet rm acme --force영구 테넌트 데이터도 삭제하려면 --purge-data를 추가하십시오. 삭제에는 --force가 필요하고 되돌릴 수 없으며, 데이터를 삭제하기 전에 해석된 경로가 허용 범위 안에 있는지 검사합니다.
openclaw fleet rm acme --purge-data --force모든 명령과 옵션은 openclaw fleet CLI 참조를 확인하십시오.
MVP에서 유보된 기능
첫 번째 Fleet 릴리스에서는 다음 영역을 이후 설계를 위해 의도적으로 제외합니다.
- 공유 채널 계정 또는 공유 수신 라우터
- 완전한 OpenClaw 인스턴스 대신 간소화된 테넌트별 호스트 프로세스
- 하나의 감독자가 관리하는 원격 셀 호스트
- 테넌트 셀프서비스 포털, 결제 영역 또는 위임 관리 UI
이러한 기능에는 명시적인 ID, 라우팅, 인가 및 장애 도메인 계약이 필요합니다. 하나의 Gateway 또는 해당 자격 증명을 테넌트 간에 공유하는 방식으로 이를 대체해서는 안 됩니다. 또한 이러한 기능은 Fleet의 역할 범위에 속하지 않습니다. Fleet은 단일 호스트 수명 주기 감독자로 유지되며, 여러 머신으로 구성되고 ID 정책의 적용을 받는 플릿은 Fleet 상위의 전용 제어 영역 계층에서 담당해야 합니다.