Bastion 是一个用于后台编码代理的自托管协调器。它不是在开发人员笔记本电脑上提供多个代理进程或容器,而是为每个环境创建一个单独的 Cloud Hypervisor 虚拟机。模板将 CPU、内存、磁盘、代理、隧道和生命周期操作定义为经过模式验证的 JSON;准备好的层被重复使用,而每个任务都会收到一个新的可写覆盖层。
这是基础设施,而不是编码模型。 Bastion 目前直接集成 OpenCode 并为其他工具公开 SSH。它可以减少冲突并提高遏制性,但虚拟机只是一个安全边界。特权主机守护进程、本地 API、模板供应链、网络出口、秘密、存储库和合并路径仍然需要显式策略。
Bastion 是如何组装的
| 组件 | 责任 | 信任含义 |
|---|---|---|
| 主持人 API | 默认情况下,在 SQLite 中存储元数据并在 localhost:3148 上提供 HTTP 服务 | 非特权进程,但任何调用者都可以创建、进入和删除环境 |
| bastiond | 通过 Unix 套接字执行特权 VM 生命周期和网络操作 | 以 root 身份运行;妥协会影响每个访客和主机网络 |
| Cloud Hypervisor 虚拟机 | 为一个环境提供来宾内核、根文件系统、进程和网络 | 比共享进程更强的分离,但不是绝对边界 |
| 基础镜像 | 共享 Ubuntu 内核/initramfs/根文件系统和来宾组件 | 易受攻击或中毒的碱基会传播到每个模板 |
| 模板叠加 | 不可变的准备好的项目依赖项和初始化操作 | 提高再现性;秘密不能被烘焙到层中 |
| 环境叠加 | 用于一项任务的可写写时复制磁盘 | 设计为一次性;删除之前必须导出所需的输出 |
隔离的好处——以及它们没有证明的东西
每个虚拟机都有自己的来宾内核、进程、文件系统和网络。这减少了安装不同依赖项、绑定相同端口或编辑公共工作树的代理之间的意外冲突。它还创建了一个更清晰的销毁单元:删除环境,而不是尝试从笔记本电脑中清理未知的进程树。
隔离本身并不能赋予安全自主权。具有广泛 GitHub 令牌的虚拟机仍然可以删除分支;不受限制的出口仍然可以泄露代码;隧道可能会暴露易受攻击的开发服务器;并且恶意模板操作以 root 身份在来宾中运行。 Bastion 的当前文档还表示模板操作以来宾 root 身份运行,主机守护程序以 root 身份运行。将这两个事实视为设计输入,而不是脚注。
| 威胁 | 虚拟机帮助 | 需要额外的控制 |
|---|---|---|
| 两个代理改变相同的依赖关系 | 独立的可写磁盘和进程 | 单独的分支/工作树并合并审查 |
| 代理运行破坏性 shell 命令 | 损坏可能会留在一次性客人体内 | 没有主机挂载、范围凭证和出口限制 |
| 恶意包安装 | 与其他来宾进程隔离 | 注册表策略、锁定文件、扫描和重建 |
| 凭证滥用 | 如果凭证授予外部权限,则无 | 每个任务的短期令牌和提供者端的限制 |
| 虚拟机管理程序或守护进程漏洞利用 | VM 边界可能会减慢横向移动 | 主机修补、最少的服务和专用工作节点 |
| 错误代码到达生产环境 | 无 | 受保护的分支机构、CI、审查和部署批准 |
主机要求和安装
当前运行时需要 x86_64 上的 Linux,读/写访问权限 /dev/kvm 和 /dev/vhost-vsock,以及当 Bastion 主机本身是虚拟机时的嵌套虚拟化。 macOS Apple Silicon 仅限客户端。所需的主机实用程序包括 SSH/SCP、qemu-img、mkfs.vfat、mcopy、iptables 和 IP 工具。当明确请求时,Bastion 可以通过多个包管理器自动安装缺少的实用程序。
主页提供了一个curl-to-shell安装程序,而GitHub Releases则提供了档案。对于生产,检查脚本,验证版本来源和校验和,固定版本,并记录已安装的 Cloud Hypervisor、来宾内核和基础映像版本。运行 堡垒系统检查 安装后和主机升级后。不要将默认的 API 直接暴露给不受信任的网络。
模板是基础设施代码
模板是不可变的 JSON 定义资源、命名隧道、代理和生命周期操作。在创建过程中,Bastion 启动临时虚拟机,运行 init 操作并存储准备好的 qcow2 层。新环境添加了新的可写覆盖并运行可选的启动操作。这使得依赖项安装可重用,代理环境可重复。
版本模板 JSON 与存储库一起,但将组织策略与项目便利性分开。固定包版本和 Git 提交。避免 卷曲 |巴什 内部初始化操作、浮动包标签和未经检查的二进制下载。切勿将 API 键放置在 JSON、shell 历史记录、基础映像或模板快照中。快照可以保留已删除的文件和环境状态。
| 模板字段 | 复习问题 | 安全默认 |
|---|---|---|
| 资源 | 一项工作是否会耗尽主机 CPU、内存或磁盘? | 小配额加主机容量储备 |
| 代理人 | 安装了哪台服务器,采用什么权限模式? | 一种经过批准的代理/版本,具有交互式保护措施 |
| 动作.init | 什么作为 root 执行并成为不可变层的一部分? | 固定、审核、非秘密依赖项设置 |
| 动作.开始 | 每次启动时会发生什么变化? | 具有清晰日志的幂等结帐和服务启动 |
| 隧道 | 哪些访客端口可通过 API 访问? | 除非任务需要经过审查的预览,否则没有隧道 |
| 授权/秘密 | 凭证可以通过日志、磁盘或子进程逃逸吗? | 仅在运行时注入的短期任务令牌 |
存储库、分支和工件流
为每个环境提供一个独特的问题、分支和任务密钥。使用可以读取存储库并仅推送指定分支的令牌进行克隆。不要授予代理绕过受保护分支、批准他们自己的拉取请求或管理组织设置的权限。输出应通过受控路径退出:提交/差异、测试报告、构建工件和机器可读的任务摘要。
- 创建包含允许路径、禁止更改和验收测试的问题。
- 创建一个仅限于一个存储库和任务分支的短期凭证。
- 从固定模板修订创建环境。
- 运行具有出口和运行时间限制的代理。
- 收集日志、差异、测试结果、依赖项更改和工件哈希。
- 在人工审核之前撤销凭证。
- 通过正常的受保护分支和 CI 控件进行合并。
- 删除环境并验证数据保留预期。
网络设计和隧道
默认情况下,API 绑定到本地主机,该项目警告任何可以访问它的人都可以创建、删除和进入环境。如果需要远程访问,请将其置于经过身份验证的 TLS 边界后面,例如精心配置的专用网络。不要将绑定地址更改为 0.0.0.0,并假设云防火墙就足够了。
按目的地和目的控制客人的出口。可能允许包注册表、模型提供者和源主机;除非特定任务获得批准,否则应阻止元数据端点、内部管理系统和生产数据库。命名服务隧道对于预览服务器很有用,但预览应用程序通常缺乏身份验证并运行开发中间件。缩短隧道的使用寿命并避免公众暴露。
秘密和代理权限
示例配置引用存储的秘密而不是嵌入密钥值。这是正确的方向,但注入代理虚拟机仍然使秘密可供具有来宾根控制的进程使用。首选范围狭窄的安装令牌、工作负载身份或自动过期的代理凭证。将源码访问、模型访问、包发布和云部署分离到不同的身份中。
主页示例显示 OpenCode 权限值为“允许”。不要在没有映射其确切语义的情况下将许可示例复制到生产中。 VM 隔离可减少主机影响,但并不能使每个外部操作都可逆。将高后果的操作保留在客人外部的人工或政策服务后面。
单主机与集群
单个 KVM 主机是最简单的评估目标。可选集群添加共享 Postgres 状态、用于基本/模板存档、节点注册、调度和代理连接的 S3-compatible 存储。这不仅增加了容量和可用性选项,还扩大了安全性和备份范围。
| 设计 | 优势 | 新的责任 |
|---|---|---|
| 单主机 | 最小的控制平面和最简单的调试 | 容量、本地故障和维护窗口 |
| 多个独立主机 | 按团队或信任级别手动分离 | 重复的图像、政策和日程安排 |
| Bastion 集群 | 共享调度和模板分发 | Postgres、对象存储、节点身份验证和恢复 |
| 云 KVM 实例 | 弹性基础设施 | 嵌套虚拟化支持、实例成本和云 IAM |
| 专用裸机 | 可预测的性能和更清晰的租户边界 | 硬件操作和较慢的容量变化 |
容量和成本规划
虚拟机隔离具有实际开销。操作系统、bastiond、API、页面缓存和峰值并发来宾的预算主机内存。磁盘消耗包括共享库、模板覆盖、每个可写环境、日志和集群档案。写入时复制最初可以节省空间,但写入密集型构建会快速增长。
跟踪环境启动延迟、队列时间、CPU 和内存饱和度、磁盘增长、网络出口、代理/提供商支出、失败任务清理以及每次接受更改的成本。设置 TTL 和空闲终止。当没有进程拥有删除时,“一次性”环境将成为永久费用。
替代方案
| 选项 | 最适合 | 与 Bastion 的权衡 |
|---|---|---|
| Bastion | Linux/KVM 上具有声明层的自托管每代理虚拟机 | 1.0 之前的版本,需要特权基础设施操作 |
| E2B | 托管,API-第一个云沙箱 | 较少的自主机控制和外部数据处理器 |
| Daytona | 跨提供商的开发环境编排 | 更广泛的工作空间焦点和不同的隔离模型 |
| GitHub Actions 跑步者 | 可审计的非交互式存储库自动化 | 不太适合持久会话代理 |
| Firecracker 平台 | 构建自定义 microVM 控制平面的团队 | 更多的工程设计,最大程度的架构控制 |
| 无根容器 | 较低开销的可信工作负载 | 共享主机内核和较弱的隔离边界 |
常见问题
Bastion 可以在 Mac 上运行吗?
VM 主机当前需要带有 KVM 的 Linux x86_64。 Apple Silicon macOS 可以充当客户端,而不是虚拟化主机。
支持哪些编码代理?
OpenCode 是当今的内置集成。 SSH 为其他工具提供了路径,但这些工作流程需要您自己的设置和验证。
每个代理都位于单独的虚拟机中吗?
每个 Bastion 环境都会接收一个 Cloud Hypervisor VM,该 VM 具有自己的来宾内核、文件系统、进程和网络。
生产就绪了吗?
该项目将自己描述为 1.0 之前的版本,并警告接口可能会发生变化。运行有限的试点并固定精确版本。
虚拟机隔离是否可以确保自动批准安全?
不会。即使主机文件被隔离,外部凭据和网络权限仍然重要。
Bastion 是开源的吗?
是的。当前存储库是在 MIT 许可证下发布的。
主要来源
上次审核日期为 2026 年 7 月 25 日。Bastion 为 1.0 之前版本;在推出之前验证当前架构、版本、安全说明和基础设施要求。



