摘要优先版本控制

内容哈希的不可变发布身份

发布是在创建时解决的OCI 摘要捆绑。标签是人类可读的别名;摘要是加密真理。

为什么要先摘要?

可变标签会产生歧义。随着时间的推移,相同的标签可能指向不同的内容。摘要优先版本控制消除了这种不确定性。

不可变身份

SHA-256 摘要确保升级的工件与扫描和批准的工件字节相同。

篡改检测

对工件的任何修改都会更改其摘要。拉动时间不匹配 = 部署失败。篡改是不可能隐藏的。

审核跟踪

通过链接扫描、批准和部署的加密证明,准确了解哪个工件部署在何处、何时以及为何。

有意义的回滚

回滚返回到精确的已知良好摘要,而不是“无论最新指向现在”。保证相同的字节。

发布结构

Stella 中的版本捆绑了多个组件,每个组件均由其 OCI 摘要标识。该版本本身具有便于人类阅读的语义版本。

示例版本捆绑

Release: myapp-v2.3.1

组件:

api: sha256:abc123...

worker: sha256:def456...

frontend: sha256:789ghi...

从 CLI

终端
$ stella release create --name myapp-v2.3.1 --components api:v2.3.1,worker:v2.3.1
stella release list --environment production\nstella release show myapp-v2.3.1 --components

标记到摘要解决方案

创建版本时,Stella 立即将所有标签解析为其当前摘要。从那时起,该版本就不再可变。

  • 像 :v2.3.1 这样的标签在创建时被解析为 sha256:abc123...
  • 如果有人将新映像推送到同一标签,您的版本不受影响
  • 注册表查询始终使用@sha256:digest语法 - 无标签重新决议

不变性保证

创建版本后,其摘要集无法更改。每次都会将完全相同的字节部署到每个环境。

生成的工件

每次部署都会生成不可变的内容实现可重复性、审计和回滚的工件。

compose.stella.lock.yml

Docker Compose 文件,其中所有图像引用都固定到特定摘要。包括用于可追溯性的 Stella 元数据标签。

image: registry.example.com/myapp/api@sha256:abc123...

labels:

stella.release.id: "rel-uuid"

stella.digest: "sha256:abc123..."

stella.version.json

放置在部署目标上的 JSON 元数据文件,指示当前版本、组件、部署策略和要回滚的先前版本。

"release": { "name": "myapp-v2.3.1" }

"deployment": { "strategy": "rolling" }

"previous": { "digest": "sha256:789..." }

"signature": "base64-encoded-signature"

证据绑定

每个版本都将安全证据与正在部署的确切摘要绑定。证据通过推广随发布一起传播。

证据字段内容
sbomDigest为此摘要生成的 SBOM 的 SHA-256
scanVerdict通过证据参考进行策略评估的通过/失败结果
reachabilityProof此摘要的签名可达性图的 CAS URI
policyHash用于评估的策略版本的哈希

确定性重播:给定相同的版本和策略哈希,重新评估会产生位相同的判决。审计员可以在几个月后验证决策。

准备好不可变的发布身份了吗?

安装 Stella Ops 并通过具有完整证据绑定的内容哈希开始版本控制版本。