Brendan Burns:关于机密计算和容器的那些事


【编者的话】本文作者Brendan Burns,微软Azure的VP,Kubernetes开源项目发起人之一,本文是他关于Azure机密计算和机密容器的布道文章。本文简单描述了什么是机密计算,它产生的背景,它在云原生计算上使用的优势,最后阐述了机密计算社区CCC当前的发展情况及发展愿景。

Kubernetes并不总是具有RBAC(基于角色的访问控制),或除简单身份验证之外的任何访问控制。很久以前,集群中的每个用户都是完全信任的,并且对集群所做的一切具有完全的可见性。当我们开始将RBAC添加到Kubernetes时,我记得当时以为这是一个标志着Kubernetes向运行“实际”工作负载过渡的重要时刻。尽管添加RBAC增强了Kubernetes API中表示的资源的安全性,但它并没有采取任何措施来保护工作负载本身。从今天开始,展望Kubernetes的未来,机密计算技术与Kubernetes集成,将为客户工作负载提供安全性,就像增加了RBAC,提供了对群集本身的安全访问一样。

全球用户越来越多地使用Kubernetes进行云原生开发和数字转换——云原生计算基金会(Cloud Native Computing Foundation)的2019年调查发现,有78%的受访者在生产中使用Kubernetes,与2018年的58%相比有了大幅增长。所有这些不同的用户都拥有推动其技术强度前进并推动其数字化转型的各种需求。但是几乎每个用户都需要不同的团队,系统和组织来协作并构建数据驱动的安全解决方案。

机密计算是一种改变行业的技术,是数据安全和隐私的基石。由于诸如GDPR条例,潜在的商业秘密泄漏以及对数据丢失的担忧等,组织长期以来一直难以大规模进入数字市场。这些问题带来了复杂而冗长的合同,法律问题,以及在迁移到云时与管理IT系统的人员相关的根本信任。

当数据或应用程序离开组织(无论是迁移到云还是合作伙伴位置)时,保护数据的安全尤为重要。在分析数据处理或现代微服务架构和Kubernetes等多应用程序环境中运行时,数据保护和特权数据访问的问题尤为重要。

机密计算初探

机密计算使用基于硬件的可信执行环境(TEE)来提供使用中数据的保护保证,以提高对执行代码和内存中数据的安全性保证,这些技术直到最近才可用。它消除了你需要信任的层,并保护了应用程序和数据免遭系统管理员、服务提供商或基础架构提供商的未经授权的访问或修改。

利用TEE环境,应用程序和数据所有者完全控制了谁可以查看,执行和计算数据。拥有用于通过机密计算保护应用程序和数据的深度防御策略,可以带来新的可能性,例如多方之间的丰富数据协作,安全密钥管理,内存数据库以及快速,安全的区块链等。

为了使组织或内部团队之间的信任合作成为可能,人们必须对数据进行编辑或匿名处理,这通常会使洞察力最小化。由于花费的时间成本,人为错误以及将数据精简到最低限度,数据准备过程通常成本很高,所有这些都导致了较低影响力的见解。
ebdb47af-confidential-containers.png

借助机密计算,组织现在可以将丰富的数据和代码带到云中以进行大规模处理。为了通过执行来保护代码和数据,机密计算使用了基于硬件和软件的组件的证明,并且数据解密密钥仅在占用空间验证(footprint validation)之后才释放给受信任的应用程序。

传统方法无法达到此级别的隐私和代码保护。

云原生计算和容器

在云原生和容器空间中,我们经常看到组织构建专有的机器学习(ML)模型或数据处理模型。需要保护打包为容器的专有软件,防止任何滥用,尤其是当它们存储在注册表中或挂载到主机时。当我们考虑负责任地使用AI的重要性并确保安全,公平地使用我们的模型时,尤其如此。在Azure中,我们通过“机密容器”启用了这种受信任的多方丰富数据模拟。让我们看一下它们的工作方式。


使用机密计算,“你不再需要信任集群的管理员或操作员,即可在Kubernetes集群中安全地运行诸如机器学习模型之类的高知识产权数据。”
机密计算可减少应用程序的攻击面,并防止主机操作系统、系统管理程序或主机操作系统层中的漏洞。这意味着使用机密计算的容器可以与受感染的容器在同一主机上运行,​​并保护其数据。

