Part 2: Why Separation of Duties Matters(为什么职责分离很重要)
Published January 29,2018 by Brian Kelly.
蓝海科学 译
这是一系列讨论高性能DevOps团队如何大规模构建安全系统的第二篇文章。
运营人员应该是运营人员,专注于运营。开发人员应该是开发人员,并且应该专注于……开发。
遗憾的是,在许多软件团队中,开发人员和运营人员还肩负着安全职责:维护服务帐户、定义安全控制、控制敏感数据的访问等等。这样做会给已经有足够工作量的员工带来额外的负担。要求开发人员成为一个全新领域(安全)的专家也是不合理的,因为他们已经被认为是软件工程或系统管理方面的专家。
职责分离是速度的推动者
大多数关于职责分离的文章,都提到了它在防止利益冲突和欺诈方面的好处,以及如何应用它来减少任何一个人具有超越他应有的权力。对某些人来说,这似乎是很困难的,因为它令人想起官僚主义过程和专横委员会的情形来搞定这些事情。然而,一个高绩效的DevOps团队将把职责分离看作一个机会,把他们的团队成员集中在他们最擅长的方面,并围绕每个人的能力恰当地优化团队的工作流程。
成熟的团队有明确的角色和明确的职责分工。安全和监督由专门的安全人员处理,开发人员专注于编写代码,运营人员确保生产基础设施保持健康。每个组之间的“切换”(handoff)接口被编写(codified)到一个安全策略(Security Policy)中:开发人员创建安全策略以声明其应用程序或服务所需的权限,然后安全人员审查和批准此代码更改,操作员确保应用程序的部署按预期进行。
混合责任:痛苦的反模式
当一个组织中的任何一个开发、安全和运营角色组合在一起时,不可避免地会导致一个问题,即某人意外地导致了一个严重的问题。对于开发人员来说,这通常是因为他们不知道他们在生产系统中可能拥有的能力和因此可能无意中造成的损坏程度。2017年,一名初级工程师在他的上班第一天,意外删除了公司的生产数据库。发生这种事是因为他被赋予了访问雇主生产系统的完整权限。
这是一种含蓄的、无法言喻的角色组合:由于他拥有访问权限,这个不幸的开发人员也充当了一个运营人员,不管他是否知道。错误在于雇主,而不是雇员:他们没有将这些职责分开,从而阻止前述情况的发生。
每个角色的职责
开发人员应该能够编写代码和测试,而不必担心意外地破坏生产,并负责分别向运营组和安全组证明和传达其应用程序的托管(hosting)和安全需求。
运营人员的工作是满足正在生成的应用程序的托管需求,并确保它们仍然可用。
安全人员负责向开发人员请求的应用程序授予权限,并确保在系统范围内实施足够的安全实践。
正如拥抱DevOps并不意味着开发人员也要扮演运营人员的角色一样,拥抱“DevSecOps”并不意味着开发人员必须另外成为安全专家。高绩效的组织已经学会了这一点,这使得他们不再使用“快速行动,打烂东西”(movefast and break stuff)的指导方针。相反,他们的哲学已经成熟到“快速行动,因为你知道你不会打烂东西”。
在本系列的下一篇文章中,我们将了解高性能组织如何聚焦于流(flow)和速度,同时保持非常强的安全态势。