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