在Kubernetes的上下文中,这意味着你不再需要信任集群的管理员或操作员即可在Kubernetes集群中安全地运行诸如机器学习模型之类的高知识产权数据。
716f541f-lift-shift-enablers-to-confidential-computing-1.png

当应用程序的代码在安全的区域中运行时,除应用程序本身以外,任何人都无法访问该区域中使用的内存和执行代码本身。这提供了三个重要的属性来帮助保护你的容器。

首先,它提供了在同一主机上运行的容器之间的硬件隔离。无论多么恶意,运行在同一虚拟机上的不同容器都无法访问由TEE保护的数据。即使容器使用内核级漏洞来接管虚拟机管理程序中的主机操作系统,TEE安全区内的数据也是安全的。

其次,安全区可以通过容器加密,签名和证明来提供代码完整性,从而确保安全区本身内部仅运行受信任的代码。这样可以防止恶意攻击,这些攻击试图通过堆栈粉碎或其他攻击来修改容器中正在运行的代码。

第三,机密计算为附加到硬件和启动参数的数据解密信任提供安全的密钥释放。使用此数据保护,你可以将模型或其他专有数据运送到在不受信任的客户环境中运行的代码,并有力保证只能在安全的受信任执行环境的上下文中访问数据。这对于需要多个不受信任的方彼此协作的方案特别有用。

将这些功能放在一起意味着,即使在构建基于微服务的动态应用程序时,企业也可以建立对其代码和数据安全性的高度信任。云原生计算的全部目的在于开发可扩展的微服务以实现敏捷性,并将这些服务打包到共享集群中以实现最大效率。但是,这些优化不能以牺牲安全性为代价,幸运的是,在云原生计算的世界中增加了机密计算功能,从而可以不必牺牲安全性。

机密计算和开源社区

当然,云原生开发的另一个关键组件是开源。通过Kubernetes项目的开发,我们已经看到了社区的力量以及作为一个行业发展先进技术的价值。机密计算也在进行同样的公开努力。

我很高兴微软与IBM,红帽,阿里巴巴,谷歌,英特尔和其他公司一起成立了机密计算联盟(CCC)。现在,CCC中有七个开放项目,包括OpenEnclave SDK,这是一个硬件抽象层,可用于开发机密容器而无需与特定的硬件实现紧密绑定。

从广义上讲,CCC致力于解决有助于推动机密和云本机应用程序开发的最新技术水平的问题。首先是开发工具和SDK,使开发人员在构建新应用程序时更容易利用机密计算。

你可以想象,在受信任的执行环境中运行的细节可能很复杂,以及对于开发人员而言,保护其代码和数据的艰巨障碍。CCC中正在开发的工具和SDK旨在减少这种进入障碍,并使广大开发人员能够在其应用程序中使用机密计算。安全绝不应是只有那些愿意承受复杂性的开发人员才能使用的东西。如果我们真的要构建尊重隐私和负责任的数据使用的应用程序,那么我们必须使所有开发人员都可以使用安全性,例如受信任的执行环境。

当然,如果你要构建新的应用程序,那么能够轻松地使用安全的飞地(enclaves)进行开发非常有用。但是,对于遗留应用程序,采用机密计算技术几乎是不可能的任务。可能无法重构代码以利用受信任的执行环境,或者该应用程序甚至可能不是当前正在开发的应用程序。

为了简化这些用例,CCC的成员还专注于“提升和转移”工具,这些工具将使开发人员和操作员将完全不变的容器部署到安全的容器执行环境中。从镜像到执行的整个容器将运行在受信任的执行环境中,而不是要求应用程序被启发来理解特定领域。诸如ONNXGraphene之类的工具将真正使机密容器可以带给云原生生态系统最广泛部分的安全性民主化。

对新开发人员和迁移现有应用程序的关注引起了对云原生社区的极大兴趣,我们对与合作伙伴,供应商和开源项目合作为客户开发具体解决方案的参与感到非常兴奋。我们非常期待进一步合作,并且随着RBAC的发展,使机密容器自动成为Kubernetes的一部分。我相信这不会很久。

原文链接:Brendan Burns: Everything You Need to Know About Confidential Computing and Containers(翻译:池剑锋)

0 个评论

要回复文章请先登录注册