Cordium: open-source sandbox-платформа на Kubernetes

Логотип Cordium

Cordium — это свободная платформа с открытым исходным кодом для развёртывания собственных изолированных сред (sandbox) на базе Kubernetes и Octelium, построенная на основе идентификации (identity-based). Это универсальная платформа, которая предоставляет изолированные воспроизводимые окружения для разработчиков, ИИ-агентов и автоматизированных рабочих нагрузок. Cordium подходит для самых разных сценариев: удалённая среда разработки для кодирования (например, VSCode, Zed и т. д.), изолированные среды для ИИ-агентов и CI/CD-пайплайнов, а также безопасный доступ к инфраструктуре без хранения учётных данных (secretless) — для разработчиков и ИИ-агентов.

Главное отличие Cordium от других платформ удалённой разработки (GitHub Codespaces, Coder и т. д.) и платформ для изолированного выполнения кода (E2B, Daytona и т. д.) состоит в том, что Cordium автоматически обеспечивает доступ к ресурсам на основе идентификации, без необходимости распространять учётные данные внутри сред. Cordium использует возможности ZTNA (Zero Trust Network Access) в Octelium, чтобы предоставить безопасный доступ к инфраструктурным ресурсам — SSH-серверам, базам данных, внутренним HTTP API, mTLS-сервисам — прямо из sandbox, не раскрывая, не распределяя и не управляя прикладными учётными данными (API-ключами, токенами доступа, приватными SSH-ключами, паролями баз данных и т. п.). Иными словами, Cordium — это не просто платформа для изолированного выполнения кода, но и инструмент для безопасного доступа к инфраструктуре, устраняющий проблему бесконтрольного распространения учётных данных в масштабе.

Основные возможности

  • Единая платформа для людей и ИИ-агентов. Каждая изолированная среда (Workspace) — это изолированный rootless-контейнер, работающий на стандартном Kubernetes и доступный через браузерный терминал, SSH, CLI и gRPC API. Workspace-ы могут быть постоянными (файловая система сохраняется между перезапусками) или временными (ephemeral) и способны останавливаться автоматически по завершении задач. Одна и та же платформа подходит как для долгих сессий кодирования (через VSCode, Zed и т. д.), так и для короткоживущих автоматизированных нагрузок (задачи ИИ-агентов, CI/CD и т. д.).

  • Декларативные, воспроизводимые среды. Конфигурация окружения Workspace описывается в YAML-спецификации, включающей образ контейнера, клонирование репозитория, задачи жизненного цикла, переменные окружения, ограничения ресурсов (CPU, память, хранилище), подстановку переменных и порты приложений. Шаблоны (Templates) позволяют повторно использовать одну конфигурацию для множества Workspace-ов. Pre-built Templates сохраняют полностью инициализированную файловую систему как Kubernetes VolumeSnapshot, сокращая время холодного старта с минут до секунд.

  • Секретный (secretless), основанный на идентификации доступ к инфраструктуре. Workspace-ы обращаются к базам данных, SSH-серверам, HTTP API, кластерам Kubernetes и mTLS-сервисам без того, чтобы учётные данные когда-либо попадали в Workspace. API-ключи, пароли, приватные SSH-ключи и kubeconfig-файлы хранятся в identity-aware прокси Octelium и подставляются на уровне протокола только при наличии соответствующих прав у Workspace. Сам Workspace учётных данных не хранит, что устраняет их бесконтрольное распространение как для разработчиков, так и для ИИ-агентов.

  • Управление доступом на основе идентификации и наблюдаемость. Каждый Workspace имеет сессию Octelium (Octelium Session), представляющую его идентичность. Доступ к инфраструктуре управляется атрибутивным управлением доступом (ABAC) с осведомлённостью об L7 на уровне каждого запроса, с политиками в виде кода (policy-as-code) на основе CEL и OPA, обеспечивающими нулевые постоянные привилегии (zero standing privileges) по умолчанию. Аутентификация поддерживает любой OIDC- или SAML 2.0-провайдер идентификации (IdP), GitHub OAuth2, OIDC-утверждения рабочих нагрузок, а также нативные FIDO2, WebAuthn и TOTP.

  • Нативный аудит на базе OpenTelemetry и видимость. Наблюдаемость и журналирование доступа в реальном времени с осведомлённостью об идентификации и уровне L7. Каждый запрос фиксируется кластером Octelium и экспортируется в ваши OTLP-приёмники OpenTelemetry для интеграции с системами управления логами и SIEM-провайдерами.

  • Открытый исходный код и самостоятельное размещение. Cordium полностью открыт под лицензией Apache-2.0. Платформа работает на любом Kubernetes-кластере — от однонодовой виртуальной машины до производственных многонодовых инсталляций, в облаке или на собственном оборудовании. Никакого проприетарного управляющего слоя, никаких ограничений по уровням функциональности, никакой привязки к вендору.

