Traffic Analytics を検証してみた

# はじめに
Azureを運用する際、対象システムへの通信状況を確認するためにNSGフローログが有効である話を以前のブログで解説しましたが、今回はその続編です。

https://qiita.com/hiro10149084/items/422e329d8a8fb0192214

NSGフローログは、NSGを通るトラフィックに関する情報（From-ToやAllow/Deny）を記録しているログです。システム障害時にどこからの通信ができてきるか or できていないかを調べるのに最適ですが、実際の運用シーンにおいては、NSGフローログがサブネットに紐づくNSGに出力されるのか、NICに紐づくNSGに出力されるのかが不定であるため、両方のNSGフローログを見る必要があったり、また、NSGフローログの生ログはJSON形式で大量な情報が出力されているため、解析に時間がかかったりするものです。それを解決するためには、NSGフローログの設定から、Traffic Analyticsを有効化することが一つの解になります。今回は、そのTraffic Analyticsについて検証してみました。

# Azure Network Watcher の概要
そもそもNSGフローログやTraffic Analyticsは「Azure Network Watcher」というサービスの一つです。

https://learn.microsoft.com/ja-jp/azure/network-watcher/network-watcher-monitoring-overview

Azure Network Watcherは、VNET内のリソースに対して、特にネットワークの監視・診断・可視化を行うサービスです。VNET内のリソースであれば、VM、ALB、Application Gateway、ExpressRoute Gateway などあらゆるリソースの情報を見ることができます。他方、PaaS系のリソース監視には対応していない点は留意しておきましょう。

Network Watcherはリージョン毎に稼働するため、お使いのリージョンに対して有効化する必要があります。ただ、有効化の操作は超簡単でAzureポータルの「Network Watcher」から[+追加]を選択し、対象のリージョンを選択するだけです。名前は自動で”NetworkWatcher_リージョン名”となります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1199489/a0d127a2-7bc3-30f3-eb92-91c59a4537f1.png)

管理ブレードのメニューは以下の通りです。ネットワークに関する様々な機能が提供されていることがわかります。NSGフローログもNetwork Watcherの機能の一つです。今回は一番下にある「トラフィック分析」に注目していきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1199489/d500115e-2ffb-fce3-e867-b772bf7b4ae3.png)

## Traffic Analytics とは
Traffic Analyticsは、NSGフローログを分析して可視化してくれる機能です。例えば、あるVMに対するInbound通信について、どこからのアクセスが多いか、どのプロトコルで通信がきているか、といった統計情報に加えて、ネットワーク全体の負荷状況、悪意のあるアクセスの特定といったことも可能です。平たくいうと、NSGフローログ＋Log Analyticsの連携により得られた情報をわかりやすく可視化してくれるものです。分析間隔はこれまで60分間隔でしたが、現在では10分間隔が設定できるようになり、よりリアルタイム性が増すようになりました。

## Traffic Analyticsの有効化
Traffic Analyticsの有効化手順は至って簡単で、NSGフローログを設定する際に”トラフィック分析”を有効化するだけです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1199489/34b0522f-dbe4-6e59-9453-bd2e354af84e.png)

そして、分析間隔（1時間毎 or 10分毎）と分析に使うLog Analyticsワークスペースを選択します。設定作業は以上です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1199489/04cb4e9d-f63c-34ae-afcf-c3a945577ae5.png)

過去NSGフローログの設定はしたけど、Traffic Analyticsの設定はしていない、というケースもあるかと思います。（私のお客様環境もまさにそれ）Network WatcherからNSGフローログ画面を確認すると、Traffic Analyticsが無効になっているNSGについては、”Traffic Analyticsワークスペース”が空白になっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1199489/d44c0511-6fec-99f9-e86c-f0d064a7c2a0.png)

一つ一つ画面で有効化しても良いのですが、設定対象が大量にあって手間がかかる場合はPowerShellを使いましょう。まず、NSGのフローログ設定状況を確認するには下記のコマンドを実行します。
```PowerShell
$nw = Get-AzNetworkWatcher -ResourceGroupName NetworkWatcherRg -Name NetworkWatcher_<region_name>
$nsg = Get-AzNetworkSecurityGroup -ResourceGroupName <resourcegroup_name> -Name <NIC_name>

Get-AzNetworkWatcherFlowLogStatus -NetworkWatcher $nw -TargetResourceId $nsg.Id
```
(Traffic Analyticsが有効化されていない場合)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1199489/6b97c2a1-e900-c6cb-6313-3f53952e73bd.png)

(Traffic Analyticsが有効化されている場合)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1199489/9b4a2ae8-9016-6343-cc7e-c15754b17da6.png)

