DevOps的安全和隐私策略

66 阅读10分钟

DevOps安全和隐私-FP Complete的全面、易懂的指南,旨在帮助你理解为什么它们对你的DevOps战略的安全如此关键。

介绍一下Aaron

我是FP Complete的创始人兼董事长,我们帮助公司使用最先进的工具和技术来生产安全、快速、功能丰富的软件,而且速度更快、频率更高。

在创立FP Complete之前,我是微软的一名高管,在那里我担任分布式系统的项目经理,以及当时领先的软件开发工具Visual C++的总经理。此外,我还策划了MSN向基于互联网的服务器软件的转变,担任了比尔-盖茨的全职技术顾问,并创立和管理了公司的生产力工具团队,负责复杂的软件工程项目。

好了,关于我的事情就到此为止。让我们从认识到我们行业的不幸--但可预防--的现实开始讨论。

漏洞发生得太频繁了

我们都知道现在世界上的安全和隐私状况有多糟糕。项目正变得非常复杂。而我--只是作为一个样本--想指出,这是一个非常典型的漏洞。Monzo说,六个月来,未经授权的人可以接触到人们的秘密代码号码,他们的密码号码。我完全不是在挑出他们,而是说...... "这是非常典型的。"他们是一家银行,他们泄露这种类型的数据长达数月。

它是如何发生的?这不仅仅是因为日志和监控没有到位,尽管这可能是一个很大的因素。说实话,我们都非常努力地做我们的工作,但用户不断要求,高管不断要求新的功能。 而这种整合只是创造了一个又一个可能发生问题的点,而事情被忽略了。

渗透的机会无处不在

我想说的是,今天的应用程序更多的是在组装积木,而不是在编写新代码。但是,每当你通过添加更多的积木来增加复杂性时,你就会增加组件之间的接口点--有人可能做错的地方的数量。 因此,我们实际上是在组件A和组件B之间创建了一个入口点系统。 但是入口点--这听起来像是我是一个安全侵犯者会妥协的东西,对吗? 此外,我们正在手动配置我们的系统。人们并没有使用持续部署。因此,有一些向导应该去设置最新的服务器,或将其与数据库整合,或将其与网络与防火墙整合,或任何他们应该做的。每一个手动步骤都会为渗透和缺陷创造更多机会,因为人是不完美的。即使你的团队中最好的人做了一百次程序,也可能做错一到两次。自动扫描器会发现这一点,并在你意识到之前闯入你的系统。

让我们来谈谈DevSecOps

DevSecOps--将安全问题卡在中间的DevOps。我认为这是看待这个问题的一个好方法。我们希望将工程的所有不同部分整合到一个自动化池中,并将安全和质量保证作为该自动化过程的一部分。我们之前谈到自动化测试是我们构建的一部分。但作为技术团队,我们想走得更远。我们希望从项目的一开始就讨论他们需要多么安全。 他们应该防御或不创造什么风险?我们希望团队的每个成员都明白,系统停机--因为有人闯入并破坏了它,或者更糟糕的隐私侵犯,你永远无法挽回,因为当人们的个人信息被公布后,你无法取消它--我们需要让我们的团队成员知道,这些是优先事项,并把它们放在项目的待办事项列表中。如果安全部分没有完成,我们就不能称之为完成。这不是我们在最后才做的事情。我们不会建立不安全的、疯狂的、架构不良的应用程序,然后在最后,要求别人在它们周围建立一堵砖墙。因为只要有一个小人物穿过砖墙,那就是开放的季节。所以,我们希望工程师们知道他们所做的一切都应该被检查是否安全。这是一种文化的改变,说这是每个人的工作。

我们需要将质量保证与安全结合起来,这意味着有人正在检查我们编写的软件是否有弱点;有人正在尝试闯入,或者至少尝试运行工具,向我们展示闯入的常见方式,并对其存在进行评估。

而且,我们需要检查我们正在运行的云系统,以确保我们的部署,以及我们的系统操作和管理,是像我们所希望的那样安全。是否有人遗漏了一个步骤?我们要立即发现并解决这个问题。或者,理想的情况是,将我们设置所有系统的方式自动化,例如,使用协调软件包来自动配置我们的服务器,这样就不会出现在一天的晚些时候,人们更有可能犯错的情况。 因为,写得好的脚本即使在他们疲惫的时候也会做得很好。

而且,我们要确保我们所有的系统都得到更新和修补,而不是告诉人们,安全是浪费时间,他们应该回去工作的功能。

过程提示

要做到这一切,我们需要有一个简单的设计。而且,我鼓励人们关注这样一个观点:简单性和模块化设计是使系统更容易检查安全漏洞的好方法。

