DevSecOps 方法论的一个关键方面是在开发环境中应用最佳实践来保护你的软件免受恶意和意外的暴露或修改。
本文介绍了如何控制和管理 JihuLab.com 和 GitLab.com 的访问以及与之相关的源代码管理、流水线构建、依赖和软件包仓库以及部署密钥,这些都涉及到软件供应链安全。
以下最佳实践专门针对多租户 JihuLab.com 和 GitLab.com 上的最终用户,并针对旗舰版 Ultimate 许可证编写(并非所有功能都适用于专业版 Premium 许可证)。
许多与安全相关的设置可以在顶层群组上设置,并会向所有子群组和项目进行级联。它们是保护你的 JihuLab.com 和 GitLab.com 实例最简单和最重要的设置。
在顶层群组中,应用以下设置,为该群组内代码提供最佳安全性:
这可能是通用设置中最重要的设置。通过群组“设置→通用→可见性级别”将群组可见性设置为“私有”,除非用户为该群组成员,否则任何人都无法访问该群组。
此外,通过将顶层群组设置为私有,所有子群组和项目也将变为私有,并且不可公开。
在群组“设置→通用→权限和群组功能→权限”中:
通过合并请求批准来防止恶意代码被注入仓库中。在群组中为所有项目启用合并请求批准:
需要注意,在群组设置完合并请求批准后,还需在项目中设置具体的合并请求批准规则。
为了更加严格地控制可以访问 JihuLab.com和 GitLab.com 上代码的人员,可以设置 SAML 单点登录。这将确保每个访问系统的人员都得到授权。配置 SAML 单点登录,在群组“设置→SAML SSO”中:
定期检查和审查合规报告,以验证谁批准了合并请求以及被批准的合并请求是哪些。
设置流式审计事件到企业安全信息和事件管理(SIEM)系统,并监控其中是否存在异常活动。这需要对层级结构中的每个群组和项目进行重复操作,以获取最大数量的审计事件。
在群组级别“设置→仓库→预定义推送规则”设置严格的推送规则 ¹⁰,有助于确保恶意代码不会注入到仓库中:
以下设置可以确保 CI/CD 流水线的完整性,并减少滥用和恶意行为的机会:
.gitlab-ci.yml
流水线定义文件的更改权限进行严格控制,通过 CODEOWNERS 文件防止 CI/CD 系统的恶意使用。
一些设置不能从群组级别进行继承,或者在群组级别不可用,必须在单个项目上进行设置。这些设置包括一些特定于仓库的设置。
设置受保护的分支和受保护的标签,与上述受保护的 Runner 和受保护的变量相配合。
在项目“设置→CI/CD→流水线通用设置”中:
使用受保护的环境并严格限制可以部署和要求批准的人员。
在项目“设置→CI/CD→令牌访问”勾选“允许使用 CI_JOB_TOKEN 访问此项目”,默认仅允许当前项目使用该令牌,可添加其他指定的项目使用该令牌。不要关闭该功能,以确保恶意项目无法检索并使用它来访问API。
将密钥、配置文件和签名证书存储在安全文件中存储,而不是存储在代码仓库中。
作为上述安全扫描的补充方案,你可以选择启用扫描执行策略以防止合并具有严重漏洞的代码。
遵循这些最佳实践将有助于确保你托管在 JihuLab.com和 GitLab.com 上的代码不受篡改和公开暴露,确保你的软件供应链安全,只有授权的用户可以访问你的软件资产。
资源中心为极狐(GitLab) 旗下专业的软件研发技能学习中心,为研发、安全、运维等全软件研发生命周期的从业者提供从内容到实操的专业知识。
极狐GitLab 公众号