Microsoft的Rust(或创建安全守护程序Azure IoT Edge)



译者的注意: Rust是一种相对较年轻的编程语言,在此开发阶段,实用示例总是很有趣。 众所周知,英特尔,Dropbox,亚马逊,Facebook,Google和其他公司在其项目中使用Rust。 关于从Microsoft的项目中使用Rust的信息是众所周知的,但没有任何细节,这可能是有关Microsoft使用Rust的第一本官方出版物。 (产品本身的技术详细信息按“原样”提供,请在公司网站上指定详细信息)

Azure IoT Edge是由Microsoft的Azure IoT开发团队创建的开源跨平台软件项目。 “ Azure IoT Edge”是基于物联网中心的物联网服务。 此服务面向需要分析数据而不是在云中但在边缘设备上的客户。 由于将部分工作负载转移到边界区域,设备花费了更少的时间将消息发送到云并更快地响应事件。” [摘自官方俄文文档(1)-大约 译者]

这篇文章解释了为什么我们选择Rust作为在产品中实现Security Daemon组件的编程语言的一些原因。

安全守护程序加载Azure IoT Edge运行时。 它充当Azure IoT Edge运行时与许多主机服务(例如容器运行时和加密硬件设备安全性安全模块(HSM)和受信任的平台模块(TPM))之间的通信的中介。

安全守护程序的技术堆栈选择


当我们开始研究安全守护程序(以下称为edgelet )时,我们确定了以下主要设计目标:
  • edgelet必须是不需要运行时的本机组件,例如.NET CLR。
  • 由于Edgelet将用作访问设备上的HSM / TPM设备的通道,因此它必须是安全的。
  • edgelet将通过C应用程序二进制接口(ABI)与HSM / TPM设备进行通信,因此加载公用对象/ DLL和调用C函数应该很简单。

根据这些要点,我们必须选择以下编程语言之一:C或C ++或Rust,它们可以编译为本机代码。 不愿意承担垃圾收集器的开销意味着Go不适合我们。 守护程序的安全性要求意味着我们希望避免内存和并发错误。 事实证明,鉴于这些限制,Rust非常适合我们。 在此博客的上一份出版物(2)中(表示Microsoft安全响应中心博客-翻译) ,考虑了选择Rust作为编程语言的优势。

我们喜欢什么


在向公众发布Azure IoT Edge之前,我们聘请了外部安全提供商来测试渗透软件。 他们没有发现Rust中代码库的安全性有任何问题,这对我们来说是对我们选择正确性的确认。 从一开始,我们就决定将编译器将所有警告视为错误,包括由clippy验证的错误。 我们的持续集成系统拒绝未通过rustfmt的请求池,从而确保整个代码库中的代码格式一致。

更新Rust和Cargo编译器的过程[装配和包装管理系统-大约 转换器]在Azure IoT Edge中无缝工作。 升级到新版本的编译器几乎总是一件容易的事。

锈的接受


下一步是学习语言。 与其他流行的编程语言相比,Rust的入门门槛很高,我们担心这项研究会对项目时间表产生什么影响。 我们的团队在C,C ++,C#和Java方面拥有丰富的开发人员,对于我们来说,幸运的是,还有几位对Rust充满热情的开发人员!

我们举办了Rust讲习班,在其中,我们带领了一个团队,以我们的经验很难理解的那部分语言。 这些时间消耗被证明是非常有用的。 我们发现学习语言最终并没有像我们想象的那么大问题。

在4到6周的时间里,几乎每个团队成员都对Rust中的源代码做出了不小的贡献。

难点


尽管我们在微软使用基于Rust的产品启动产品的首次体验是完全成功的,但我们仍要注意一些困难点:
  • 与其他一些较成熟的语言相比,Rust生态系统仍然相对较新。 这意味着我们经常不得不创建基础架构的某些部分,否则我们可能就不需要创建这些基础结构。
  • 解析编译器错误消息有时会变得太复杂,特别是在使用Tokio(3) [Rust的异步框架] Futures或std :: iter :: Iterator大量使用组合器的代码时。
  • 曾经完全支持C#编辑和调试工具以及Java代码的团队在Rust中找不到相同的支持。 实际上,VS Code Rust RLS扩展不稳定。
  • 东京未来链分析中的挑战
  • 有时,要整理出在Tokio Future组合链中不可避免出现的复杂类型并不容易。


接下来是什么


这里公平地指出,Azure IoT已与Rust编程语言完全集成。 自从我们发布Azure IoT Edge之后,Rust的使用才有所增加。 当前正在积极开展工作的许多云服务项目都是用Rust编写的。 Rust提供的三位一体(内存安全性,数据竞赛安全性和性能)非常适合Azure IoT。 希望以后我们对此有其他意见!

IoT平台SWE总经理Raj Wengalil

参考文献


(1) docs.microsoft.com/zh-CN/azure/iot-edge
(2) msrc-blog.microsoft.com/2019/07/22/why-rust-for-safe-systems-programming
(3) tokio.rs

来自翻译者:感谢您在这里翻译Legatus88Funkill ,俄语电报集团Rust(@rustlang_ru),KDPV所提供的帮助

Source: https://habr.com/ru/post/zh-CN469961/


All Articles