Azure環境でHub&Spoke構成のネットワーク構築（１．VNET編）

Azure環境にてHub&Spoke構成のネットワークを構築してみたいと思います。環境を構築した上で今後はいろんなAzureサービスを構築してみたいと思います。

参考資料：下記マイクロソフトの公式ドキュメント

https://learn.microsoft.com/ja-jp/azure/virtual-network/quick-create-portal#create-a-virtual-network


## **＜前提条件＞**
**1. Azure アカウントを所有すること**
※ Azureは無料アカウントの利用が可能

https://azure.microsoft.com/ja-jp/free/?ref=microsoft.com

**2. 構築するネットワーク所在のサブスクリプションは作成済みであること**
※ Azureのサブスクリプションの作り方

https://learn.microsoft.com/ja-jp/azure/cloud-adoption-framework/ready/azure-best-practices/initial-subscriptions

**3. サブスクリプションの所有者または共同作成者でログインしていること**
※Azure RBAC組込みロールのドメインサービス共同作成者（Domain Services Contributor）もVNETとSubnet作成の権限を持っています。

https://learn.microsoft.com/ja-jp/azure/role-based-access-control/overview

---
## **＜環境構成＞**
### **■構成図**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985687/79be7267-97bc-0870-87da-3e75b8bfa15f.png)

#### **■リソースグループ（Resource Group）**
HubVNETは共用リソース（Azure Firewall、Bastion、DNS Server等）を配置するVNETとして、１つまたは複数のSpokeVNET（システムごとにSpokeVNETを切り分ける想定）の通信制御、交通整理、ログ収集の役割を果たします。一方で、各システムをSpokeVNET単位で分けます。運用管理上の考慮でHubVNETと各SpokeVNETのリソースはそれぞれ別のリソースグループ（RG）に格納した方がよい※と個人的に考えています。
※システム単位での削除や他のサブスクリプションへの移動の際にRGを丸ごと移動できるところが便利です。

- HubVNET：poc-hub-resourcegroup
- SpokeVNET1：poc-spoke01-resourcegroup
- SpokeVNET2：poc-spoke02-resourcegroup

## **■VNET & Subnet**
### - HubVNET：poc-hub-vnet<br> （IP range: 10.250.0.0/16）
※注意！VPN Gateway、Azure Firewall、Bastionはそれぞれ専用のsubnetが必要で、且つsubnet名は指定となります。実際にそれぞれのリソースを作成する時にもsubnetを作れるが、作っておくのが個人的の流儀です。（subnetの作成と保持は非課金です）<br>
- ####  → GatewaySubnet（IP range: 10.250.1.0/26）
https://learn.microsoft.com/ja-jp/azure/vpn-gateway/vpn-gateway-about-vpn-gateway-settings
- ####  → AzureFirewallSubnet（IP range: 10.250.2.0/26）
https://learn.microsoft.com/ja-jp/azure/firewall/tutorial-firewall-deploy-portal
- ####  → AzureBastionSubnet（IP range: 10.250.3.0/26）
https://learn.microsoft.com/ja-jp/azure/bastion/configuration-settings

- ### SpokeVNET1：poc-spoke01-vnet<br>（IP range: 10.251.0.0/16）
    - #####  → poc-spokevnet01-subnet01<br>（IP range:10.251.0.0/24）
- ### SpokeVNET2：poc-spoke02-vnet<br>（IP range:10.252.0.0/16）
    - #####  → poc-spokevnet02-subnet01<br>（IP range:10.252.0.0/24）

---
## **■リソース作成**
### １．Resource groupの作成
#### >Step 1： Azure Portalの検索バーで"resource"を検索![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985687/a3aa4c1a-5187-f934-cc56-9c8e6b7f74e4.png)

**...または直近で使用した場合は利用履歴から選択**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985687/d2cb8527-3490-2666-91ee-65c5d6f04eaa.png)

#### >Step 2： Resource group一覧画面の左上の「Create」をクリック!![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985687/03dd2235-ab0f-6e13-d8c4-f8efbc4d0762.png)

#### >Step 3： 必要項目を記入
（Tagsは必要に応じて利用する形だが、今回は割愛します）

**[Basics]**![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985687/6c66588d-ca30-e1f4-27f5-f5f9adcb5f28.png)

**[Tags]**![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985687/534f615d-39f4-8d54-5b78-f7694b29bbff.png)

#### >Step 4： 「Review＋create」タグで入力値の妥当性チェックが自動的に行われ、問題がなければ"Validation passed."が表示される。「create」をクリックしたらデプロイ開始
**[Review + create]**![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985687/03e54a12-7337-6726-d538-5e210137a0e1.png)

#### >Step 5： デプロイ完了したら右上の通知でメッセージが表示される。「Go to resource group」をクリックしたら、デプロイしたリソースの「概要」画面に遷移
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985687/d7e2289a-50c5-35f1-df38-3dda36de63eb.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985687/4ca13f05-4bdd-4a71-9ddd-16231fcab971.png)

#### >Step 6： 以上でHubVNETのリソースグループの作成が完了したが、同じ手順でSpokeVNET1とSpokeVNET2のResource groupを作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985687/4c7b6110-5ca8-abfb-c915-02119a63bd61.png)

---
---
### ２．HubVNETの作成
#### >Step 1： 「Virtual networks」の一覧画面を開く（開き方はResource group作成のStep1を参照）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985687/b986266d-31e1-bb01-4a9a-c7d983f6edc9.png)

