Azure Virtual Network Managerによるハブアンドスポーク構成と一部のスポーク間の直接接続

# Azure Virtual Network Manager
Azure Virtual Network Manager(通称：AVNM)はAzureのVNetをグルーピングし、そのグループに含まれるVNet間の接続やセキュリティルールなどを一括で設定するためのサービスです。特にメッシュ型トポロジを組む場合には従来のやり方では個々のピアリングを管理しなくてはならないため煩雑でしたが、AVNMを利用する場合は管理画面が一つで済みます。なお、2022/06現在AVNM自体の東日本リージョンはパブリックプレビュー段階にあります。

# やりたいこと
https://docs.microsoft.com/ja-jp/azure/architecture/reference-architectures/hybrid-networking/hub-spoke?tabs=cli#considerations

今回構成したいのはこちらのDocsの内容のように、ハブアンドスポーク構成をとりつつも同じネットワークグループに属するスポーク間を直接接続によるフルメッシュ型でピアリングするというトポロジになります。

# 手順
下記に検証手順をまとめていきます。
## AVNMリソースの作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/205918/ae972e08-522b-d901-977c-7876dd1f22ba.png)
- Scope：AVNMは特定のスコープ配下のVNETを管理対象とします。そのため管理グループもしくはサブスクリプションをスコープとして選択します。
- Features：AVNMでは接続性とセキュリティのどちら・もしくは両方を設定するAVNMリソースなのかを指定します。

## Network Groupの作成
AVNMリソースに入り、ネットワークグループを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/205918/df94c761-6811-1228-f966-51cdb2046a04.png)
作成したネットワークグループを展開し、対象となるVNETを追加します。今回はProd用とTest用の2つのグループを作成しました。ProdのSpokeVNET間をフルメッシュで接続する予定です。
- Prod-hubSpoke
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/205918/820cfaa3-f91f-480b-fba2-38e0fda3d5c6.png)
- Test-hubSpoke
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/205918/a1213f6e-3194-1c05-fda6-518c88d864dc.png)

## Configurationの作成
`Configuration`メニューから`Connectivity`についての構成を作成します。作成する際にメッシュではなくハブアンドスポークを選択します。また、ハブになるVNETを選択します。ここで指定するものはネットワークグループに属している必要はなく、事前に作成しておいたハブ用のVNETとなります。

`Spoke network group`のところでProd用とTest用のネットワークグループを選択します。Prod用については、フルメッシュ構成にしたいので`Direct Connectivity`にチェックをします。また、ネットワークグループ内に別のリージョンのVNETが存在する場合には`Global mesh`も併せてチェックをします。今回は`japaneast`のVNETのみなのでチェックは無くてもOKです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/205918/3495d675-5169-b74a-6c44-15518fc05413.png)

## Configurationのデプロイ
Configurationを作成して終了ではなく、実際に反映させるためにはデプロイ作業が必要になります。作成した構成にチェックをしてデプロイボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/205918/2ec775b4-6b90-a63c-5e68-bb0c28662285.png)

セキュリティ構成も含めてデプロイしたい場合にはここでチェックをします。ターゲットリージョンについては対象としたいVNETのリージョンをすべて指定しないと接続構成が反映されないため要注意です。今回は東日本のみで十分です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/205918/3d84becc-e5c7-00fd-c66e-47d31ae41812.png)

次へ進むと全体の変更を確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/205918/125225ea-47a8-420d-33e8-5fbe45064175.png)
新規の構成をデプロイするともともとあった構成がRemoveされてしまうため、一つ前の画面に戻って既存の接続構成にもチェックマークを入れました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/205918/b883638e-768a-c0dd-c234-905b82020ccb.png)
こうすることで既存の構成も残しつつ新規のものをAddできます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/205918/2d707a7a-856a-7c29-8608-fb7fbe2e9d8c.png)
デプロイ状況については`Deployments`画面から確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/205918/91feb20a-64de-b25b-a0e5-0ae8d05e5cff.png)

## VNETの接続状況の確認
各VNETリソースのピアリング状況を確認していきます。

まずはハブから見ていくと、ピアリングの画面からすべてのSpokeへの接続が張られていることが確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/205918/c2984e8c-e205-a5f7-b8c7-0cf911192c2e.png)

続いてTest用。直接接続を構成していないためハブのみとピアリングされています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/205918/7f7f22b5-1036-6178-2fdd-d98aab116bed.png)

最後にProd用。ネットワークグループ内での直接接続を有効にしているため、ピアリングにProd用VNET間のピアリングが張られている、、、と思いきや見当たりません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/205918/6239f64d-fac1-0964-2bdc-7ec0f2cb1c9d.png)

`ピアリング`ではなく`ネットワークマネージャ`の方を見ると`Group Connectivity`がきちんと`Enabled`になっていることは確認できます。つまりネットワークグループ内の直接接続はピアリングと別扱いのようです。

別扱いという理解の上で、きちんと接続ができているのか確認していきます。まずはProdのSpokeにVMを立てていきます。SSHを許可するNSGもしくはAVNMのセキュリティ構成を設定する事をお忘れなく。

Prod-spoke01にデプロイしたVM(10.0.0.4)からProd-spoke02のVM(10.1.0.4)へのpingが通ることを確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/205918/f1a396f0-e173-8e0c-1621-6afb2df63a34.png)
逆方向も確認します。問題なく通っていることを確認しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/205918/9f2cbc58-66b0-f506-5b43-a4f457210414.png)
Prod用に3つVNET用意しましたが手間なので2つのみの検証としています。ということで、**ピアリングという形では見えてこない**ものの、きちんとスポーク間の接続ができていることを確認できました。

最後に念のためTest用のVNET間では通信ができないことを確認しておきます。同じく各VNETにVMを2台立てます。
Test-spoke01のVM(10.10.0.4)からTest-spoke02のVM(10.11.0.4)へのpingが通らないことを確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/205918/94dd0b0c-cd2f-7a06-a276-1f813419dfdf.png)
逆方向も同じく通信が通りません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/205918/d8d17f3f-bb2b-7536-5140-f08d180bfbd0.png)
検証は以上です。

## まとめ
直接接続の際にピアリング扱いで見えてこないのは結構厄介な気がします。ハブアンドスポーク構成ではなくメッシュで構成を作成してデプロイした際も`ピアリング`には表れてこなかったため、メッシュ構成をとる際にはトポロジに誤解がないように慎重に設定する必要がありそうですね。