DevOps vs DevSecOps:在一家银行的情况如何



该银行将其项目外包给许多承包商。 “局外人”编写代码,然后以不太方便的形式传输结果。具体来说,过程看起来像这样:他们转移了一个通过了功能测试的项目,然后已经在银行范围内对其进行了集成,负载等测试。经常发现测试是过时的。然后一切都回到了外部开发人员。如您所料,这意味着需要很长时间来修复错误。

银行认为有可能而且有必要将整个管道从提交到发布“拖到底层”。因此,一切都是一致的,并在银行负责产品的团队的控制下。也就是说,似乎外部承包商只是在办公室隔壁房间的某个地方工作。在公司堆栈上。这是普通的devopa。

秒是从哪里来的?银行安全对外部承包商如何在网络段中工作,谁可以访问,如何使用代码以及谁使用代码提出了很高的要求。只是IB还不知道,当承包商在外面工作时,几乎没有遵守银行标准。在几天之内,每个人都需要开始观察它们。

一个简单的启示,即承包商可以完全访问产品代码,这已经颠覆了他们的世界。

在那一刻,DevSecOps的故事开始了,我想讲述一下。

哪家银行从这种情况中得出了切实的结论


关于一切都在错误的领域中完成这一事实引起了很多争议。开发人员说,安全只是企图阻碍开发,而作为守望者,他们却试图不加考虑就禁止。反过来,安全防护人员在选择以下观点之间犹豫不决:“开发人员在我们的电路中创建漏洞”和“开发人员未创建漏洞,但它们本身就是漏洞”。如果不是因为新的市场需求和DevSecOps范式的出现,这场争论将持续很长时间。可以解释,这种非常自动化的流程考虑了“开箱即用”的信息安全要求,将使每个人都满意。从某种意义上说,规则是立即编写的,并且在游戏过程中不会更改(IS不会意外阻止某些事情),并且开发人员会向IS告知发生的一切事情(IS不会突然遇到某些问题)。每个团队负责最终的安全,而不是一些抽象的哥哥。

  1. , , « ».
  2. , , .
  3. - , . , . .

也就是说,可以允许承包商,但是您需要将他们划分为不同的部分。这样一来,他们就不会将某种形式的感染拖到银行的基础架构中,并且看不到太多不必要的东西。好吧,以便记录他们的行动。 DLP用于防止“下沉”,所有这些都已应用。

原则上,所有银行迟早都会这样做。然后,我们脱离了人迹罕至的地方,并商定了“局外人”工作在此类环境中的要求。出现了最大数量的访问控制工具,漏洞检查器,电路,组件和测试的防病毒分析。这就是他们所说的DevSecOps。

突然变得很清楚,如果在此DevSecOps之前,银行安全性无法控制开发人员方面发生的事情,那么在新的范式中,安全性的控制方式与基础架构上的普通事件相同。直到现在,才有有关程序集,库控制等的警报。

仍然只有将团队转移到新模型。好吧,创建一个基础架构。但是这些都是小事,这是如何画猫头鹰的。实际上,我们为基础架构提供了帮助,这时开发流程发生了变化。

发生了什么变化


他们决定分小步实施,因为他们意识到许多过程将分崩离析,而且许多“局外人”可能无法在所有人的监督下承受新的工作条件。

首先,我们创建了跨职能团队,并学习了如何在考虑新需求的情况下组织项目。就组织讨论而言,流程是什么。原来,所有负责人都在组装流水线。

  • CI: Git,Jenkins,Maven,Roslyn,Gradle,jUnit,Jira,MF Fortify,CA Harvest,GitlabCI。
  • CD: Ansible,Puppet,TeamCity,Gitlab TFS,Liquidbase。
  • 测试: Sonarqube,SoapUI,jMeter,硒:MF Fortify,性能中心,MF UFT,Atascama。
  • 演示(报告,交流):Grafana,Kibana,Jira,Confluence,RocketChat。
  • 运营:Ansible,Zabbix,Prometheus,Elastic + Logstash,MF服务经理,Jira,Confluence,MS Project。

