燃爆上海 5·23-24,AICon 大模型实战风暴,50+ 干货一网打尽,即将开幕~ 了解详情
写点什么

借助 GitOps 实现快速、安全的软件交付生命周期

作者:Gopinath Rebala

  • 2023-06-09
    北京
  • 本文字数:3612 字

    阅读完需:约 12 分钟

借助GitOps实现快速、安全的软件交付生命周期

跟过去相比,如今的企业必须要更快地响应激烈的竞争压力,提高运行效率,并适应来自外界的持续破坏性。达成这一目标的关键是实现越来短的软件交付周期,并且不能以牺牲可靠性、安全性或合规性为代价。这正是集成 DevSecOps 策略的目标。但是,如今的 DevSecOps 实现需要开发人员理解并参与交付流水线的搭建,并且需要在涉及安全问题时保持警觉,否则与网络犯罪和法规合规性失败相关的风险会迅速增长。


GitOps 提供了一个解决方案。通过将 GitOps 集成到 DevSecOps 工作流中,企业可以利用 Git 的优势大幅简化软件交付工作流,包括生产环境的发布,同时还可以在后台自动化搭建流水线,并将安全性和合规性相关的任务交给相关团队。


GitOps 的目标是以 Git 作为交付服务状态的事实来源(source of truth),实现软件交付和基础设施的配置。GitOps 还可以通过开发人员熟悉的工作流和工具来实现软件交付的操作,使 DevOps 流程几乎没有任何额外的障碍。


通过 GitOps 交付模式,企业安全团队可以指定适用于软件交付流程的安全策略,这极大地提升了应用交付的安全性。例如,安全团队可以要求部署到特定环境的应用要执行动态应用安全性测试(dynamic application security test,DAST),并确保检查结果符合预期。


将这样的安全策略声明为代码的方式,不仅可以作为安全策略的文档,还有助于这些策略的自动化合规检查。此外,安全策略作为代码,会由独立于软件开发过程的安全团队管理,并且与开发人员使用的工具进行集成,这可以显著提升所交付软件的安全性。


这种分离对于围绕软件发布开发一个零信任的环境至关重要。在安全问题出现时,通过将其暴露出来,这能够加速新软件的交付,从而消除了进行单独安全审查的所耗费的时间和复杂性。

DevSecOps 基础


尽管与软件交付生命周期相关的风险在不断增加,但是大多数的组织都在努力让他们的运维、产品开发和安全团队进行协作,以提升安全性,同时不增加繁琐的流程步骤,避免最终减缓软件交付的生命周期。DevSecOps 基于如下原则在软件交付生命周期中建立了这种协作:

  • 在整个软件交付工作流中提供对安全问题的可见性

    安全团队、开发人员和项目经理应该都能看到综合安全性测试的结果,包括应用安全性测试(application security test,SAST)、动态应用安全性测试(dynamic application security test,DAST)、模糊测试、依赖性扫描和二进制扫描、许可证合规性和 secret 探测。

  • 在软件交付生命周期中尽早发现安全问题

    风险和漏洞越早发现,就能越快、越容易进行补救。我们应该使用自动化来消除对构建、测试、部署和生产阶段所产生的大量日志和度量指标的手工审查。

  • 在整个工作流中实现安全策略的自动执行

    应用安全包括确保生产环境的软件符合不断变化的监管需求,尤其是与数据隐私相关的需求,并减少违规的风险。它还包括确保版本符合内部策略,如部署前的所有审查步骤。


目前流行的 DevSecOps 的流水线模型符合了这些原则。AWSGoogle Cloud都为这种方法给出了最佳实践。使用编排器工具,如 Spinnaker,Git 或其他源码仓库的变更会触发一个自动化的工作流(“推送模型”),该工作流会通过必要的步骤将应用程序部署到目标环境。这些步骤通常表示为有向无环图(directed acyclic graph),其中包含运行工作流中某个 stage/step 的要求,以及基于该阶段的状态或输出而运行的依赖 stage/step。该模型允许所有的利益相关者(开发、运维、安全、SRE 等)对所有的步骤实现可见性。它将规则/需求编码为护栏(guardrail)或闸门(gate),这也会暴露给交付生态系统中的所有利益相关者。


但是,这种流水线模型给开发人员带来了巨大的负担,他们需要熟悉整个流程,包括如何使用和配置编排器。这意味着它需要一个苛刻的任职流程,才能让开发人员有能力使用该系统。

交付的 GitOps 模型


