Upgrade to Pro — share decks privately, control downloads, hide ads and more …

NSG フローログを支える技術 - NVF Advanced Flow Logging

OpenJNY
June 13, 2020

NSG フローログを支える技術 - NVF Advanced Flow Logging

Azure では「NSG フローログ」と呼ばれる名前で、トラフィック フローの履歴を記録する機能が提供されています。このスライドでは、NSG フローログを実現するために内部で実装されているアルゴリズムを紹介します。

OpenJNY

June 13, 2020
Tweet

More Decks by OpenJNY

Other Decks in Technology

Transcript

  1. NSG フロー ログを支える技術 A Virtualized Network Function for Advanced Network

    Flow Logging in Microsoft Azure Distributed System Azure Networking Junya Yamaguchi
  2. Virtualized Networking Function • 従来のネットワークでは、ネットワーク機能 (Networking Function; NF) は専用のソフトウェア とハードウェアを用いて実装されてきた

    • Domain Name Server、Web Server、Router • 近年、仮想ネットワーク機能 (Virtualized Networking Function; NVF) が、急速な機能追 加に対応するために注目されている • Azure/Amazon/Oracle/Google をはじめとする、各種クラウド ベンダーは軒並み導入 • NVF の主な利点 • ソフトウェアとハードウェアの分離 • 柔軟かつスケールするネットワーク機能 • オンデマンドな需要に対応 • コストパフォーマンスの良さ • ネットワークパフォーマンスと機能の最適化
  3. 仮想化 virtualization • VNF の基盤となっているのは仮想化 (virtualization) 技術 • Hypervisor によるハードウェア仮想化

    • 仮想 イーサネット スイッチ (vSwitch) • 通信機能に着目すると次のような技術が活用されている • 高 I/O 帯域のマルチコア CPU によるパケット処理 • SmartNIC による TCP オフローディング • 仮想メモリへの直接のパケットルーティング (シングルルート I/O 仮想化) • 仮想化はリソース可用性と運用効率を向上させる • 仮想アプライアンスのインスタンス化 • 適切な CPU コア、メモリ、およびインターフェイスへの VM デプロイ • 故障した VM の再初期化 • VM 状態のスナップショット採取とその復元
  4. SDN と Virtual Filtering Platform • ソフトウェア仮想化ネットワーク (Software Defined Networking;

    SDN) はクラウド環境に適 したネットワーク アーキテクチャ • SDN では制御プレーンとデータプレーンが分離 • ハードウェアに密結合していた制御プレーンを抽象化して、中央集権的な 1 つの大きな管理マネジメントコン ポーネントを構築する • SDN ではネットワーク ポリシーは一極集中される • Software Load Balancer (SLB)、Network Security Group (NSG)、VNet Peering、Virtual Routing Table, 帯域幅の課金、QoS、… • Azure では SDN プラットフォームを Virtual Filtering Platform (VFP) と呼ばれる仮想スイッチ のコンポーネントで実装している • OpenFlow のような Match-Action Table (MAT) モデルを採用 • ルールを適用することで任意のネットワーク ポリシーを適用できる
  5. VNF Infrastructure (cont’d) • Virtual Network Function (VNF): ソフトウェアで実装されたネットワーク機能。簡単に言えば、 ネットワーク機器を実装した仮想マシンのこと

    • NFV Infrastructure (NFVI): VNF を実行するための物理リソースと仮想化機能。ストレージ、コ ンピュート、ネットワークを仮想化する機能を有するプラットフォームのこと。簡単に言えば Hyper-V。 • VFP は Hyper-V 仮想化の一部であり、VFI の内部に存在する
  6. フローのロギング • フロー (flow) は、エンドポイント間での IP 通信の 5-tuple を表す •

    送信元 IP アドレス • 送信元ポート番号 • 宛先 IP アドレス • 宛先ポート番号 • プロトコル • テナントやユーザーは IP レイヤーのコネクションやネットワーク フローを記録したい • クラウド環境では、仮想ネットワーク、仮想マシン、ネットワークインターフェースはすべて仮想化 されたソフトウェア コンポーネント • VM ではすべてのフローを認知できない • 当然ながら Deny されたパケットは届かないので認識できない • なので VM をホストする SDN 側でその手の情報を収集する必要がある
  7. NSG Flow Logging v2 • Azure では NSG Flow Logs

    と呼ばれるサービス名でこのフロー ログサービスを提供している • 厳密に言えば version 2 の NSG フローログが該当 • この論文ではNSG フロー ログを改良した手法を紹介
  8. Terminology: フロー (flow) • フローはネットワークの論理的なコネクション • コネクション型プロトコル (e.g. TCP) とコネクションレス型プロトコル

    (e.g. ICMP, UDP) のどちらの通信も、フ ローの観点ではコネクションが存在する • 例) ICMP Echo Request と ICMP Echo Reply は同じフロー • パケットの 5-tuple で一意にフローを定義することが出来る • 送信元 IP アドレス、ポート番号、あて先 IP アドレス、ポート番号、プロトコル • フローは送信元のエンドポイントから、宛先のエンドポイントに送信したすべてのパケットの列を 表していて、トランスポート層のコネクションと 1:1 対応する • 各 NIC は NSG と呼ばれる L3/4 ファイアウォールを有している • NSG にはフローを許可 (allow) あるいは拒否 (deny) する ACL の規則が構成されている
  9. Terminology: フロー ロギング (Flow logging) • フロー ロギング (flow logging)

    は、フローに関するネットワーク機能 (NF) のひとつ • ユーザーは、フロー ロギングを利用して ingress/egress トラフィックについての情報を記録、閲覧、そして分析 する事ができる • フロー ロギングで収集したログのことをフロー ログ (flow logs) と呼ぶ • なお、フローロギングのことを単にフロー ログと呼ぶこともある • フロー ログは JSON で記述されていて、次のような情報を各エントリに持つ • 方向: outbound/inbound • メタデータ: e.g. タイムスタンプ、プロトコル、ポート、IP アドレス • アクション: allow/deny • メトリクス: e.g. パケット数、パケットバイト数 • テナントやユーザーは、多くの NSG に対してフローログを取得できる • 正しくポリシーが構成できているかのチェック • その他、DDoS 攻撃への対策、セキュリティ監査、接続問題へのトラブルシュート等に利用可
  10. Node Agent • Azure では各ノードで動くノード エージェント (node agent) でフローログの NF

    を実装している • ノードでは複数 VM がホストされているので、Node Agent の計算コストがかなり高い • 1つの VM ですら数千の inbound/outbound のフローを絶 え間なく作成/削除し続ける • それが複数あるので、Node の計算機資源に負荷がかかる のは想像にかたくない • Agent のチューニングは、ノードの有限な計算資源 (CPU、メモリ) を制約として、利用効率の最適化問 題で定式化可能
  11. Event Driven Communication • ログの出力には、Producer/Consumer モデルと呼ばれる分散アーキテクチャを採用 • VFP はフロー ログの生産者

    (Producer) • Node Agent はフロー ログの消費者 (Consumer) • お互いの間にはメッセージキューが存在 • Producer はどんな Consumer がイベント監視しているか知らない • すべてのイベントは、生産された順番に消費者に届けられる • イベント例 • フローの作成、削除 • メトリック (e.g. パケット数、バイト数) の報告
  12. Token Bucket Algorithm • トークン バケツ アルゴリズム (Token Bucket Algorithm)

    は、バケツに存在するトークン分だけ、 キューのイベントを処理するアルゴリズム • API のスロットリング (e.g. AWS API Gateway) や QoS (特にシェーピング) で用いられる • 可変長バケツ • バケツには ∆ = 1/ 秒ごとに1つのトークンが挿入される • バケットは 個のトークンを最大で保持できる (一杯になったらトークンは挿入されず破棄) • バケツのキャパシティ は固定ではなく、たまに = に変更される • イベント キュー • 保持できるイベント数が既知である固定長のキュー (FIFO) • フローがやってくるたびに、対応するロギング イベントがキューに挿入される • キューが一杯ならフローは挿入されず、破棄される
  13. 待ち行列モデルの要素 到着過程 サービス時間分布 サーバー数 システム容量 サービス規律 要求の発生パターン を確率モデルで表現 したもの。以下の 2

    つが一般的 • M (指数分布) • D (一定分布) サーバーの処理に関 する確率的モデル。 以下の 2 つが一般 的。 • M (指数分布) • D (一定分布) サービスを提供する サーバーの数。 システム内 (キュー) で保持できる最大の 要求数。無限に要 求をストックできる場 合は省略される。 要求のさばき方。基 本的にはキューなの で First-come First- served (FCFS) であ ることが多い。 A B / / c N / ケンドールの記法 (Kendall’s notation) フローイベントの到着 は、パラメータ X のポ アソン仮定に従うの で、今回は M ストレージへの書き 込みは定数時間と 仮定出来るのでの で、今回は D フローログを書き込む ライターは複数を仮 定している。その数 を S で表現 キューのバッファーサイ ズは最大値があり、 それを B とする 先に来たものを優先 的に処理 (FCFS) M/D/S/B Queueing Model
  14. トークンレートの調節 • トークンレートが CPU/メモリ利用率を調節する鍵 • キューに入ったフローイベントは、キューの中で順番を待つ • サーバー (writer) がログを吐き出すのには

    CPU を消費 する • 一方で、キューのサイズ や CPU 資源は有限 • => 「どれだけキューに入れるか」の調節が大事 • トークンレートを調節する 2 つの手法 • Continuous-time method: キューにフローイベントがやっ てくるたびに調節 • Discrete-time method: 一定時間毎に調節 バケットサイズはトークンレートと等 しくなるように自動調節される
  15. Continuous-Time Adjustment • 表記 • 現在のトークンレート: • トークンレートの規定値: • 現在のキューでの待ちイベント数:

    • キューの容量: • キューの閾値: 0 < < ℎℎ < • キューにイベントが来るたびに以下の通り調整する • ≔ if < • ≔ 2 if ≤ < ℎℎ • ≔ 0 otherwise
  16. Discrete-Time Adjustment • 前提 • 一定間隔 秒ごとに調節を行う • 次にチェックするまでにキューに挿入されるであろうイベン ト数

    が、キューのキャパシティ を超えてたらまずいの で < を満たしたい • 残り容量 − または次回チェック時までの期待 イベント数 の小さい方で、トークンレートを更新 • ≔ min( − , ) • これだけだとフラッピングしちゃうので、さらに /2 以 下に抑える制約を加える • ≔ min(min − , , /2) を大きくしすぎた事によって − が小さくなってしまい、次更新時に急 減してしまう 一気に子供にお年玉をあげると 全部使い切ってしまうから、小 分けにして与える気持ち
  17. フロー ログで取れる情報 NSG のフローのログ記録の概要 - Azure Network Watcher | Microsoft

    Docs https://docs.microsoft.com/ja-jp/azure/network-watcher/network-watcher-nsg-flow-logging-overview
  18. フロー イベントの数 • Node Agent はノードでデプロイされている全ての VM からの要求をさばく • 最大では

    1 分間で 4010 K のフロー ログ出力を行っている時点も • つまり、1 秒間で 66.8K フローを処理している • East US 2 リージョンでは 1week に 2500 Gbytes もログを出力している 3,250k 2,539 GB /week
  19. 結論 • クラウド環境でトラッフィク フローをログ出力するための、新たな仮想ネットワーク機能 (VNF) 手法を提案した • アーキテクチャ、設計思想、そしてフローログ VNF 周辺コンポーネントは、以下の要素によって

    支えられている • Software Defined Networking • 可変バケットによるトークン バケット アルゴリズム • スロットリング レート (トークンレート) を調整する 2 つの調節手法 • この VNF は実際に Microsoft Azure の主要な機能の1つとして、全世界のユーザーに利用さ れている • サービス名は NSG フローログ (version2) • フロー ログ VNF のためのアルゴリズムは、待ち行列モデルやトークンバケットアルゴリズムを変更 することで、更にほかの VNF の開発にも応用することが出来
  20. 参考文献 A Virtualized Network Function for Advanced Network Flow Logging

    in Microsoft Azure Distributed System - IEEE Conference Publication https://ieeexplore.ieee.org/abstract/document/8796641 Azure Virtual Filtering Platform (VFP) - Microsoft Research https://www.microsoft.com/en-us/research/project/azure-virtual-filtering-platform/ NSG のフローのログ記録の概要 - Azure Network Watcher | Microsoft Docs https://docs.microsoft.com/ja-jp/azure/network-watcher/network-watcher-nsg-flow-logging- overview Token bucket – Wikipedia https://en.wikipedia.org/wiki/Token_bucket 確率離散事象論講義資料(滝根 哲哉) http://www-optima.amp.i.kyoto-u.ac.jp/~takine/tmp/shiryou.pdf