CI/CD安全性的最佳实践

JFrog支持
2021-08-03 15:09

对于已经接受DevOps的组织来说CI / CD管道是软件交付工作流的基础。它促进了代码从开发到测试再到部署的连续移动,并且它允许软件交付过程中的各种涉众——开发人员、测试工程师、It运维工程师等等——进行协作。

考虑到CI/CD管道对DevOps的中心地位,CI/CD安全性应该是DevOps团队的优先事项。CI/CD安全性不足可能会导致风险,例如恶意软件在通过CI/CD管道传递时被插入到应用程序代码中,或者暴露管道中管理的敏感数据。

为了帮助防止此类问题,本文讨论了在所有阶段保护CI/CD管道的策略。

为CI/CD工具建立访问控制

DevOps团队通常认为CI/CD是所有涉众共同“拥有”的过程。毕竟,在开发人员和IT运维团队之间共享软件交付过程的可见性和责任,是团队协作的一部分DevOps的核心焦点

因此,允许所有团队成员访问CI/CD管道中的所有工具和资源似乎是合乎逻辑的。2022世界杯阿根廷预选赛赛程但这是一个错误。在不共享访问权限的情况下共享可见性和责任是可能的。

而不是授予所有团队成员完全访问权限CI / CD工具,数据和环境,访问应根据角色分配。例如,只有开发人员才能管理CI服务器和源代码管理工具。对于他们来说,IT运维团队通常只需要访问用于生产环境的管理工具。他们不需要控制开发/测试环境或预部署工具。

确保整个管道的环境均等

环境奇偶性意味着CI/CD管道中的所有环境(例如开发/测试和生产)都以相同的方式配置。

从安全角度来看,环境奇偶性很重要,因为它确保了测试软件的条件与在生产环境中运行软件的条件相匹配。如果没有环境奇偶性,团队就有可能在测试期间检测不到安全问题,因为问题只存在于特定的环境配置下。例如,它可能只在特定的操作系统版本上发生,或者在某个软件库的特定版本上发生。

实现环境均等的一个简单方法是在CI/CD管道的所有阶段将软件托管在容器内。尽管容器不能保证完全的环境奇偶性(例如,容器运行时的不同版本可能会在一个环境中创建另一个环境中不存在的漏洞),但它们确实以这样一种方式将应用程序从主机环境中抽象出来,即主机上的大多数环境变量不会影响应用程序的执行方式。因此,如果您在容器中测试应用程序,然后使用相同的容器将应用程序部署到生产环境中,那么您可以更加确信您的测试已经充分覆盖了潜在的安全风险。

不要在源代码中存储秘密

DevOps团队经常使用各种密码、访问密钥和其他秘密来管理CI/CD管道。例如,他们需要帐户凭据来访问CI服务器,还需要SSH密钥来登录托管其应用程序的服务器。

将这些数据直接硬编码到配置文件或源代码中是很有诱惑力的,因为这样可以很容易地重复访问这些数据。如果这些秘密仅用于测试环境或管道的其他预生产阶段,工程师可能会认为以这种方式存储数据的风险很小,因为它不能被用来利用已经部署到生产中的面向公众的应用程序。

事实是隐藏在代码中的秘密根本就不安全。它们可能泄露给恶意方,恶意方可能使用它们来获得对CI/CD资源的未经授权的访问。2022世界杯阿根廷预选赛赛程即使这些秘密仅应用于CI/CD管道的开发或测试阶段,攻击者也可以利用它们将恶意代码注入到应用程序中。如果未被检测到,恶意代码将被推入生产环境。

不要将秘密存储在配置代码或源代码中,而是使用秘密管理器,它提供了一种安全的方法来存储所有类型的秘密,并根据团队成员的角色配置对它们的访问。

测试和监视所有CI/CD资源2022世界杯阿根廷预选赛赛程

大多数团队都知道他们需要在他们的应用程序上运行安全性测试。但是他们可能忽略了测试CI/CD管道中的其他资源的重要性——比如构建和部署脚本,或者基础设施即代码(IaC)文件2022世界杯阿根廷预选赛赛程安全漏洞。不安全的配置是未经授权访问的另一个来源,可能导致将恶意代码插入应用程序等问题。

同样,团队不应该只在生产环境中监视应用程序,以寻找安全问题的迹象,还应该在开发/测试环境中部署自动化测试工具——这是一个实践的例子,称为左移位安全

准备回滚

有时,您可能会发现影响已经部署的应用程序的安全问题。执行回滚,这意味着恢复到您知道是安全的应用程序的早期版本,通常是消除风险的最快方法,直到开发人员能够修复底层的安全问题。

出于这个原因,它是一个CI/CD安全性最佳实践,以确保您可以快速回滚每个版本。将应用程序旧版本的工件放在手边有助于实现这一目标。部署脚本或发布自动化工具也是如此,它们可以配置为重新部署应用程序的以前版本,而不是只部署新版本。

确保软件供应链的安全

CI/CD管道最大的安全风险可能不是来自您自己编写的代码或配置,而是来自第三方依赖项,例如您导入到应用程序中的开放源代码库。

如果不加以解决,影响第三方资源的安全漏洞可能导致所谓的2022世界杯阿根廷预选赛赛程软件供应链攻击软件组合分析(SCA)工具,它扫描应用程序源代码中的第三方依赖项,并识别那些不安全的依赖项,可以帮助防止这种风险。包扫描程序也是如此,它检查打包的应用程序或容器映像,以查找受已知漏洞影响的组件。

最后,考虑在CI/CD管道中使用签名代码和工件。签名确认组件的来源,使您确信在CI/CD进程中使用的资源来自受信任的来源。2022世界杯阿根廷预选赛赛程