CI/CD安全性的最佳实践
对于已经接受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世界杯阿根廷预选赛赛程