#### >Step 2： 一覧画面の左上の「Create」をクリックし、作成画面を開く![image.png]![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985687/1e572faf-4a8f-9b81-d601-b72f539fe63c.png)

#### >Step 3： 必要項目を記入
**[Basics]**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985687/8f56cf2e-11ba-f405-bdfb-1e9f8c22ca79.png)

**[IP Addresses]**
IPアドレス空間を入力し、ここで既に決めた３つのSubnetをまとめて作成。<br>（VNETを作成した後にもsubnetの作成が可能）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985687/6b49d1af-4aeb-982d-6ca3-ba5bc1ed2bb8.png)

### **[subnet作成]**
**1. GatewaySubnet**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985687/be360548-7f10-d302-72e0-e86b0c7d6e30.png)

**2. AzureFirewallSubnet**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985687/decb68f0-b2c0-d36b-1514-dcf9570fb11d.png)

**3. AzureBastionSubnet**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985687/71043607-8bce-55a4-2ace-0bf6beb29d42.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985687/0840449b-3851-da56-5624-a9faa5ace6ea.png)

**[Security]**
BastionHost、DDoS Network Protection、Firewallは後で設定として、"Disable"のままでOK
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985687/9bb68119-7375-34c8-02af-a05729fba958.png)

**[Review + create]**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985687/384e53ff-2ae5-cd9b-4605-be3580d7fe42.png)

**デプロイ中**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985687/301016ae-f30c-3492-96f3-5cf29571aca1.png)

**デプロイ完了**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985687/832587db-249d-c2c0-052f-205e7b82bc35.png)

#### >Step 4： 以上でHubVNETの作成が完了したが、同じ手順でSpokeVNET1とSpokeVNET2を作成
※SpokeVNET作成時にそれぞれのResource groupを指定するようにご注意ください
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985687/c178c7be-2329-4b3e-0699-ff1efea2dc25.png)

---
---
### ３．VNET Peeringの設定
本来、VNET Peeringの設定は接続同士ごとに行う必要があるが、今は片方（どちらでも可能）の設定画面でまとめて設定するようになっています。Hub＆Spoke構成はすべてのSpokeVNETとHubVNET間をpeeringで接続するが、SpokeVNET同士間はpeeringで接続しません。SpokeVNET間の通信はHubVNETにあるAzure Firewall（サードパーティーのNVAも可）経由で実現します。

個人的には漏れを防ぐためにHubVNETと各SpokeVNETのpeeringは一律HubVNET上で設定するようにします。

https://learn.microsoft.com/ja-jp/azure/virtual-network/virtual-network-peering-overview

#### >Step 1： 「Virtual networks」→ HubVNET名 → 左側サイドバーのカテゴリ「Settings」→「Peernings」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985687/b6c8ec94-0181-9829-6c33-4f14693640a0.png)

#### >Step 2： 「Add」をクリックし、HubVNETとSpokeVNET1のpeeringを作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985687/291c6871-3cd0-9b30-3f10-46772ea148d0.png)

#### >Step 3： 必要項目を記入
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985687/6986ca3a-d87c-d7ab-4083-c9f52ac04cf9.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985687/c1b59d43-22d0-18ad-1c04-38389ec5bb16.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985687/062b66ed-7ee9-076a-4f91-df1b025c2dfe.png)

#### >Step 4： 「Add」をクリックしたら、デプロイ開始。デプロイは成功したら、２通のメッセージが表示される。<br>
※HubVNET→SpokeVNET1のpeeringとSpokeVNET1→HubVNETのpeeringは別々のデプロイとして実行したため
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985687/6b5e86d0-4672-c95f-afd9-9c6401ff0b41.png)

#### >Step 5： HubVNETのpeerings画面で「hubvnet-to-spokevnet01-peering」(HubVNET→SpokeVNET1のpeering)の存在を確認<br>
正常な場合に「Peering status」は"Connected"になっている。<br>※デプロイ直後に"Updating"になっていることがあるが、「Refresh」をクリックしてstatusを更新してください
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985687/b8c15f66-4e80-8825-8e3a-37d56a1c07c0.png)

#### >Step 6： SpokeVNET1のpeerings画面で「spokevnet01-to-hubvnet-peering」(SpokeVNET1→HubVNETのpeering)の存在を確認<br>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985687/b378f592-e46b-3bba-2157-7fdc7e853f56.png)

#### >Step 7： 以上でHubVNETとSpokeVNET1のpeering設定は完了したが、同じ手順でHubVNETとSpokeVNET2のpeeringを設定。設定後にHubVNETのpeerings画面でHubVNETと２つのSpokeVNETのpeeringリンクが存在することを確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985687/cf9047f7-bdc0-56cb-3b9a-049519b98d1a.png)

---
---
### まとめ
ここまで下記Hub&Spoke構成のネットワークを構築しましたが、作業ミスや漏れを避けるためには事前に必要な情報（IPアドレスやリソースの名称等）を決め、正確かつ詳細なネットワーク構成図を作成することをお勧めします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985687/bf3cf5f0-c0d4-e60f-5297-755ca93da5bd.png)


では、次回以降にHubVNET内の共用リソースであるAzure Firewall、Bastion、VPN Gatewayを順次に構築していきたいと思います。

ありがとうございました。