MicrosoftはRust言語を実運用環境で採用した。「Azure IoT Edge」に向けたセキュリティデーモンを実装するプログラミング言語として利用している。Microsoft Security Response Center(MSRC)は、このような決定の背景と、実装過程で分かったメリットと課題について解説した。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
Microsoft Security Response Center(MSRC)は2019年9月30日(米国時間)、Microsoft社内におけるRust言語の採用事例を発表した。
「Azure IoT Edge」のセキュリティデーモンコンポーネントを実装するプログラミング言語として「Rust」を選択した背景と、実装過程で分かったメリットと課題が分かる。
Azure IoT Edgeは、MicrosoftのAzure IoTチームが手掛けるオープンソースのクロスプラットフォームソフトウェアプロジェクト。プロジェクトの目的は、クラウドからオンプレミスネットワーク内のエッジへとコンピューティング機能の分散を進め、管理する上での問題解決だ。
Azure IoT Edgeのセキュリティデーモンは、Azure IoT Edgeランタイムを起動(ブートストラップ)する。さらに、Azure IoTランタイムとさまざまなホストサービスの間で通信ブローカーとして機能する。例えばコンテナランタイムや、ハードウェアベース暗号化デバイスのHSM(Hardware Security Modules)やTPM(Trusted Platform Modules)などのホストサービスだ。
セキュリティデーモン(Microsoft社内ではエッジレットと呼ぶ)の開発に着手するに当たり、まず次のような設計目標を定めた。
これらの設計目標から、C、C++、Rustなど、ネイティブコードにコンパイルされるプログラミング言語を選択することになった。
ガベージコレクションのランタイムオーバーヘッドを避けたかったため、Go言語は選択肢から外れた。加えて、デーモンに必要なセキュリティ関連の要件から、メモリや並行性(コンカレンシー)に由来するバグに対処する必要のない言語が必要だった(関連記事)。こうした条件を踏まえ、Rustが最適だという結論に達した。
Azure IoT Edgeの一般提供を開始する前に外部のセキュリティベンダーと契約し、開発したソフトウェアに対するペネトレーションテストを実施した。その結果、コードベースのうち、Rustで作成した部分では、セキュリティ問題が見つからなかった。
開発時にはRustエコシステムが役立った。開発当初から、「rust-clippy」を使用し、Rustコンパイラがカバーしない範囲の細かい警告を出力させることにした。
加えて、継続的インテグレーション(CD)を実行する際、Rustコードの整形ツール「rustfmt」による処理を経ていないプルリクエストを却下する仕組みを採用したことで、コードベース全体で一貫したコードの整形が可能になった。
Rustコンパイラの更新プロセスとツール整備は順調に進んだ。コンパイラへのアップグレードは、ほぼ常にスムーズだった。
Rustは、他の一般的なプログラミング言語と比べて学習曲線の勾配が急だ。つまり学習の負担が大きい。このことがプロジェクトスケジュールに影響するのではないかとの懸念があった。
今回の開発担当者は主にC、C++、C#、Javaに精通していたが、Rustを熱心に支持するメンバーが数人いたことが功を奏した。そこでRustのハンズオンワークショップを開き、Rustの不慣れな部分に対する各メンバーの理解が進んだ。
最終的に、Rustの学習曲線は、予想したほど大きな問題にはならなかった。4〜6週間で開発チームのほぼ全てのメンバーが、Rustコードの作成に重要な貢献ができるようになった。
Azure IoT Edgeのセキュリティデーモンコードは、Microsoftにとって、初めて本番環境にデプロイしたRustコードだ。本番デプロイに至るまでの経験は全体的に好ましいものだったが、幾つかの課題に対処しなければならなかった。
このような課題はあったものの、Azure IoT Edgeの一般提供開始後、Microsoftでは、Rustの利用が拡大の一途をたどっている。既に多くのクラウドサービスの開発にRustを使っている。MSRCは、Rustが実現するメモリの安全性とデータの安全性、パフォーマンスは、Azure IoTに極めて適していると考えている。
Copyright © ITmedia, Inc. All Rights Reserved.