← 一覧へ戻る

Claude が書いた記事

Azure VNet 暗号化の裏側 ── SmartNIC が境界で全自動暗号化

VNet 暗号化をポチッと ON にすると VM 間通信が暗号化される ── VM は何も設定してないのに、いつ・どこで暗号化されるんや? SmartNIC が境界で DTLS を全自動でかける仕組みを、eSwitch のハードオフロードの続きとして掘った学習ログ。

俺の最初の疑問

Azure の VNet 暗号化を、ポータルでポチッと ON にするだけで、VNet 内の VM 間通信が暗号化されるらしい。でも VM の中では何も設定してへん。いつ、どこで暗号化されてるんや? vNIC で受け取った後か?

まず一言でいうと

暗号化してるのは VM やなくて、ホストの SmartNIC。VM が送った平文パケットを、物理ネットに出る境界で SmartNIC が DTLS でカプセル化して暗号化し、受信側ホストの SmartNIC が復号してから VM に渡す。VM / OS は暗号化を一切意識せず、CPU 負荷もほぼゼロ。Microsoft のドキュメントも VM 間を “creating a DTLS tunnel” で暗号化する、と明記している (MS Learn)。

これは前の記事の eSwitch / VFP のハードオフロード の応用や。あそこで「eSwitch はフロー単位で暗号化などをハードでやる」と裏取りした ── その暗号化の具体例が、この DTLS。

どこで暗号化されるのか

物理的なエンドポイントは ホストの SmartNIC。流れを追うとこうなる。

送信 VM の平文パケットは、AccelNet が割り当てた SR-IOV の VF で仮想スイッチをバイパスし、送信側 SmartNIC に直結する。SmartNIC が DTLS 暗号化し、外側だけ平文の状態で物理ネットを渡り、受信側 SmartNIC が復号してから VM の VF に届ける。暗号化区間は SmartNIC 〜 SmartNIC。

だから「VM が受け取った後に復号」やない ── VM の VF に届く前に、もう平文に戻ってる。なぜ VM 内でなく境界の SmartNIC かというと、(a) VM の CPU を食わない、(b) SmartNIC のハード暗号回路でラインレート処理できるから。ここが AccelNet 必須の理由や。SR-IOV で VF が SmartNIC に直結してないと、境界でハード処理させられない (この直結の仕組みは eSwitch 記事を参照)。

SmartNIC はどうやって「暗号化する」と判断するのか

SmartNIC が空気を読んでるんやない。Azure の SDN コントロールプレーンが、事前に SmartNIC のハードへ「このフローは DTLS 暗号化せよ」というルールを焼いている。ソフトが決めた論理を、ホスト OS を介して SmartNIC の物理シリコンにプログラミングする、というバケツリレーや:

  1. コントロールプレーン → ホスト OS の VFP … VNet 暗号化を ON にした瞬間、コントローラーが「対応 VM の名簿 + 暗号化ポリシー」を、その VM が載る物理ホストの VFP (仮想スイッチ拡張) に配る。
  2. VFP → SmartNIC のシリコン … VFP は「これは CPU で処理せずハードに丸投げ」と判断し、ルールを SmartNIC の FPGA 上の GFT (Generic Flow Table) に焼く。前の eSwitch 記事 の VFP ハードオフロードと同じ機構で、Azure の筋肉はこの FPGA / GFT や (Firestone et al., NSDI 2018)。
VNet 暗号化を ON にすると、コントローラーが対応 VM の名簿と暗号化ポリシーをホストの VFP に配り、VFP がそのルールを SmartNIC の FPGA 上の GFT に焼く。本番では VM のパケットが来た瞬間、SmartNIC が GFT を照合し、一致したフローだけ DTLS 暗号化する。

こうしておくと、本番では VM からパケットが飛んだ瞬間、SmartNIC がハードで GFT を一瞬照合し、一致したフローだけ DTLS 暗号化して送り出す ── CPU を一切経由せず、ワイヤーレートで。

そして粒度は VNet でなく VM (NIC) 単位。ここが一番の勘どころや。

設定は VNet 単位でポチッ。でも同じ VNet に対応 VM (Dsv5 等 + AccelNet) と非対応 VM (B 系等) が混在しうる。コントロールプレーンは「対応 VM の名簿」を配り、SmartNIC は対応ペアのフローだけ暗号化、非対応宛ては平文と仕分ける。

もし VNet を一括で暗号化してしまうと、非対応 VM 宛てまで DTLS 化されて相手が復号できず、通信が全滅する。だから実際は「対応 VM (NIC) と 対応 VM (NIC) の間だけ狙い撃ちで DTLS 化」に翻訳される。