GitOps 模型能够让开发人员只需简单地在 Git 中提交他们的代码即可。他们不需要在交付过程中使用新的工具来运行或跟踪任何东西。他们不需要理解和使用编排器。相反,SecOps 能够将必要的可见性、风险识别和规则执行放到 Git 中,使 Git 成为所有必要的流程控制的唯一来源,这些流程控制在后台运行,对开发人员不可见。


GitOps 模型依赖于 Kubernetes 的原生能力。Kubernetes 支持以声明式模型运行应用程序,应用程序服务所需的配置可以作为声明式规范在配置文件中指定。然后,可以通过 Kubernetes API 应用这些规范,Kubernetes 会推断出为达到配置文件中声明的状态需要执行的操作,并执行这些操作。这种模式允许检测 Git 中的预期状态和实际运行状态之间的变化(漂移检测),从而实现纠正措施。


Kubernetes 有一个扩展功能,可以扩展其基本功能,允许将额外的检查作为部署需求验证的一部分。Kubernetes 准入控制(Kubernetes Admission Control,KAC)机制在简化 GitOps 并为交付提供所需的可靠性和安全性方面发挥了关键作用。


KAC 还提供了一项关键的能力,将流程要求的企业策略与开发流程区分开来,允许策略变化独立于开发流程。例如,为了确保与 SOX 合规性的要求保持一致,也就是确保有一个以上的人参与验证对生产环境的修改,在允许部署之前,准入控制策略可以验证 Git PR 审查和 QA 批准是由两个不同的人进行的。

利用这些能力,GitOps 模型可以实现如下功能:

  • 配置监控

    运维团队可以在 Git 仓库中声明配置,然后通过监控 Git 配置变化的控制器模块将该配置应用到目标环境中。

    控制器还可以监控目标环境,检测与 Git 中所声明配置的漂移,然后同步至目标环境,使应用程序符合预期的配置。

  • 自由使用 IDE 和 Git 工具

    后台的规范允许在交付过程中使用适当的闸门和护栏。这使得开发人员可以继续使用他们熟悉的工具,同时还能够达到软件交付所需的安全性和可靠性等级。


这种模式对开发人员的巨大优势在于,他们只需要采取一个步骤即可参与 DevSecOps 的工作流,即在目标环境中寻找变更并进行协调(reconcile)。在他们的 DevOps 流程中,不需要执行像安全检查、测试、设置策略或寻求批准这样的独立步骤。


在 GitOps 模型中,可以要求 DevOps 工具异步地执行它们的行动,以代替顺序的编排步骤,然后在部署时,验证所需的步骤是否均已经按照指定的策略执行完成。


例如,代码检入(check-in)执行持续集成(CI)的单元测试,允许开发人员拥有更快的开发/测试周期。而二进制扫描、动态扫描和其他策略检查是与开发人员的工作流异步进行的。测试用例可以自动运行,或手动进行集成测试,并将结果发布到同一个或另外的中央仓库中。存储在中央仓库中的结果会与已签名二进制制品相关联,以便于进行验证。这通常是通过 CI 的输出来完成的,例如,一个可以进行签名的容器。对于生产环境的部署,Git 配置会随着新的版本清单而进行更新。


当新版本的配置更新到 Git 仓库时,将会触发 Kubernetes 命名空间的部署。然后,准入控制器的配置将触发基于容器签名元数据的检查,以确定是否允许部署。这些检查将确定静态扫描、动态扫描、合规性要求(如 SOX)和测试结果是否可以接受部署,从而批准或拒绝部署,并向用户发送关于失败原因的通知。

开放策略代理(Open Policy Agent,OPA)网关Kyverno是实现部署准入控制检查的示例框架。它们可以被配置为 Kubernetes 的扩展,并包括一个开放策略代理或 Kyverno,以验证安全策略。当一个新的应用程序或 Git 变更得到应用时,该扩展会识别新的部署需求,并运行安全策略检查,以确定是否满足所有指定的安全性和合规性要求。然后,它可以批准部署或停止部署。


虽然这些都是帮助实现 GitOps 模型的优秀框架,但它们还不支持以下功能:

  • 集中审计各种异步运行的工具所执行的交付检查

  • 修改和查看策略的接口,并将其应用于不同类型的应用程序和 Kubernetes 集群。

  • 对运行在各种 Kubernetes 集群上的应用程序及其安全状态、解析需求等的可见性。


这意味着,尽管 GitOps 模型有可能使开发人员的生活更简单,但还需要额外的工具来实现实时可见性和协作的能力。


