微服务体系结构(MSA)作为软件设计的最新趋势之一,旨在将可扩展的软件系统开发为可独立部署的小型服务(即微服务)的集合(Dragoni等人,2017年,Fowler和Lewis,2014年)。微服务可以有多种不同的解释,关于它们的特征(例如,微服务的规模)几乎没有共识(Jamshidi等人,2018)。然而,微服务的特点通常是提供有限数量的功能,通过轻量级消息传递方法(如HTTP api)彼此通信,围绕自主业务能力构建,并在高度隔离状态下进行维护和测试(Dragoni等人,2017年,Fowler和Lewis,2014年,Newman,2015年)。更快的部署、改进的可扩展性和更大的自治性是微服务系统(采用MSA风格的系统)的三大优势(Jamshidi等人,2018)。
在过去的几年里,一直在对MSA的不同方面进行研究。大量文献报告了从整体岩迁移到MSA的迁移技术(例如,Balalaie et al.,2016,Taibi et al.,2017a)(Di Francesco et al.,2019)。其他人研究微服务系统的测试和监控策略(例如,Heorhiadi等人,2016年,Heinrich等人,2017年)。另一项研究侧重于组织文化和结构的必要变化,以采用MSA风格(例如,Jamshidi等人,2018年,Haselboöck等人,2018年)。
然而,MSA中的安全仍然是一个开放的问题,并且没有得到足够的研究关注(Dragoni等人,2017年,Di Francesco等人,2019年,Waseem等人,2020年)。与MSA风格相关的安全问题很多,在传统的整体式建筑和面向服务的架构中找不到或关注的更少(Pahl and Donini,2018,Yarygina and Bagge,2018,Yu et al.,2019,Esposito et al.,2016)。它们的范围从单个微服务之间建立信任的需要(因为单个受损服务可能会恶意地影响整个系统),到微服务可以通过不同的技术和工具(例如容器)开发和部署,因此受到攻击的可能性越来越大,以更大的难度来保证运行中的数十个甚至上百个微服务的安全。此外,由于MSA风格是一种新的范式,且仍在不断发展,因此在设计和实施安全微服务系统方面,从业人员和组织之间存在知识差距(Ghofrani和Lübke,2018年,Zimmermann,2017年,Pereira Vale等人,2019年,Nadareishvili等人,2016年)。关于用于开发和部署微服务的(新)技术和工具(例如容器),存在着更重要的未知因素(McAfee,2018,Scott,2018,Zhang等人,2019a)。这是因为业界对这些技术和工具的潜在安全能力以及为安全目的配置这些技术和工具并解决其安全漏洞的最佳实践存在很多困惑(Bogner等人,2019年,Knoche和Hasselbring,2019年,Baškarada等人,2020年)。
在微服务系统中,缺乏安全意识和安全知识,往往会导致微服务系统开发中的安全决策不充分。这可能成为软件行业的一个实际问题,因为越来越多的组织已经或计划使用这种架构风格来实现软件解决方案的现代化或开发新的应用程序(Di Francesco et al.,2019)。我们的立场(部分)解决这个差距是自动识别和利用现有微服务系统的安全讨论。我们定义安全性讨论作为“开发人员讨论(对话)中的一段,包括与安全相关的设计决策、挑战或解决方案”. 有人认为,访问和学习过去的设计讨论和决策(如安全决策)有助于做出更好的设计决策(例如,Zimmermann,2017年,Pereira Vale等人,2019年,Capilla等人,2016年,Viviani等人,2019年)。然而,我们认为,从非微服务系统收集的安全讨论对于提高微服务从业人员对微服务系统安全的认识和认识可能是不实用的。为了证明我们的说法,我们首先需要确保微服务系统的安全是一个独特的挑战。这表明微服务开发者之间的安全讨论不同于其他类型的软件系统。然后,我们需要确认这样的安全讨论是否有助于保护微服务系统(例如,提高从业人员对微服务特定安全解决方案的认识)。
这样的安全讨论可以在商业和开源微服务系统的问题跟踪系统中找到。堆栈溢出帖子可以作为另一个源来识别微服务系统上的安全讨论。研究表明,这些构件包括广泛的信息,例如用户故事、需求、设计决策、设计解决方案、设计原理、缺陷报告等(例如,Bhat等人,2017年,Viviani等人,2019年,Tsay等人,2014年,Lopez等人,2019b)。因此,问题跟踪系统和堆栈溢出站是微服务从业人员共享和交流有关安全问题、实践、设计决策的知识并证明其安全决策的理想场所(Palacio等人,2019年,Lopez等人,2019b)。然而,手动识别安全讨论对于实践者来说是一个挑战,因为它容易出错,对实践者来说需要大量的时间,并且需要大量的领域专业知识(Bettaieb et al.,2019,Li and Chen,2020)。因此,需要一种自动化的方法来识别这些数据源中的安全内容。
在本文中,我们首先确定了GitHub基于MSA风格设计的十个开源项目。然后我们进行了一项由67名微服务从业者完成的在线调查,征求他们对微服务系统安全性的看法。调查参与者证实,保护微服务系统对他们来说是一个独特的挑战。他们还发现,以前从现有的微服务系统中收集的安全讨论对做出安全决策很有用。根据调查结果,我们开发了12个机器学习(ML)和3个深度学习(DL)模型,以自动识别微服务开发人员讨论(GitHub问题和堆栈溢出帖子)中的安全讨论。为了评估ML和DL模型(以下简称学习模型)的性能,我们手工构建了17277个段落的数据集并对其进行了标记。17277段,包括4813个安全讨论和12464个非安全讨论,是从两个数据源收集的:1692个问题讨论来自五个采用MSA风格的开源项目,以及498个带有“微服务”和“安全”标签的堆栈溢出帖子。实验结果表明,所有的学习模型都是有希望的,平均准确率为84.86%,召回率为72.80%,F1分数为77.89%,AUC(接收器工作特性曲线下面积)为83.75%,G均值为82.77%。在15个学习模型中,DeepM1(一个DL模型)表现最好,达到了86.73%的准确率、84.25%的召回率、85.47%的F1分数、89.63%的AUC和89.07%的G-mean。DeepM1的性能也超过了三个最先进的基线,改进幅度从1.018不等至3.756在所有指标中。
我们进行了另一项调查(验证调查),以证明DeepM1的结果在实践中的有用性和可操作性。一般来说,68%-78%的验证调查受访者认为DeepM1检测到的安全讨论在安全微服务系统的设计和开发中有七个实际应用。值得注意的应用是:检测到的安全讨论可以帮助他们在未来做出明智的安全决策,或者改进现有的次优安全决策,并提供提示/线索,以更快地定位微服务系统中的关键问题(如安全漏洞、安全错误等)。
本文的主要贡献是:(一)我们对微服务系统中的安全问题有了更好的理解。(二)这是开发ML和DL模型以区分微服务系统开发人员讨论中的安全讨论和非安全讨论的第一个工作。(三)我们构建了一个包含4813个微服务安全讨论和12464个非安全讨论的数据集。(四)我们免费在线发布本文中使用的模型和数据集的实现(Rezaei Nasab等人,2021年)。
纸张组织:在第2节中,我们提供了一个激励方案。第3节描述了从GitHub定位基于MSA的项目并构建安全讨论数据集的过程。第四部分介绍了我们的研究方法,包括调查和实验。第5节报告了调查结果。第6节回顾了调查结果,第7节报告了有效性受到的威胁。第九部分总结全文,并对未来的工作进行展望。