Ключевые понятия

Архитектурная схема Cordium
  • Space — пространство имён верхнего уровня в Cordium. Объединяет Templates, Workspaces, Secrets и GitProviders в рамках единой организационной единицы.

  • Workspace (синоним — sandbox) — основная единица выполнения в Cordium. Это изолированная rootless-среда на базе контейнеров, доступная интерактивно или программно через веб-консоль, Cordium CLI, стандартный SSH и gRPC-API.

  • Template — повторно используемая конфигурация Workspace внутри Space. При создании Workspace он инициализируется из спецификации выбранного Template. В каждом Space автоматически создаётся Template default. Спецификация Template во многом совпадает со спецификацией Workspace (образ, среда выполнения и т. д.) и может включать привязку к GitProvider. Templates поддерживают pre-build через Kubernetes VolumeSnapshot, что сокращает время запуска с минут до секунд для Templates с большим количеством зависимостей.

  • Secrets — чувствительное значение (API-ключи, токены, пароли, сертификаты), хранящееся внутри Space. На Secrets ссылаются по имени в спецификациях Templates.

Конфигурация Workspace

Спецификации Workspace и Template описываются в YAML и применяются командой cordium run --file spec.yaml или cordium create template --file spec.yaml. Вот минимальный пример:

spec:
  image:
    registry:
      url: python:3.12-bookworm

  repository:
    url: https://github.com/myorg/my-project

  runtime:
    tasks:
      - name: install
        type: ON_CREATE
        workingDir: /workspace/repo
        run: pip install -r requirements.txt
        onFailure: ON_FAILURE_ABORT

А вот более полный пример:

spec:
  image:
    dockerfile:
      inline: |
        FROM node:22-bookworm

        ENV DEBIAN_FRONTEND=noninteractive

        RUN apt-get update -qq && \
            apt-get install -y --no-install-recommends \
              podman \
              postgresql-client \
              curl \
              git \
            && rm -rf /var/lib/apt/lists/*

        RUN npm install -g @anthropic-ai/claude-code

  repository:
    url: https://github.com/myorg/api-service
    cloneOptions:
      branch: ${{ vars.BRANCH }}
      depth: 1

  vars:
    - name: BRANCH
      value: main
    - name: TASK
      value: "Review the codebase and fix any failing tests."

  runtime:
    autoStop: true
    envVars:
      - key: NODE_ENV
        value: test
      - key: SENTRY_DSN
        fromSecret: sentry-dsn

    tasks:
      - name: install-dependencies
        type: ON_CREATE
        workingDir: /workspace/repo
        run: npm ci
        onFailure: ON_FAILURE_ABORT

      - name: start-postgres
        type: POST_START
        runAsRoot: true
        run: |
          podman rm -f workspace-postgres 2>/dev/null || true
          podman run \
            --name workspace-postgres \
            --net host \
            -e POSTGRES_PASSWORD=password \
            -e POSTGRES_DB=app \
            -d docker.io/postgres:16

          for i in $(seq 1 30); do
            pg_isready -h localhost -p 5432 -U postgres && break
            sleep 2
          done

      - name: run-tests
        type: POST_START
        workingDir: /workspace/repo
        run: npm test
        onFailure: ON_FAILURE_CONTINUE

      - name: run-agent
        type: POST_START
        workingDir: /workspace/repo
        run: claude "${{ vars.TASK }}"

  limit:
    cpu:
      millicores: 4000
    memory:
      megabytes: 8192
    storage:
      megabytes: 20480

Способы доступа

Веб-портал

Веб-портал Cordium — это интерфейс в браузере для управления Workspace-ами и работы с ними без необходимости устанавливать какое-либо программное обеспечение. Это основной интерфейс для пользователей и команд, которым нужен clientless-доступ к своим Workspace-ам. Веб-портал Octelium аутентифицирует пользователей через IdentityProviders Octelium: GitHub OAuth2, любой OpenID Connect или SAML 2.0 IdP (подробнее здесь) или напрямую через Passkeys (подробнее здесь).

Примечание

Короткое демонстрационное видео веб-портала Cordium доступно здесь.

Использование CLI

CLI cordium предоставляет полный командный доступ к управлению Workspace-ами. Вот несколько примеров:

export OCTELIUM_DOMAIN=example.com
# Создать Workspace из Template по умолчанию и подключить терминал
cordium run

# Подключиться к существующему Workspace (запускает его, если остановлен)
cordium run abc

# Создать из конкретного Template
cordium run --template ml-env.my-project

# Создать из YAML-файла конфигурации
cordium run --file workspace.yaml

# Создать из образа контейнера
cordium run --image python:3.11-slim

# Создать из Dockerfile
cordium run --dockerfile ./Dockerfile

# Создать из git-репозитория, клонировав конкретную ветку
cordium run --repository https://github.com/myorg/my-project --branch develop

# Создать в конкретном Space, используя его Template по умолчанию
cordium run --space my-project

# Создать временный (ephemeral) Workspace
cordium run --ephemeral

# Создать временный Workspace, который удаляется при завершении терминальной сессии
cordium run --ephemeral --rm

# Временная изолированная среда для ИИ-агента с ограничениями ресурсов и секретом
cordium run --ephemeral --rm \
  --image python:3.11-slim \
  --env-from-secret ANTHROPIC_API_KEY=anthropic-key \
  --cpu 2000 --memory 4096

# Задать переменные окружения
cordium run --image node:20 -e NODE_ENV=development -e PORT=3000

# Получить переменную из Space Secret
cordium run --template backend.my-project \
  --env-from-secret DATABASE_URL=staging-db-url

# Клонировать основной репозиторий и дополнительный с переменными
cordium run --repository https://github.com/myorg/api-service \
  --additional-repo shared-lib=https://github.com/myorg/shared-lib \
  --var SERVICE=services/payments \
  --var BRANCH=main


# Открыть терминал Workspace
cordium terminal abc
cordium term abc          # короткий псевдоним

# Выполнить команду и передать код завершения
cordium exec abc -- make test

# Выполнить в конкретной рабочей директории
cordium exec abc -w /workspace/repo -- go build ./...

# Выполнить от имени root
cordium exec abc --root -- apt-get install -y ripgrep
# Или
cordium exec abc -- sudo pt-get install -y ripgrep

# Задать переменные окружения для конкретной команды
cordium exec abc -e GOOS=linux -e GOARCH=amd64 -- go build ./...

# Получить вывод удалённой команды локально
cordium exec abc -- cat /workspace/repo/output.json > local.json

# Интерактивная SSH-сессия через встроенный SSH-клиент в Cordium CLI
cordium ssh abc

# Выполнить удалённую команду по SSH
cordium ssh abc -- uptime

# Локальный проброс портов
cordium ssh abc -L 5432:localhost:5432

# Несколько пробросов портов без открытия shell
cordium ssh abc -N -L 5432:localhost:5432 -L 6379:localhost:6379

# Динамический SOCKS5-прокси
cordium ssh abc -D 1080 -N

# Подключиться к кластеру Octelium для использования нативных SSH-утилит (OpenSSH, scp, rsync и т. д.)
octelium connect -d

# Сгенерировать блок SSH config для использования с VS Code, JetBrains, Zed, rsync
cordium ssh abc --print-config >> ~/.ssh/config

# Затем использовать VS Code Remote SSH
code --remote ssh-remote+cordium-abc /workspace/repo

# Также можно использовать другие инструменты, например rsync
rsync -avz ./dist/ cordium-abc:/workspace/repo/dist/

# Скопировать локальный файл в Workspace
cordium cp ./config.json abc:/workspace/repo/config.json

# Скопировать файл из Workspace локально
cordium cp abc:/workspace/repo/output.csv ./output.csv

# Рекурсивно скопировать директории
cordium cp -r ./src/ abc:/workspace/repo/src/

# Скопировать между двумя Workspace-ами
cordium cp abc:/workspace/repo/model.pt def:/workspace/repo/model.pt


# Стримить логи Workspace
cordium logs abc

# Запустить Workspace
cordium start abc

# Остановить Workspace
cordium stop abc
cordium delete workspace abc

# Создать Space
cordium create space my-project

# Создать Template с встроенной конфигурацией
cordium create template ml-env.my-project \
  --image python:3.11 \
  --repository https://github.com/myorg/ml-project \
  --env-from-secret WANDB_API_KEY=wandb-secret \
  --cpu 8000 --memory 16384

# Собрать pre-build снимок Template
cordium build ml-env.my-project

# Создать Workspace из Template с переопределением переменных
cordium run --template go-build.my-project \
  --var SERVICE=services/payments \
  --var BRANCH=main \
  --ephemeral

Установка первого кластера

Прочитайте краткое руководство здесь, чтобы установить однонодовый Cluster Cordium на любой недорогой облачной виртуальной машине (DigitalOcean Droplet, Hetzner, AWS EC2, Vultr и т. д.) или на локальной Linux-машине (либо Linux-VM внутри macOS/Windows) с объёмом RAM не менее 4 ГБ и дисковым пространством от 20 ГБ, работающей под управлением актуального дистрибутива Linux (Ubuntu 24.04 LTS или новее, Debian 12+ и т. д.). Этого достаточно для большинства задач разработки, личного использования или ненагруженных продуктивных сценариев, не требующих высокодоступных многонодовых Cluster-ов. После подключения к VPS/VM по SSH от имени root установите Cluster следующим образом:

curl -o install-cluster.sh https://octelium.com/install-cluster.sh
chmod +x install-cluster.sh

# Замените <DOMAIN> на ваш реальный домен
./install-cluster.sh --domain <DOMAIN> --cordium

После установки Cluster запустите свой первый Workspace:

cordium run

Установка CLI

Установите CLI cordium следующим образом:

Для Linux и macOS:

# Установить CLI Octelium
curl -fsSL https://octelium.com/install.sh | bash
# Установить Cordium CLI
curl -fsSL https://octelium.com/install-cordium.sh | bash

Для Windows в PowerShell:

# Установить CLI Octelium
iwr https://octelium.com/install.ps1 -useb | iex
# Установить Cordium CLI
iwr https://octelium.com/install-cordium.ps1 -useb | iex

Также можно установить CLI через Homebrew:

brew install octelium/tap/octelium
brew install octelium/tap/cordium

Сравнение с другими платформами

Возможность / Свойство Cordium Daytona E2B GitHub Codespaces Coder DevPod

Основные рабочие нагрузки

Разработчики, ИИ-агенты, автоматизированные нагрузки

Разработчики, ИИ-агенты

ИИ-агенты

Разработчики

Разработчики, ИИ-assisted разработка

Разработчики

Лицензия

Apache 2.0

AGPLv3

Mixed / managed-first

Проприетарная

AGPLv3

MPL 2.0

Самостоятельное размещение

Да

Да

Ограниченно

Нет

Да

Локально/на стороне клиента

Управляемый SaaS

Нет

Да

Да

Да

Да

Нет

Kubernetes-нативная архитектура

Да

Частично

Нет

Нет

Да

Нет

Горизонтальное масштабирование

Да, через Kubernetes

Распределённый sandbox-runtime

Проприетарная управляемая инфраструктура

Управляется GitHub

Зависит от Kubernetes/провайдера

Зависит от локального/провайдера

Модель изоляции

Rootless вложенные контейнеры

Контейнеры / gVisor-style изоляция

Firecracker microVMs

ВМ/контейнеры

Контейнеры/ВМ

Зависит от провайдера

Root-доступ внутри sandbox

Да

Да

Ограниченно

Да

Настраивается

Зависит от провайдера

Поддержка вложенных контейнеров

Поддерживается

Поддержка Docker/контейнеров

Ограниченно

Поддерживается

Поддерживается

Зависит от провайдера

Постоянные среды с сохранением состояния

Да

Да

Ограниченно / ориентированы на сессию

Да

Да

Зависит от провайдера

Поддержка временного выполнения (ephemeral)

Да

Да

Да

Ограниченно

Ограниченно

Ограниченно

Поддержка Devcontainer

Да

Да

Частично

Да

Да

Да

Подготовка на основе шаблонов

Да

Да

Ограниченно

Ограниченно

Да

Да

Secretless-доступ к инфраструктуре

Да

Нет

Нет

Нет

Нет

Нет

Встроенный доступ к инфраструктуре

Да

Ограниченно / интеграция с внешним VPN

Нет

Нет

Ограниченно / внешний

Нет

Устранение распространения учётных данных

Первоклассная цель проектирования

Нет, как правило полагается на учётные данные sandbox/приложений или внешнюю сетевую интеграцию

Нет, доступ через API-ключи

Ограничено экосистемой GitHub

Внешнее управление секретами / интеграции с платформами

Централизованной модели нет

Модель идентификации Workspace

Отдельная Octelium Session на каждый Workspace

Модель идентификации sandbox/пользователя/организации

Модель идентификации API-ключа / sandbox

Идентификация пользователя/организации GitHub

Идентификация пользователя/workspace в Coder

Идентификация локального пользователя/провайдера

L7-aware управление доступом к инфраструктуре

Да, через Octelium Policies

Нет

Нет

Нет

Нет / только внешнее

Нет

Policy-as-code управление доступом

Да, CEL и OPA

Ограниченно / модель политик платформы

Ограниченно

Политики GitHub/организации

RBAC/шаблоны/внешние политики

Нет

OIDC аутентификация людей

Да

Да / на базе Auth0

Не основная модель

Enterprise SSO через GitHub org/enterprise

Да

Зависит от провайдера / внешнее

SAML аутентификация людей

Да

Enterprise-опция / обратиться к Daytona

Не основная модель

Enterprise SSO через GitHub org/enterprise

Да / ориентировано на enterprise

Зависит от провайдера / внешнее

GitHub как провайдер идентификации

Да

Да

Не основная модель

Нативный

Да

Зависит от провайдера / внешнее

Нативные Passkeys / WebAuthn / FIDO2

Да

Не основная задокументированная OSS-возможность

Не основная модель

Через безопасность аккаунта GitHub

Внешний IdP / зависит от развёртывания

Внешнее

Аутентификация через OIDC-утверждения рабочих нагрузок

Да

Нет / не основная задокументированная возможность

Нет

GitHub Actions OIDC для GitHub workflows, не идентификация sandbox

Внешний IdP / зависит от развёртывания

Нет

Поддержка OAuth2 client credentials

Да, через паттерны workload/IdP Octelium при соответствующей настройке

API/JWT/token модель, не основная модель OAuth2 client-credentials для доступа к инфраструктуре

Нет, модель API-ключа/токена доступа

GitHub Apps/OAuth экосистема

Внешний IdP / зависит от развёртывания

Нет

Bearer/API-токен аутентификация для Platform API

Да

Да, API-ключи/JWT

Да, E2B_API_KEY / токен доступа

Да, токены GitHub/API

Да

Ограниченно / зависит от провайдера

SSH-доступ

Да

Да, SSH-доступ на основе токенов

Ограниченно

Да

Да

Зависит от провайдера

Нативный аудит OpenTelemetry

Да

Частично / SDK tracing

Ограниченно

Управляется платформой

Внешние интеграции

Нет

CLI-ориентированные рабочие процессы

Да

Да

Да

Частично

Да

Да

Многопользовательская платформа

Да

Да

Ограниченно

Да

Да

Нет

Публичный API / SDK

Да

Да

Да

Да

Да

Ограниченно

Поддержка веб-терминала

Да

Да

Ограниченно

Да

Да

Зависит от IDE/провайдера

GitOps декларативное управление

Да

Частично

Нет

Нет

Частично

Нет

Использование SDK для ИИ-агентов

Да

Да

Первоклассный

Ограниченно

В развитии

Ограниченно

Долгоживущие фоновые нагрузки

Да

Да

Ориентированы на сессию

Ограниченно

Да

Зависит от провайдера

CI/CD-ориентированное выполнение

Да

Возможно

Возможно

Ограниченно

Возможно

Нет

Не требует проприетарного управляющего слоя

Да

Нет для managed, да для OSS-развёртывания

Нет для managed E2B

Нет

Да для self-hosted Coder

Да

Ключевое преимущество

Identity-centric платформа с интегрированным безопасным доступом к инфраструктуре

Быстрые stateful AI/dev sandboxes

Временное (ephemeral) выполнение кода для ИИ

Управляемая разработка в экосистеме GitHub

Enterprise удалённая разработка

Портативная оркестрация devcontainer

Лицензия

Исходный код, принадлежащий Cordium, лицензирован под Apache License 2.0.

Cordium построен поверх Octelium. Некоторые компоненты Cordium или полные развёртывания могут включать компоненты Octelium Cluster, которые публично лицензированы под AGPLv3. Octelium Labs, LLC владеет соответствующими авторскими правами на оба проекта.

Copyright © Octelium Labs, LLC. Все права защищены.

© 2026 meganuke