为什么 GitOps 对 DevSecOps 至关重要
已发表: 2022-02-24DevOps 在自动化、可追溯性,特别是事先孤立的小组和利益相关者之间的协作方面的收益被广泛接受。 但是,由于 DevOps 团队的主要任务是将操作转移到容器化的 Kubernetes 环境中,因此经过长期尝试和测试的 DevOps 策略可能会缩短。 安全问题和陷阱也体现在独特的方法中。
奇妙的信息是 GitOps 可以填补 DevOps 中的一系列空白,以确保分布式环境的稳定性。 这是因为 GitOps 流程非常有利于 DevSecOps,此处列出的定义为适用于整个软件生命周期的安全最有效的策略。
在本文中,我们将了解 GitOps 如何为 DevSecOps 提供重要框架,通过 CI/CD 以及 Kubernetes 集群上应用程序管理的编写部署阶段增加安全检查。
一个孤独的、不变的现实资源
GitOps 可以描述为:
一种适用于 Kubernetes 和其他云原生系统的功能设计,提供了一组最佳程序,可以统一 Git 部署、管理和监控容器化集群和用途。
一条通往开发人员实践经验方向的路径,可以准确地处理程序,其中端到端 CI/CD 管道和 Git 工作流用于每个操作和开发。
Git 是真实的唯一资源,因为这里声明了所需的配置。 在 Kubernetes 中运行有一个 GitOps 代理,它定期将 Kubernetes 中的真实点与保存在 Git 中的受追捧点进行比较。 任何合并到 Git 中受监控部门的新变体都会立即应用于 Kubernetes。 相反,任何用于 Kubernetes 的手册变体都会机械地再次恢复到 Git 中声明的理想状态。 消除了配置漂移。
Git 通常被恰当地描述为一种真实的资源,因为它适用于 GitOps,这要归功于其不可变的组成。 除其他外,它将有助于维持一个边界——而不是与防火墙相反——将 CI 和 CD 之间的关注点分开。 通过这种方式,作为 CI 一部分的应用程序推进涉及的方式范围——拉取请求、筛选、提交等。 — 在 Git 上继续保持独立。
对于构建拉取请求的开发人员,拉取请求在审查和允许时被合并,并在即将到来的协调中常规用于集群——这通常需要 15 分钟。
默认情况下,该过程是双向的——这意味着当未来的协调循环运行时(通常每 15 分钟一次),直接对 Kubernetes 进行的修改会在 Git 上进行交互。 即便如此,当 DevOps 工作人员或者更糟糕的是,负面行为者入侵者将立即对集群进行更改时,这种情况远不如最佳状态。 这些直接到集群的变体没有通过合并请求和批准进行适当的审查,因此违反了 GitOps 理论,即 Git 在漂移发生时充当事情真相的不可变供应。
作为减轻漂移发生的替代方法,如果对集群进行了未在 Git 中使用的更改,GitOps 检查资源可以发送警报。 当这种情况发生时,由于审计跟踪,Git 上的软件代码可以交换针对集群设计的错误修改,通过其部署点中的控制器在运行时自然环境中指出。
相反,当没有达到不变性时,就会出现漂移。 这可能会在网络攻击方或 DevOps 工作人员无意中更改集群配置以使其与 Git 上的不同时实现。 当这种情况发生时,不协调就会被标记出来——通过使用正确的 GitOps 设备——因此象征着 GitOps 流程呈现的典型 DevSecOps。
适当的应用程序自动执行持续检查系统,以确保 Git 存储库上配置的所需点与 Kubernetes 集群中的真实状态相匹配。 一旦部署有效地专用于存储库的声明条件,它还用于协调和总体部署。
审计管理
GitOps 提供的审计功能对于 DevSecOps 帮助也至关重要。 通过保留在 Git 存储库中作为事实的唯一来源,所有应用程序、代码和配置都进行了版本控制,并保留了完整的审计路径,这是任何受保护的自然环境的主要必要条件。 此审计跟踪通常也同样提供给开发人员和操作人员,以供他们注意集群中正在运行的内容(大多数用户仅限于浏览访问集群配置)。
开发人员可能并不总是像功能和 DevSecOps 员工客户那样需要依赖审计跟踪,但他们可以利用这种能力来理解发生了哪些变化,以及对确实发生的存储库进行调整的驱动力是什么. 简而言之,对于开发人员 - 以及所有 DevOps 员工 - 一切都只是一个 Git 日志。
Git 上的审计跟踪也可用,并且非常容易让构建者在必要时出现。 这是因为该过程的完成遗产被捕获在报告的 Git 程序中,构建者可以理解。
随着审计跟踪的可用性,快速回滚对触发困难的应用程序的调整也是可行的。 这在集群受到损害或配置错误时特别有用。 在这种情况下,作为拥有从头开始重建集群的替代方法,审计跟踪包括回购中的追捧点。 然后部署具有审计跟踪所需点的集群配置和程序,并且重建过程是自动的。
“王国钥匙”的数量

