Point to Site VPN で Azure AD 認証をサポート...をやってみた (その 2)

[先日の記事](https://qiita.com/tetsuya-ooooo/items/4707fe2b531015c36698)では、新規に VPN ゲートウェイを作成して、「Azure AD 認証」を有効にしてみました。
今回は、Point to Site 構成が設定済みの VPN ゲートウェイに対して、「Azure AD 認証」を有効にしてみます。このようなケースが多くあると思います。

# 今回のシナリオ

以下のようなポイント対サイトの構成があったとします。

- トンネルの種類...「IKEv2 と SSTP (SSL)」
- 認証の種類...「Azure 証明書 (VPN クライアント証明書による認証)」 ※ルート証明書もアップロード済み

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230264/d9f44f46-5561-ae71-41a3-ae2897112882.png)

この環境を「OpenVPN」で「Azure AD 認証」を有効にします。


# まずはドキュメントどおりやってみる

※以下より、先日の記事の [Azure AD テナントに「Azure VPN」を登録する](https://qiita.com/tetsuya-ooooo/items/4707fe2b531015c36698#azure-ad-%E3%83%86%E3%83%8A%E3%83%B3%E3%83%88%E3%81%ABazure-vpn%E3%82%92%E7%99%BB%E9%8C%B2%E3%81%99%E3%82%8B) まで実施済みと想定して話します。

それでは先日の記事と同じように、以下のドキュメントを参考に操作していきます。

[参考：Azure AD 認証を使用する P2S Open VPN 接続用の Azure Active Directory テナントを作成する > 3.VPN ゲートウェイでの Azure AD 認証を有効にする](https://docs.microsoft.com/ja-jp/azure/vpn-gateway/openvpn-azure-ad-tenant?WT.mc_id=AZ-MVP-5003113#enable-authentication)

対象の Azure AD テナントの [プロパティ] を開き、[ディレクトリ ID] をコピーして、テキストエディターなどにメモっておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230264/505478fa-9a63-f2bd-77fd-06eec2f6cfb4.png)

上記のドキュメントの「3.VPN ゲートウェイでの Azure AD 認証を有効にする」の手順 8. のとおり、PowerShell で以下のコマンドを実行して、VPN ゲートウェイでの Azure AD 認証を有効にします。
※「&lt;your Directory ID&gt;」を先ほどコピーした Azure AD テナントの「ディレクトリ ID」に置換してください
※トンネルの種類を「OpenVPN」に変更したいので併せて指定

```PowerShell:
$rgName = "<Resource group>"
$gwName = "<name of VPN gateway>"
$aadTenantUri = "https://login.microsoftonline.com/<your Directory ID>"
$aadIssuerUri = "https://sts.windows.net/<your Directory ID>/"
$gw = Get-AzVirtualNetworkGateway -Name $gwName -ResourceGroupName $rgName
Set-AzVirtualNetworkGateway -VirtualNetworkGateway $gw `
 -AadTenantUri $aadTenantUri `
 -AadAudienceId "41b23e61-6c1e-4545-b367-cd054e0ed4b4" `
 -AadIssuerUri $aadIssuerUri `
 -VpnClientProtocol OpenVPN
```

実行結果は以下のとおり。例外が発生してしまいました...コマッタ :scream:

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230264/171e4ba1-37ba-7213-3e4b-acdf3b88c583.png)

「VPN クライアント構成には、Radius サーバーまたは VPN クライアント証明書または Azure AD 認証設定のいずれか1つのみを含めることができます。」

...はい。わかってます。:cry:

「Set-AzVirtualNetworkGateway」コマンドは、既存の設定内容を上書きしてくれるもんだと勝手に思っていましたが、どうやらそうではないみたい。


# このようにやって解決した


## Azure ポータルで

まず Azure ポータル上でできることをやってみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230264/d9f44f46-5561-ae71-41a3-ae2897112882.png)

設定項目ごとに変更できるか否か以下のとおりに確認しました。

- トンネルの種類... :ok_woman: ドロップダウンリストから「OpenVPN (SSL)」を選択し直すことができる
- 認証の種類... :no_good: 「Azure 証明書」か「RADIUS 認証」しか選ぶことができない ※「OpenVPN (SSL)」を選ぶと「Azure 証明書」一択となる
- ルート証明書... :ok_woman: 登録済みの証明書が削除できる ※失効した証明書も同様

ということで、「トンネルの種類」と「ルート証明書」について以下のとおりに設定変更しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230264/2fc3286b-eab1-0343-769c-c99224b76a1a.png)


## PowerShell で

PowerShell で、「Get-AzVirtualNetworkGateway」コマンドで設定内容を確認します。
VPN クライアントプロトコルが「OpenVPN」、ルート証明書 (と失効した証明書) が「空」となりました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230264/8ca1ed73-a1a8-dc03-55c3-347eb998d3c2.png)

そして、再び前述した「Set-AzVirtualNetworkGateway」コマンドを実行します。
...今回は成功したようです。:thumbsup:

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230264/f2bee103-1e1b-cea2-41ff-24c4f7947271.png)


## ということで

先ほどの「Set-AzVirtualNetworkGateway」コマンドの例外が発生した原因は、
**「Azure AD 認証の設定とルート証明書の設定とが競合したため (本来、Azure AD 認証を設定する際は、ルート証明書の設定がないはず...という前提みたい)」**
と思われます。


# 解決！

あとは、[クライアント構成プロファイルをダウンロード](https://qiita.com/tetsuya-ooooo/items/4707fe2b531015c36698#%E3%82%AF%E3%83%A9%E3%82%A4%E3%82%A2%E3%83%B3%E3%83%88%E6%A7%8B%E6%88%90%E3%83%97%E3%83%AD%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E3%83%80%E3%82%A6%E3%83%B3%E3%83%AD%E3%83%BC%E3%83%89%E3%81%99%E3%82%8B)して、[VPN クライアントをセットアップ](https://qiita.com/tetsuya-ooooo/items/4707fe2b531015c36698#3-point-to-site-vpn-%E3%82%AF%E3%83%A9%E3%82%A4%E3%82%A2%E3%83%B3%E3%83%88%E3%82%92%E6%A7%8B%E6%88%90%E3%81%99%E3%82%8B)します。

このように問題なく VPN 接続できました。:relaxed:

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230264/fb9788f0-0fc2-a120-645c-c5c1f7442f32.png)