6 MESES POR ADELANTADO −28% · 1 AÑO POR ADELANTADO −50%Comparar planes
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 不可用时停止部署和恢复。将该过程链接到 发布记录 y 恢复清单。狭窄的凭据限制了预期的权限;它不会使恶意构件无害。

官方参考

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