混乱しやすいポイント

① VNet 単位で ON、でも適用は VM ペア単位

「対応 SKU + AccelNet」を満たす VM 同士だけ自動暗号化。非対応 VM 宛ては平文で、通信は切れない (上の図)。

② 既存 VM は停止 / 開始が要る

VNet 暗号化を ON にしても、起動中の既存 VM は即座には始まらん。停止 (割当解除) → 開始で、SmartNIC に暗号化フローを焼き直させる必要がある (MS Learn: “start/stop of existing virtual machines is required”)。

③ カバー範囲は「VNet 内の VM ↔ VM」だけ

暗号化されるのは VM の private IP 間 (同一 VNet / ピアリング先) の通信だけ。インターネット向け・PaaS・オンプレ向けは対象外や。ExpressRoute Gateway とは併用すると通信が壊れ、App Gateway / Azure Firewall とも併用できない、といった制約もある (MS Learn)。

で、なんで顧客はこれを欲しがるのか

仕組みを知るほど「クラウド SDN の内部なんて誰が覗けるんや」と思う。それでも需要はある。

  • ゼロトラスト: Microsoft のインフラのバグ (SDN の誤ルーティングで他人のホストにパケットが漏れる等) すら想定した保険。
  • コンプライアンス: 金融・政府・医療の監査基準が「データセンター内でも暗号化」を要求する。技術的な安全性の説明より「暗号化のチェックボックスに ✓」が要る。
  • タダで性能が落ちない: 従来 IPsec の CPU 負荷・遅延・鍵管理の地獄が無い。ON にしない理由がない。

用語の早見表

言葉つまり何の話?
VNet 暗号化同一 / ピアリング VNet の VM 間トラフィックを、ホストの SmartNIC が DTLS で自動暗号化する Azure の機能
DTLSUDP の上で TLS の暗号化をやる版。VNet 暗号化のトンネルに使われる (解説)
SmartNIC暗号化回路を積んだ高機能 NIC。境界でハード暗号化・復号する物理エンドポイント
VFPVirtual Filtering Platform。ホスト OS の仮想スイッチ拡張。ルールを SmartNIC にハードオフロードする
AccelNetAccelerated Networking。VNet 暗号化の必須条件。VM に SR-IOV の VF を割り当て、vSwitch をバイパスして SmartNIC に直結する
SR-IOV1 枚の NIC を複数の VF に分割し、VM に直結する仕組み。仮想スイッチをバイパスする
VFVirtual Function。SR-IOV で VM に割り当てる NIC の口。AccelNet の高速パス (暗号化がかかる) はこれ。synthetic な vNIC は予備
フローテーブルSmartNIC 上の「条件 → アクション」の表。コントロールプレーンが暗号化ルールを焼く先
MACsecIEEE 802.1AE。Azure が DC 間の物理リンクで常時かける L2 暗号化。VNet 暗号化とは別物
次に答える、設計者の問い で、それがなんやねん?

で、VNet 暗号化を入れるか、どこまでを基盤に任せるんや?

  • 基盤 (SmartNIC) に任せるか / 別の層でやるか。 VNet 暗号化がカバーするのは「同一 / ピアリング VNet の VM ↔ VM (private IP)」だけ。判断軸は「守りたい通信がこの範囲に収まるか」。インターネット / PaaS / オンプレ向けや、アプリの end-to-end はカバー外なので、そこは TLS など別の層が要る。
  • 責任境界: SmartNIC が守るのは VNet 内の VM 間リンクまで。それを越える暗号化はアプリや別機能の責任。制約 (AccelNet 必須、ExpressRoute Gateway・App Gateway・Firewall と併用不可) を踏めるかも判断軸に入る。

これに答えられると強い ── 「とりあえず全部 ON」でなく、どの通信をどの層 (基盤の DTLS / アプリの TLS / DC 間の MACsec) で守るかを、地図で言える側に立てる。

深掘りメニュー 次におすすめのトピック

この記事の続きとして、未来の自分が次に掘るといいトピック。

  • MACsec (IEEE 802.1AE) ── Azure が DC 間の物理リンクで常時かける L2 暗号化。VNet 暗号化 (DTLS) との住み分けで「どの層で守るか」の地図が完成する。
  • Geneve / VXLAN オーバーレイ ── VNet が多重カプセル化でマルチテナントを分離する仕組み。今回の DTLS の内側にある層。
  • Confidential Computing ── 通信でなく「使用中のデータ」を VM の中で守るアプローチ。基盤に任せる VNet 暗号化とは守る対象が違う。