Nitro Systemに関するまとめ


今回のネタについては、2020年、2021年のre:Inventでのセッション、CMP301をまとめた内容になります。
また、日本語の情報ですと、クラスメソッドの千葉さんの記事を参考にしています。

1.Nitro Systemって何?


Nitro SystemはEC2の裏側で動いている仕組みで、通常、AWSを利用する上でユーザが意識することないレイヤーです。
後述しますが、Nitro Systemが登場する前までは、物理サーバのホストプロセッサ上で動作するハイパーバイザ内部でEBSやVPCとの接続を制御していました。Nitro Systemの登場後、AWSの各種サービスとの接続は、Nitro Systemのハードウェアが担うことになり、ハイパーバイザが簡素化され、さまざまなアーキテクチャのCPUが利用できるようになり、ユーザにとっては様々な用途に適合したEC2インスタンスを利用できるという恩恵があります。
Nitro Systemは、以下の3つのコンポーネントで構成されています。
・Nitro Cards
・Nitro Security Chip
・Nitro Hypervisor

それぞれのコンポーネントについて、順番に解説をしていきます。

2.Nitro Cardsについて


まず、さまざまなAWSサービスとEC2との連携を行っているNitro Cardsについて解説をしますが、その前にNitro Cardsが登場する前のEC2の構成を見てみましょう。

ハイパーバイザとしてXenを利用しており、ハイパーバイザの中にEBSやインスタンスストレージ、VPCなどと連携するためのコンポーネントが含まれていました。いわゆるモノリシックな構成です。そのため、新しいEBSやVPCのサービスと連携させる場合、ピンポイントで該当するコンポーネントだけを入れ替えたいのに、ハイパーバイザ全体を修正する必要があったのだと想定されます。
このモノリシックな構成からマイクロサービスのようにサービスとの連携を行うコンポーネントを外部に切り出しをし、ハードウェアに置き換えた仕組みがNitro Cardsになります。現在、Nitro Cardsには、VPCネットワーキング、Amazon EBS、Nitro SSD(インスタンスストレージ)、Redshift向けのAQUA向け機能が組み込まれており、APIエンドポイントを提供するNitro Controllerを介して接続されています。

上図の構成になったことにより、ハイパーバイザはNitro Cardsが提供するAPIを呼び出すようになり、ソフトウェアで定義されていたハードウェアを外部にオフロードしたことで非常に軽量化されました。また、図ではNitro Cards内の各種APIがNitro Controllerを介して密結合しているように見えますが、実際には疎な関係となっています。
これによりEBS、インスタンスストレージ、VPCのそれぞれのコンポーネントを自由にアップデートすることが可能になりました。

3.Nitro Security Chipについて


Nitro Security Chipは、BIOS、すべてのI/Oデバイスのファームウェア、サーバ上のほかのコントローラを含む不揮発性ストレージのI/Oをトラップするためのカスタムマイクロコントローラで、Nitro Controllerからのみ制御されます。
サーバのファームウェアの更新は、AWSが行い、更新はNitro Systemを通じて行うことでセキュリティを確保しています。

また、Nitro Security Chipは、ハードウェアのセキュアブートをサポートします。サーバが起動する際、サーバ上のすべてのファームウェアをチェックし、不正な方法で変更されていないことを確認します。
この不正な方法で変更されていないことを確認し、リセット状態にできる仕組みの必要性は、オンプレミスだとピンと来ないかもしれません。AWSにおける物理サーバは、さまざまなユーザが利用する共有リソースです。たとえ占有サーバとして起動しても、そのサーバを起動前に誰が使っていたか分かりません。そのため、常にリセット状態でサーバは起動される必要があります。

4.Nitro Hypervisorについて


Nitro HypervisorはXenに代わる仮想基盤として、KVMをベースに開発されました。
Nitro Hypervisorは軽量な仮想化基盤であり、Nitro Hypervisor以前にEC2インスタンスとハードウェアとの間のI/Oを担っていた管理用VM(Dom0)が廃止され、ハイパーバイザから直接、VPCやEBS、インスタンスストレージに対してアクセスできるようになりました。
これにより管理用VMのオーバヘッドがなくなり、物理サーバのリソースを有効に利用できるようになっています。




この記事が気に入ったらサポートをしてみませんか?