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-кластере — от однонодовой виртуальной машины до производственных многонодовых инсталляций, в облаке или на собственном оборудовании. Никакого проприетарного управляющего слоя, никаких ограничений по уровням функциональности, никакой привязки к вендору.
Ключевые понятия
-
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 |
Да, |
Да, токены 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. Все права защищены.