Azure Files にカンタン P2S VPN 接続！

## はじめに

社内ネットワークで、445 番 ポート(SMB)が開放されていないこと、しばしばありますよね。
今回は、そんな場合でも Point-to-Site (P2S) VPN を使用して、外部に SMB ポートを開放せず、Azure Files をマウントする手順をご紹介します。

## この記事のゴール

Azure Files に対し、P2S VPN を構成し、Private Endpoint を使用してマウントするまでをゴールとします。

## 前提条件

- Windows 10
- Azure Subscription を保有していること
- [Azure PowerShell Module](https://docs.microsoft.com/ja-jp/powershell/azure/install-az-ps?view=azps-6.3.0&viewFallbackFrom=azps-3.0.0) をインストール済みであること

```powershell
>ver

Microsoft Windows [Version 10.0.19043.1165]
```

## 全体構成

VPN Gateway に証明書をインポートし、クライアントから Private IP アドレスによるマウントを行います。

実際の構成は下図の通りです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/248756/666b92b3-838c-f4e8-26ea-c6ea82b6f7d4.png)


## 手順

では、ここから実際の手順を見ていきます。

### 1. 仮想ネットワークの作成

まずは、仮想ネットワークを作成します。今後は、この仮想ネットワーク内に、VPN Gateway や Azure Files にアタッチする Private Endpoint を作成します。

詳細な作成手順は、[こちら](https://docs.microsoft.com/ja-jp/azure/virtual-network/quick-create-portal)の Docs を参考にしてください。

なお、「3. GatewaySubnet の作成」で VPN Gateway をデプロイするための専用サブネットを作成しますが、この段階では `Subnet01` のみを作成してください。

仮想ネットワーク作成時の最終的な検証が完了すると、下図のようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/248756/224a951e-0e97-53bd-0f1b-369d53203ff6.png)


### 2. Azure Files の作成

マウント対象となる Azure Files を作成します。

詳細な作成手順は、[こちら](https://docs.microsoft.com/ja-jp/azure/storage/files/storage-how-to-create-file-share?tabs=azure-portal)の Docs を参考にしてください。

今回は、以下のような設定をしました。リソース設定時、「詳細設定」以降のブレードは既定のままとしています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/248756/b09acc85-3181-f599-3d71-eac134165cd3.png)

#### 2-1. File Share の作成

実際にマウントする File Share を作成します。今回は、`images` という名前で作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/248756/0bdcba68-d7bc-7e7c-45e4-20f906a9a5df.png)

#### 2-2. Azure Files に対する Private Endpoint の作成

`images` に対して Private IP アドレスを使用して接続するために、Private Endpoint を作成します。

Azure Portal で、下記スクショの通りにリソースを構成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/248756/ed44f5ec-0773-756e-9391-dcdeb0cdd55f.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/248756/6c2935d4-9cdf-9f8c-1614-bdee8eee17b5.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/248756/4f3bae11-070e-fc7f-cabc-e3d0dd05e64b.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/248756/74bb9bc4-3043-39f6-4454-3113e38a8c04.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/248756/9425104e-cd3c-ca4f-e630-0d7fe4460fb4.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/248756/bed4182e-3ef4-b76d-9388-daaa93200af7.png)

Private Endpoint の作成が完了すると、Azure Portal からは下図のようにリソースを確認することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/248756/f8f7d6f6-352d-b97c-75cb-b5b3f5f05736.png)

### 3. GatewaySubnet の作成

VPN Gateway を Azure にデプロイするには、あらかじめ `GatewaySubnet` という専用のサブネットを作成する必要があります。

「1. 仮想ネットワークの作成」で作成した仮想ネットワークに移動し、下図のように「＋ ゲートウェイサブネット」から `GatewaySubnet` を作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/248756/339c9841-48ca-e717-fd68-771ba1f7abbe.png)

### 4. VPN Gateway の作成

VPN Gateway を作成します。以下の設定値に気を付けて作成してください。

- ゲートウェイの種類：**VPN**
- VPNの種類：**ルートベース**

今回は、以下の設定を行いました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/248756/88c6660a-5d40-191f-875d-33c2cf0dee3a.png)

**※なお、VPN Gateway のデプロイには 1 時間弱かかります。この手順も後半に差し掛かるので、この辺で一旦コーヒーブレイクしましょう。。！**

### 5. root 証明書、クライアント証明書の作成

さて、しっかり休憩できたでしょうか？後半戦も頑張っていきましょう！

ここでは、VPN 接続時に使用する証明書を作成します。