选择了一个堆栈:

  • 知识库-Atlassian融合;
  • 任务跟踪器-Atlassian Jira;
  • 工件存储库-“ Nexus”;
  • 持续集成系统-“ Gitlab CI”;
  • 连续分析系统-“ SonarQube”;
  • 应用程序安全分析系统-“ Micro Focus Fortify”;
  • 通讯系统-“ GitLab Mattermost”;
  • 配置管理系统-“ Ansible”;
  • 监控系统-“ ELK”,“ TICK Stack”(“ InfluxData”)。

他们开始建立一支随时准备吸引承包商参加的团队。已经意识到有几件重要的事情:

  • . — . , .
  • , . — , .

要迈出第一步,您必须了解正在做的事情。我们必须确定如何进行此操作。我们首先从基础架构和CI / CD自动化中帮助绘制目标解决方案的体系结构开始。然后,我们开始组装该输送机。我们需要一个基础结构,每个人都需要相同的基础结构,并且运行相同的传送带。银行认为,我们提供了带有定居点的选择权,然后就将建造什么以及确定什么方式做出了决定。

进一步创建电路-软件安装,配置。开发用于部署基础结构和管理的脚本。接下来是向管道支持的过渡。

我们决定对飞行员进行所有操作。有趣的是,在试点期间,银行中首次出现了某个堆栈。除其他外,针对试点量,建议国内供应商提早推出一种解决方案。安全在驾驶过程中认识了他,这给他留下了难忘的经历。幸运的是,当他们决定切换时,基础架构层已被银行中已有的nutanix解决方案所取代。在此之前,它是用于VDI的,我们将其重用于基础架构服务。在小批量生产中,它不适合经济,但在大批量生产中,它成为进行开发和测试的绝佳环境。

堆栈的其余部分或多或少是每个人都熟悉的。使用了Ansible部分中的自动化工具,并且安全防护人员与之紧密合作。在项目开始之前,银行使用了Atlassinovsky堆栈。Fortinet安全工具-它是由安全警卫自己提出的。测试框架是由银行创建的,没有任何问题。问题是由存储库系统引起的,我不得不习惯它。

承包商得到了新的堆栈。他们花了一些时间在GitlabCI下重写,并将Jira迁移到银行部门,依此类推。

一步步


阶段1。首先,我们使用国内供应商的解决方案,将产品切换到新创建的DSO网络部分。选择该平台的原因是交付时间,可伸缩性和完全自动化的功能。进行的测试:

  • 可以对虚拟化平台基础架构(网络,磁盘子系统,计算资源子系统)进行灵活,完全自动化的管理。
  • 虚拟机生命周期管理自动化(模板,快照,备份)。

在平台的安装和基本配置之后,它被用作第二阶段子系统(DSO工具,零售系统开发大纲)的放置点。创建了必要的管道集-创建,删除,修改,备份虚拟机。这些管道被用作部署过程的第一阶段。

结果-提供的设备不符合银行对性能和容错性的要求。DIT银行决定创建一个基于PAC Nutanix的综合大楼。

第二阶段。我们采用已定义的堆栈,并为所有子系统的自动化安装和后配置编写了脚本,以便将所有内容尽快从先导转移到目标电路。所有系统都以容错配置进行部署(此功能不限于供应商的许可策略),并且已连接到子系统以收集度量和事件。 IB分析了其要求的符合性,并给出了绿灯。

第三阶段。将所有子系统及其设置迁移到新的PAC。重写了基础结构自动化脚本,并以全自动模式执行了DSO子系统迁移。 IS开发路径由开发团队管道重新创建。

阶段4.应用程序软件安装的自动化。这些任务是由新团队的团队负责人设置的。

阶段5.操作。

远程访问


