分离自动化和个人管理
报表 API 流水线需要选择经批准的产物并调用受控的发布操作。这并不自动要求创建用户、更改计费或读取每个应用密钥。从权限清单和受保护的测试环境开始;将凭据排除在文档、代码库和示例日志之外。
人工恢复访问应保持独立,这样吊销部署凭据就不会移除唯一的调查路径。确定一名授权维护者和独立的主机验证方式。第二个不受限制的密钥只是另一个凭据,而不是更窄的角色。
精确描述允许的操作
| 能力 | 需要? | 边界 |
|---|---|---|
| 读取经批准的产物 | 是 | 特定代码库/版本 |
| 调用发布操作 | 是 | 固定应用和环境 |
| 读取所有运行时密钥 | 避免 | 受控的运行时身份 |
| 修改用户或 SSH 策略 | 否 | 单独管理 |
| 更改工作流配置 | 运行时身份不可用 | 受保护的代码库评审 |
| 删除备份 | 否 | 分离恢复权限 |
验证发布操作的输入。如果受限命令将任意文本拼接到特权 shell 中,仍然允许意外的工作。一起审查包装器行为、可写路径和产物信任。宽泛的 sudo 权限或对 Docker 套接字的访问可能会破坏预期边界。
将工作流编辑视为凭据访问
能够更改受信任工作流步骤的人可能会使用或暴露其凭据。审查代码库权限、受保护的部署环境以及哪些事件会运行特权任务。让生产凭据远离不受信任的拉取请求代码。只授予工作流令牌其任务所需的权限。
GitHub 建议使用完整长度的提交 SHA 固定来实现不可变的操作选择。审查所选操作及后续更新;版本标签可能会移动。避免将不受信任的事件数据直接插入内联 shell 代码。屏蔽已知密钥值并不能保证其不会通过转换、日志或产物泄露。
技术参考: GitHub Actions 安全使用.
在目标支持时使用短生命周期
OpenID Connect 可以让受支持的目标用工作流身份换取短期凭据。为预期代码库、分支或环境以及受众配置信任检查。这既不是通用的 SSH 替代品,也不是当前 PrivacyNodes 前端提供的功能。
如果你的部署使用 SSH,请审查已安装软件包的授权密钥选项。仅使用强制命令并不能禁止转发;限制必须覆盖预期的访问路径,并且仍然调用安全的发布操作。在单独环境中测试。在更改身份验证时保留可用的管理和恢复访问,并在移除旧方法之前验证新的独立连接。
技术参考: GitHub Actions OpenID Connect · OpenSSH authorized_keys 格式.
测试允许和禁止的工作
验证该身份可以选择预期产物、调用发布并获得有用的结果。然后测试其限制:另一个应用的密钥、无关的文件更改和任意管理操作都应不可用。包括包装器必须拒绝的产物路径和参数。
记录身份、范围、适用时的到期时间、批准维护者和审计证据位置。保留存储引用,而不是凭据值。如果测试只有在授予广泛管理权限后才能工作,请重新审视发布任务,而不是悄悄将其设为永久角色。
演练吊销和流水线中断时的发布
准备一个具有经评审范围的替代凭据,验证测试部署,切换流水线并吊销旧身份。确认被取代的凭据失败,并且另一个工作流中不存在重复凭据。仅添加新密钥并不会移除之前的访问。
记录授权维护者如何在 CI 不可用时停止部署并进行恢复。将该过程链接到 发布记录 和 恢复清单。窄凭据限制了预期权限;它并不会让恶意产物变得无害。
官方参考
本文档已针对本文进行审核。示例是规划练习,不是已在 PrivacyNodes 服务器上测试过的命令。请查阅你所安装版本的文档。