Traffic Analyticsを有効にするには下記のコマンドを実行します。対象のNSGが大量にある場合は、PowerShellでループ処理を入れてしまえば簡単です。
```PowerShell
$nw = Get-AzNetworkWatcher -ResourceGroupName NetworkWatcherRg -Name NetworkWatcher_<region_name>
$nsg = Get-AzNetworkSecurityGroup -ResourceGroupName <resourcegroup_name> -Name <NIC_name>
$storageId = "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/TA-test-RG/providers/Microsoft.Storage/storageAccounts/<storageaccount_name>"
$workspace = Get-AzOperationalInsightsWorkspace -ResourceGroupName <resourcegroup_name> -Name <Log Analytics_name> 

Set-AzNetworkWatcherConfigFlowLog -NetworkWatcher $nw -TargetResourceId $nsg.Id -EnableFlowLog $true -StorageAccountId $storageID -EnableTrafficAnalytics -Workspace $workspace -TrafficAnalyticsInterval 10
```

ちなみに、Traffic Analyticsを有効化する上でNSGのルールに関する制約はありません。例えば、NICのNSGで「AllDenyOutbound」といった全閉じルールを書いてもTraffic Analyticsの挙動には影響ありませんでした。


## Traffic Analytics ができること
ここでTraffic Analyticsの機能をご紹介します。

### ネットワークトラフィックフロー
トップ画面には、監視対象すべてのトラフィックのサマリが表示されます。詳細情報が見たい場合は、線の上をクリックするとLog Analyticsのクエリ検索画面に遷移し（結果出力済み）細かな情報を確認することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1199489/4708608d-b53c-212c-1e23-a9dfbc4dc3dc.png)

### geoマップビュー
なにやら世界地図が表示され、どこからどのような通信が来ているのかを可視化してくれます。今回は検証環境にVMを2台立てただけですが、何やら色々なトラフィックが発生していることがわかります。（NSGでDenyしている通信ばかりですが。）こちらも確認したい所をクリックしていけば詳細情報が表示されるつくりになっています。ちなみに「悪意あり」はMicrosoftの分析を元にサービス内のロジックで判断されているようですね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1199489/4117d13d-ad12-0d3b-1d2c-4855c768a7f9.png)

### ネットワークトポロジー
ネットワークトポロジーやサブネットトポロジーも可視化してくれます。下図は検証環境のネットワークトポリジーなのでつまらない画面ですが、実運用ではどのVNETがどういった関係性を持っているかなど、欲しい情報が一目で分かるようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1199489/7bc48485-3548-8121-1ccf-d48f8f7863e3.png)
サブネットトポリジーの方は通信の向きとトラフィック量に応じで線の太さが変わります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1199489/b786a318-9220-4ce4-5386-d18d5b6997d3.png)

以降は軽めにご紹介。。

### トラフィック分布
トラフィックフローをグラフ化したもの
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1199489/d5002a38-8b07-501a-4dc4-dd8b70140dd4.png)

### NSGヒット
どのNSGのルールがヒットしたかをグラフ化したもの
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1199489/d846bd3b-8e86-126a-46fb-bb54b021f4f4.png)

### アプリケーションポート
どのアプリケーションポートがヒットしたかをグラフ化したもの
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1199489/b9e398ba-7a68-3107-baa9-aaa0765fa8b5.png)

### ネットワークアプリケーションリソース
Azureのネットワーク系リソースに関する情報（検証環境だと出力無し）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1199489/f86554b7-0611-e73f-c209-5a2de6e4a56f.png)

## 実運用でおける有用性は？
Traffic Analyticsは、有効化した全てのNSGフローログから様々な情報を可視化してくれますが、全体感を分析する方に重きを置いているように感じます。もちろん詳細情報はドリルダウンしていけば行き着くのかもしれませんが、冒頭に挙げた”システム障害時にどこからの通信ができてきるか or できていないか”を調べるにはここまでの機能は使いません。その場合は素直にLog Analyticsでクエリを書いた方が良いでしょう。（それができるようになるだけでも価値はありますね。）
こんなことができるだけでも作業が捗りますね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1199489/5d1b6f28-4249-768a-2902-b7e1aa083f78.png)

とはいえ、ネットワークは可視化が難しい領域であるにも関わらず、ここまで多くの情報を可視化してくれるのは大変ありがたいことですし、これまで見えなかったものが見えてくることで新たな課題が見つかるかもしれません。利用にあたりコスト面は気にする必要はありますが、運用を高度化する上では是非積極的に有効化したい機能だと思います。

# おわりに
今回は「Traffic Analytics」について解説してみましたがいかがでしたでしょうか？実は私もまだ本格的な適用・運用を行っていないので早速本機能の有効性をおお客様に説明し使ってみたいと思います。それではまた！