开发团队要求在使用电路时要具有最大的灵活性,并且在项目的开始就提出了从个人笔记本电脑进行远程访问的要求。该银行已经可以远程访问,但不适合开发人员。事实是,该方案使用了到安全VDI的用户连接。这适用于在工作场所中有足够邮件和办公包的人。开发人员将需要大量资源,高性能的大型客户。当然,它们必须是静态的,因为对于使用VStudio或其他SDK的用户来说,丢失用户会话是不可接受的。为所有开发团队组织大量密集的静态VDI,大大增加了现有VDI解决方案的成本。

我们决定直接开发对开发部门资源的远程访问。Jira,Wiki,Gitlab,Nexus,组装和测试台,虚拟基础架构。安全卫士对访问进行了设置,只有在满足以下条件时才能组织访问:

  1. 使用银行中已有的技术。
  2. 基础结构不应使用存储生产性帐户/对象记录的现有域控制器。
  3. 访问权限应仅限于特定团队所需的资源(以使一个产品的团队无法访问另一团队的资源)。
  4. 最大限度地控制系统中的RBAC。

结果,为此段创建了一个单独的域。该域包含开发段的所有资源,包括用户凭据和基础结构。使用银行中现有的IdM管理该域中记录的生命周期。

在现有银行设备的基础上,组织了直接远程访问。访问控制分为AD组,它们对应于上下文中的规则(一个产品组=一个规则组)。

管理虚拟机模板


创建组装和测试电路的速度是开发部门负责人设定的主要KPI之一,因为环境准备的速度直接影响管道的总体执行时间。考虑了用于准备基本VM映像的两个选项。第一个是最小图像大小,所有产品/系统的默认图像大小,最大程度符合设置的银行政策。第二个是包含已安装的重量级软件的软件的基本映像,其安装时间可能会大大影响管道的速度。

在开发过程中还考虑了基础设施和安全要求-保持映像最新(补丁等),与SIEM集成,根据银行采用的标准进行安全设置。

结果,决定使用最少的图像,以最大程度地降低维护它们的最新成本。与在每个映像中为新版本的软件安装补丁相比,更新基本操作系统要容易得多。

根据结果​​,从最低要求的操作系统集中编译出一个列表,由操作系统团队进行更新,并且管道中的脚本完全负责更新软件,如果有必要,更改已安装软件的版本足以将所需的标签传输到管道中。是的,这需要devops'a产品团队使用更复杂的部署方案,但是大大减少了支持基本映像的操作时间,而该服务可能需要100多个基本VM映像才能使用。

上网


银行安全的另一个绊脚石是从开发环境访问Internet资源。此外,此访问权限可以分为两类:

  1. 基础架构访问。
  2. 访问开发人员。

通过Nexus代理外部存储库来组织基础结构访问。即,未提供从虚拟机的直接访问。这使得可以与IS妥协,因为IS绝对不提供从开发部门访问外界的任何途径。

出于明显的原因,开发人员需要Internet访问(stackoverflow)。而且,尽管如上所述,所有团队都可以远程访问该电路,但是当您无法从IDE银行中开发人员的工作场所执行ctrl + v时,这并不总是很方便。

与IS达成一致,最初,在测试阶段,将通过基于白名单的银行代理提供访问权限。在项目结束时-访问权限将转移到黑名单中。准备了巨大的访问表,这些表指示了在项目开始时需要访问的主要资源和存储库。这些访问的协调花费了可观的时间,这使我们能够坚持最快地过渡到黑名单。

结果


该项目不到一年前就结束了。奇怪的是,但是所有承包商都准时切换到了新的堆栈,没有人因为新的自动化而离开。IB并不急于分享正面评价,但他没有抱怨,从中我们可以得出他们喜欢的结论。冲突平息了,因为IS再次感到有控制权,但同时又不干扰开发过程。这些团队承担了更多的责任,并且总体上,对信息安全的态度已经变得更好。该银行了解到向DevSecOps的过渡几乎是不可避免的,而我认为这样做是最温和和正确的。

系统架构师Alexander Shubin。

All Articles