6 个月预付 −28% · 1 年预付 −50%比较方案
PrivacyNodes
发布工程

让部署凭据只承担一项窄任务

部署身份应执行经过评审的发布任务,而不应成为通用管理员。在授予 CI 工作流访问主机或密钥存储的权限之前,先定义其任务、可信产物来源和吊销路径。

PrivacyNodes 工程笔记 · 已审核 · 3 分钟阅读

分离自动化和个人管理

报表 API 流水线需要选择经批准的产物并调用受控的发布操作。这并不自动要求创建用户、更改计费或读取每个应用密钥。从权限清单和受保护的测试环境开始;将凭据排除在文档、代码库和示例日志之外。

人工恢复访问应保持独立,这样吊销部署凭据就不会移除唯一的调查路径。确定一名授权维护者和独立的主机验证方式。第二个不受限制的密钥只是另一个凭据,而不是更窄的角色。

精确描述允许的操作

示例发布权限清单
能力需要?边界
读取经批准的产物特定代码库/版本
调用发布操作固定应用和环境
读取所有运行时密钥避免受控的运行时身份
修改用户或 SSH 策略单独管理
更改工作流配置运行时身份不可用受保护的代码库评审
删除备份分离恢复权限

验证发布操作的输入。如果受限命令将任意文本拼接到特权 shell 中,仍然允许意外的工作。一起审查包装器行为、可写路径和产物信任。宽泛的 sudo 权限或对 Docker 套接字的访问可能会破坏预期边界。

将工作流编辑视为凭据访问

能够更改受信任工作流步骤的人可能会使用或暴露其凭据。审查代码库权限、受保护的部署环境以及哪些事件会运行特权任务。让生产凭据远离不受信任的拉取请求代码。只授予工作流令牌其任务所需的权限。

GitHub 建议使用完整长度的提交 SHA 固定来实现不可变的操作选择。审查所选操作及后续更新;版本标签可能会移动。避免将不受信任的事件数据直接插入内联 shell 代码。屏蔽已知密钥值并不能保证其不会通过转换、日志或产物泄露。

技术参考: GitHub Actions 安全使用.

在目标支持时使用短生命周期

OpenID Connect 可以让受支持的目标用工作流身份换取短期凭据。为预期代码库、分支或环境以及受众配置信任检查。这既不是通用的 SSH 替代品,也不是当前 PrivacyNodes 前端提供的功能。

如果你的部署使用 SSH,请审查已安装软件包的授权密钥选项。仅使用强制命令并不能禁止转发;限制必须覆盖预期的访问路径,并且仍然调用安全的发布操作。在单独环境中测试。在更改身份验证时保留可用的管理和恢复访问,并在移除旧方法之前验证新的独立连接。

技术参考: GitHub Actions OpenID Connect · OpenSSH authorized_keys 格式.

测试允许和禁止的工作

验证该身份可以选择预期产物、调用发布并获得有用的结果。然后测试其限制:另一个应用的密钥、无关的文件更改和任意管理操作都应不可用。包括包装器必须拒绝的产物路径和参数。

记录身份、范围、适用时的到期时间、批准维护者和审计证据位置。保留存储引用,而不是凭据值。如果测试只有在授予广泛管理权限后才能工作,请重新审视发布任务,而不是悄悄将其设为永久角色。

演练吊销和流水线中断时的发布

准备一个具有经评审范围的替代凭据,验证测试部署,切换流水线并吊销旧身份。确认被取代的凭据失败,并且另一个工作流中不存在重复凭据。仅添加新密钥并不会移除之前的访问。

记录授权维护者如何在 CI 不可用时停止部署并进行恢复。将该过程链接到 发布记录恢复清单。窄凭据限制了预期权限;它并不会让恶意产物变得无害。

官方参考

本文档已针对本文进行审核。示例是规划练习,不是已在 PrivacyNodes 服务器上测试过的命令。请查阅你所安装版本的文档。