在企业环境中,安全团队应该能够查看所有应用程序的合规状态,包括为特定的应用程序设置例外。系统应该能够通知开发人员组的违规行为,并与安全团队合作解决特定问题,例如,在已部署的应用程序中发现的新漏洞。这些功能对于在不影响软件交付速度的前提下确保安全性至关重要。


软件交付工作流中的速度是至关重要的。但没有安全性和合规性的速度是鲁莽的行为。用于 DevSecOps 的 GitOps 模型提供了最好的方案。它可以让开发人员专注于他们的项目,而不必了解安全性相关的问题,并在快速的开发/测试周期中学习使用编排器工具,同时允许他们继续使用原来所选择的工具。另外,它可以使 SecOps 在软件交付工作流中添加所需的护栏,并在风险出现时将其暴露出来,从而更快、更容易地解决它们,以实现更安全、更可靠的软件发布。只不过,我们还没有完全达到这个目标,但在未来一两年内,预计会有大量的解决方案进入市场,使真正的 GitOps 成为现实。


原文链接:

Accelerating the Secure Software Delivery Lifecycle with GitOps


相关阅读:

Palantir 如何构建基于 GitOps 的内部开发者平台

GitOps是皇帝的新衣吗?

为什么说可观察性是解锁GitOps的关键

2023-06-09 15:3854401

评论

发布
暂无评论
发现更多内容

兆骑科创创投平台,创赛承办,投融资对接,项目落地孵化

兆骑科创凤阁

兆骑科创海内外高层次人才大赛平台,双创赛事活动举办

兆骑科创凤阁

Kubernetes Crossplane VCluster构建新集群

CTO技术共享

开源 签约计划第三季 8月月更

免费云管平台有吗?咨询电话多少?

行云管家

云计算 企业上云 云管平台

大数据开发课程靠谱吗?

小谷哥

Kubernetes Ingress 控制器讲解

CTO技术共享

开源 签约计划第三季 8月月更

StarRocks 在 58 集团全业务线的深度实践

StarRocks

数据库

权威发布! 开发人员需要关注的11种顶级恶意软件

SEAL安全

网络安全 软件安全 恶意软件 软件供应链安全

什么密码,永远无法被黑客攻破?

Authing

聊聊阻容降压原理 和 实际使用的电路

矜辰所致

电路设计 8月月更

直播短视频源码——直播与短视频之间的区别如何解决

开源直播系统源码

软件开发 短视频源码 直播系统源码 直播源码 一对一视频聊天系统

java课程学习难度怎么样

小谷哥

大模型落地实践:同花顺大模型技术应用及优化

澜舟孟子开源社区

人工智能 自然语言处理 预训练模型

基于SpringBoot的OnlineMusicPlayer项目

bug郭

签约计划第三季 8月月更

易观分析:2022年Q2中国跨境进口零售电商市场规模为1171.0亿元

易观分析

报告 跨境进口 零售电商市场

学大数据需要具备什么基础知识点?

小谷哥

开源一夏 | Java"实现"svn文件对比

六月的雨在InfoQ

svn 开源 文件对比 8月月更

leetcode 23. Merge k Sorted Lists 合并K个升序链表(困难)

okokabcd

LeetCode 数据结构与算法 栈和队列

HADOOP学习笔记之HDFS

薛定谔的猫

hadoop hdfs

零基础web前端学习靠谱吗

小谷哥

焱融科技入选“2022 中关村国际前沿科技创新大赛”大数据与云计算领域 TOP10

焱融科技

文件存储 分布式文件存储 获奖

2022-08微软漏洞通告

火绒安全

microsoft 终端安全 安全漏洞

IDC:阿里云位居2021年中国关系型数据库市场第一

Lily

Redis 介绍

武师叔

8月月更

数读海南数字经济 | 2022海南数字经济发展指数发布

易观分析

数字经济 经济 海南

在小程序中SVG的打开方式

Geek_99967b

小程序 SVG

PHP 项目对接视频号原来如此简单,小白也能轻松完成【带附件】

CRMEB

头脑风暴:一和零

HelloWorld杰少

算法 LeetCode 数据结构, 8月月更

地址标准化服务AI深度学习模型推理优化实践

阿里云大数据AI技术

深度学习

Kubernetes监控 Harbor

CTO技术共享

开源 签约计划第三季 8月月更

程序员培训班哪家教的比较好

小谷哥

借助GitOps实现快速、安全的软件交付生命周期_软件工程_InfoQ精选文章
OSZAR »