我们要确保在我们的模块化系统中使用的凭证--即一个软件登录到另一个服务或另一个软件数据库的地方--被保存在适当的安全凭证存储中。一个常见的安全违规形式是你看了某人的源代码,然后......哦,看!那是数据库的密码。那里有数据库服务器的密码......因为应用程序必须要连接到服务器。这是不恰当的设计。有一些特殊的凭证存储服务--你的团队应该使用它们。

我们要确保质量控制仍然是我们文化的核心,作为软件的开发者,这包括DevOps,这包括系统管理。很多时候,我们有一个好的软件,然后它被错误地部署。而这正是问题发生的地方。所以,如果你要测试你的代码是否写得正确,也许也要时不时地测试一下服务器的配置是否正确。 这是很值得花时间的。

如何加强你的安全

那么,你怎样才能在安全方面取得进展呢?好消息是,虽然这听起来像是一个可怕的、令人生畏的领域,但你现在就可以采取很多实际的步骤,你甚至不需要同时采取这些步骤,你可以逐步采取。这里有一些我强烈推荐的好步骤。

一个是在你的工程团队中,如果你有多个团队,每个工程团队都有人明确地成为安全人员。有人知道,他们的工作是注意安全问题和预防,如果有问题,他们就是那个会听到这个问题的人。他们应该有权力调查任何他们需要的东西,以确保系统中不存在安全漏洞。

使用其他公司的最佳实践。这是一个贯穿所有DevOps的好主意,包括DevSecOps。你不需要重新发明任何东西。你可以学习最佳实践,把其他公司认为有帮助的东西列在一个清单上,以寻找机会来逐步保护你的系统。我们只是一块一块地消除我们系统中存在的风险。我们不必等到某个神奇的日子,所有的安全问题都同时发生。

教导你的人了解安全。很多安全问题的发生是因为一个人没有意识到......谁不知道你不应该把密码放在每个人都能看到的源代码里?好吧,一个人在源代码中输入了密码,但现在它对所有人来说都在那里。因此,要确保培训和安全,以及它的重要性,以及如何做到这一点,是提供给你的团队中的每个人的。而且要确保有一个检查表。谁参加了安全培训?谁还没有参加过安全培训?

可怕但真实的事实:根据Price Waterhouse Coopers的报告,如果你想成为一个正常的IT运营,你应该将你的IT预算的11%到15%整体用于安全。这是一个重要的数字。我想我们都同意,随着更多的互联网工作和更多的模块和东西的导入,我们,如果有的话,可以担心这个数字会上升。因此,通过DevOps的自动化确实是一个控制这个数字的方法。但我不会认为它是一种使这个数字下降到零的方法。安全是每个人的工作,它将保持这种状态。

除此之外,我想说的是,使用它使用我们在这个演讲中早些时候谈到的其他技术。你不必成为下一个Equifax,没有监控。你不必因为没有自动化而允许愚蠢的错误。你也不必通过使用组件重新发明你自己的工具和流程来创造更多的安全漏洞。重用是你的朋友。

你现在可以开始的7个技术想法

我不会在这上面花太多时间,但我希望这是为那些更喜欢动手的人或监督动手的工程师的人准备的。这些是你可以采取的一些实际步骤,现在就可以开始打开安全的碎片。除了面向服务的架构之外,每一项都是你可以在本周或下周派人去做的事情。

这些都是简单明了的任务:

  1. 确保所有数据库都有防火墙。它们是一个常见的数据泄露源。
  2. 使用密码管理器来生成安全密码;启用双因素认证。
  3. 使用角色和策略为用户和服务分配特定的权限,而不是从根证书或特权用户运行一切。
  4. 使用堡垒主机或VPN来限制对内部机器的访问。
  5. 使用面向服务的架构(SOA)来分解需要高权限的组件。
  6. 在开发过程中包括代码分析工具,并在部署前执行修复。
  7. 用自动扫描器测试你的服务器是否有漏洞。

快速进入市场、可靠和安全

这是一个成功的公式!

所以,简而言之,你可以选择开启DevOps,使用很多已经解决的技术,很多已经解决的最佳实践和工程技术,并在无数其他公司--我们的客户、著名的互联网公司、所有人--进行测试。当我说 "所有人 "时,事实是少数公司已经在使用正确的DevOps。但足够多的公司,你不必成为第一个,你不必成为先锋。DevOps是一个成功的公式,它将使你更快地进入市场,而且更可靠,并具有更好的安全性。或者你可能成为下一个Equifax和下一个Capital One,这就是默认的情况。