参考手順は[こちら](https://docs.microsoft.com/ja-jp/azure/vpn-gateway/vpn-gateway-certificates-point-to-site)です。

```powershell
# ルート証明書を作成
$cert = New-SelfSignedCertificate -Type Custom -KeySpec Signature -Subject "CN=P2SRootCert" -KeyExportPolicy Exportable -HashAlgorithm sha256 -KeyLength 2048 -CertStoreLocation "Cert:\CurrentUser\My" -KeyUsageProperty Sign -KeyUsage CertSign
# クライアント証明書を作成
New-SelfSignedCertificate -Type Custom -DnsName P2SChildCert -KeySpec Signature -Subject "CN=P2SChildCert" -KeyExportPolicy Exportable -HashAlgorithm sha256 -KeyLength 2048 -CertStoreLocation "Cert:\CurrentUser\My" -Signer $cert -TextExtension @("2.5.29.37={text}1.3.6.1.5.5.7.3.2")
```

certmgr.msc から、作成した証明書を確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/248756/0849fb35-e81b-adca-3ff9-655415eb1812.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/248756/ab214f7c-1bee-360d-e34b-408bbad77edf.png)

### 6. VPN Gateway にクライアントプールを設定

「4. VPN Gateway の作成」にてデプロイした VPN Gateway に対し、クライアントプールを設定します。

クライアントプールは、その名の通り、クライアントが接続時に使用する IP アドレスの範囲を指定します。**既存の仮想ネットワーク、オンプレミス側のネットワークセグメントと重複しないように設定する必要があります。**

今回は、「172.16.0.0/24」とします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/248756/04a29153-10cd-ff82-8412-22b6b1e5dd3a.png)

### 7. root 証明書を Azure にアップロード

「5. root 証明書、クライアント証明書の作成」にて作成した root 証明書を Azure にアップロードします。
Azure に証明書をアップロードするには、作成した証明書を Base64 エンコードする必要があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/248756/49a2e1cb-9e12-7908-fa69-41253dd74c9e.png)

途中の選択肢は下記を設定してください。

- 「いいえ、秘密鍵をエクスポートしません」
- 「Base64 encoded X.509」

エクスポートしたファイルを任意のエディタで開き、改行コードを消去して 1 行にします。
今回はサクラエディタを使用しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/248756/ccc512f1-939b-0d59-845a-d2609bed9d3b.png)

上記の青く囲われている部分（-----BEGIN CERTIFICATE----- から -----END CERTIFICATE----- まで）をコピーし、Azure Portal から VPN Gateway に証明書をセットします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/248756/6cfd1061-6d14-791e-a6de-f51145850cd6.png)


### 8. 接続用の VPN Client の設定

いよいよ、VPN Client をダウンロードし、ローカルに展開します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/248756/5ee2f39c-d911-e9ff-d795-b14915f4b55f.png)

#### 8-1. サーバ証明書のインストール

VpnServerRoot をダブルクリックして、サーバ証明書をインストールします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/248756/57e220b9-a9f3-648d-61c7-2dc1e1ebe5b5.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/248756/29435397-f2a3-4ba3-0e45-067f235e9d85.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/248756/0b08dfed-ed34-77a7-511d-10bde258a7d1.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/248756/2ce638c0-9ba1-9349-c995-23cd5309e634.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/248756/eac400a8-487f-3f1a-7cf3-bc5cc09804a3.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/248756/ddd07e84-abdd-1584-d10b-787d35d43a48.png)

#### 8-2. VPN Client のインストール

VPNClientSetupAmd64 をダブルクリックして、 VPN Client をインストールします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/248756/a43a3a36-97a7-160b-5715-fcf87c8dea8f.png)

「VPN の設定」から、上記で構成した　VPN へ接続します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/248756/b3ed5e47-e570-e34b-eba5-f2d6362236db.png)

「接続」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/248756/17050774-acd9-e71f-3361-7940dd953dab.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/248756/f8352fd7-7db7-5447-56c8-217253f9d769.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/248756/742d4be7-bd5e-f4b1-7008-2234e1524ad8.png)

### 9. Windows Explorer からマウント


「ネットワークドライブの割り当て」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/248756/883af6c1-4f7c-b18c-2681-73081cf3523c.png)

「別の資格情報を使用して接続する」を選択し、「完了」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/248756/a066deda-6ab9-2f97-206d-092c0ad22f99.png)

資格情報を入力します。今回は、Azure AD 認証を有効化していないため、アクセスキーを用いた認証を行います。

以下の値を入力してください。

- Email: `localhost\<Storage アカウント名>`
- Password: `アクセスキー（Azure Portal から確認可能）`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/248756/f3a9ab02-cc8f-e97a-d7e0-9ace0cf3ab4a.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/248756/8358b375-c49f-c9a6-81fe-cc254161c575.png)


接続できました。あとは、通常のファイルサーバと同様の操作感で、Azure Files をご利用いただけます。

## まとめ

今回は、Azure Files に対し、P2S VPN を構成し、Private Endpoint を使用してマウントするまでの手順を確認しました。
SMB ポートの開放をできない場合、お役立ていただければと思います。

## 参考

- [Windows 上で Azure Files で使用するポイント対サイト (P2S) VPN を構成する](https://docs.microsoft.com/ja-jp/azure/storage/files/storage-files-configure-p2s-vpn-windows)