构建者通常依靠自动化服务器 Jenkins 来开发、检查和帮助 CI/CD 用于 Kubernetes 环境的制造管道。 如果没有 GitOps,开发人员在任何其他情况下都可以在直接部署代码时立即访问 Kubernetes 集群。 换句话说,建设者——无论他们是组织的组成部分还是远程操作的承包商——都可以立即访问输出环境,并拥有“王国的钥匙”,以便进行交谈。 这很少是理想的安全环境。
在前面提到的情况下,它所选择的只是让不适当的用户(或者更糟糕的是,入侵者)让 KubeConfig 或 Kubectl 命令可访问制造中的集群,以便他们可以从笔记本上运行。 如果攻击者破坏了 CI 流程并建立了凭证,例如,他们也可以访问 CI 系统可以访问的任何集群。
GitOps 帮助避免用户或攻击者修改集群配置而不留下任何痕迹这一简单事实对运营和安全团队至关重要——此外还支持最大限度地减少开发人员的精神负担。 例如,通过获取管理,开发人员通常不需要直接访问 Kubernetes 节点和/或 kubectl 命令行。 GitOps 几乎可以协调构建者在 Git 中概述的任何内容,但不允许手动访问 Kubernetes 集群或制造环境,除非构建者具有独特的访问控制权限。
GitOps 的 DevSecOps 功能是一种阻止 CD 攻击向量情况的方法,从而保护“王国的钥匙”。 当 GitOps 操作员(例如开源 Flux 等)在 Kubernetes 内部运行并因此可以访问集群时,获取控制继续在 Kubernetes 安全框架内。 消费者可访问性是通过将特权分配给不同组和组成员的名称空间来建立的。
作为 DevSecOps 和 GitOps 如何对不同的人非常有帮助的一个例子,美国国防部 (DoD),美国空军的主要计算机软件官员 Nicolas Chaillan,不久前描述了 DevSecOps 和 GitOps — 与 Flux 一起 — 在其支持美国安全部队的整个范围内的软件程序进步中发挥着重要作用。
“安全和安保是不可协商的,但我们也希望开发商自己的公司能够提高效率和速度,”Chaillan 说。
举个例子,GitOps 是“我们在整个 DoD 中建立和推出 Platform Just one 的关键,”DoD 声称。 根据 DoD 的说法,System Just one 是“一系列允许的、强化的、符合云原生计算基金会 (CNCF) 的 Kubernetes 发行版、作为代码剧本的基础设施和强化的容器”,并带有内置的安全管道。
制衡
DevSecOps 程序与 GitOps 供应制衡相结合。 通过这种方式,它提供的可访问性命令有助于防止开发人员(或入侵者)访问供应代码存储库,以便在 CI 期间引入后门、零日漏洞或另一种形式的漏洞。程序。 这仅仅是因为所有的拉取请求都经过了同行评审。
借助 DevSecOps 支持 CI 系统,代码之前使用的制衡机制专用于 Git 并部署在集群中。 开发人员通常会将修改作为拉取请求发布,这是经过同行评审的。 经过审查和授权后,将代码合并到 Git 上,然后相应地更改所需状态的 YAML 文件。
期望的条件将立即应用于 Kubernetes 集群。 如前所述,具有 DevSecOps 功能的正确 GitOps 设备会不断跟踪目标过程中的精确条件,以确保它与 Git 上声明的内容相一致。 如果有任何差异,则会发出警报,因此可以采取纠正措施。
DevSecOps 固执己见
大量 GitOps 工具协助 DevSecOps。 例如,开源 Flux 有助于维持 Git 存储库作为真实事实的一个不可变来源。 Flux 的能力还扩展到可访问性规范,以在 CI/CD 期间对专用和部署的代码进行检查和平衡。
对于更加自以为是的 Flux 体验,开源 Weave GitOps Main 简化了在许多集群中启用自动化 CI/CD 的第一种方法。 使用 Weave GitOps Main 放置 GitOps 和 DevSecOps 方法的系统涉及控制台上的几个简单命令。
Weave GitOps 公司已成为最初的 GitOps 平台,可自动执行稳定的应用程序交付和 Kubernetes 的自动操作管理 在混合云、多云和边缘架构中的任何规模。
所有一些工具都有助于自动化监控,以确保集群配置通常与 Git 上的配置相匹配,从而帮助避免漂移。 完整且可用的审计跟踪允许在必要的基础上生成应用程序和集群配置回滚,而无需从头开始重建集群。
总之,GitOps 标志着 DevOps 在分散的 Kubernetes 环境中的发展,尽管 DevSecOps 已经成为在应用程序生命周期中保持 GitOps 的 CI/CD 稳定性的重要方式。
Steve Waterworth 是Weaveworks的技术营销主管。