Azure VPN Client for macOS の VPN Gateway を Azure CLI で作って接続してみた

## 背景と目的

Azure VPN Client for macOS が GA したので Azure CLI で VPN Gateway を作って接続してみました。

## 前提条件

コマンドの実施環境は、Mac + Azure CLI です。

```bash:bash
$ sw_vers
ProductName:    macOS
ProductVersion: 11.5.2
BuildVersion:   20G95

$ az version
{
  "azure-cli": "2.27.1",
  "azure-cli-core": "2.27.1",
  "azure-cli-telemetry": "1.0.6",
  "extensions": {}
}
```

## 実施内容

Azure VPN Client は、App Store からインストールしておきます。

[3.VPN ゲートウェイでの Azure AD 認証を有効にする](https://docs.microsoft.com/ja-jp/azure/vpn-gateway/openvpn-azure-ad-tenant#3-enable-azure-ad-authentication-on-the-vpn-gateway)

こちらを参考に、グローバル管理者ロールの Azure AD ユーザーで下記の URL にアクセスして、Azure VPN というエンタープライズアプリケーションを作成します。

[https://login.microsoftonline.com/common/oauth2/authorize?client_id=41b23e61-6c1e-4545-b367-cd054e0ed4b4&response_type=code&redirect_uri=https://portal.azure.com&nonce=1234&prompt=admin_consent](https://login.microsoftonline.com/common/oauth2/authorize?client_id=41b23e61-6c1e-4545-b367-cd054e0ed4b4&response_type=code&redirect_uri=https://portal.azure.com&nonce=1234&prompt=admin_consent)

あとは、Azure CLI で VNET、VPN Gateway、動作確認用 VM を作成していき、VPN クライアントに設定ファイルをインポートして VPN 接続します。

```bash:bash
# 環境変数を設定します
region=japaneast
prefix=mnrp2svpn

# リソースグループを作成します
az group create \
  --name ${prefix}-rg \
  --location $region

# VNET を作成します
az network vnet create \
  --resource-group ${prefix}-rg \
  --name ${prefix}-vnet \
  --address-prefixes 10.1.0.0/16 \
  --subnet-name FrontEnd \
  --subnet-prefix 10.1.0.0/24

# VPN の Gateway サブネットを作成します
az network vnet subnet create \
  --vnet-name ${prefix}-vnet \
  --resource-group ${prefix}-rg \
  --name GatewaySubnet \
  --address-prefix 10.1.255.0/27

# VPN ゲートウェイのパブリック IP を作成します
az network public-ip create \
  --name ${prefix}-gwip \
  --resource-group ${prefix}-rg \
  --allocation-method Dynamic

# VPN ゲートウェイを AAD 認証を使用する OpenVPN でを作成します
az network vnet-gateway create \
  --name ${prefix}-gw \
  --public-ip-address ${prefix}-gwip \
  --resource-group ${prefix}-rg \
  --vnet ${prefix}-vnet \
  --gateway-type Vpn \
  --sku VpnGw1 \
  --vpn-type RouteBased \
  --address-prefixes 172.16.0.0/24 \
  --client-protocol OpenVPN \
  --vpn-auth-type AAD \
  --aad-tenant https://login.microsoftonline.com/$(az account show --query tenantId --output tsv)/ \
  --aad-audience 41b23e61-6c1e-4545-b367-cd054e0ed4b4 \
  --aad-issuer https://sts.windows.net/$(az account show --query tenantId --output tsv)/ \
  --no-wait

# VPN ゲートウェイの作成が完了したら「VPN クライアントのダウンロード」からファイルをダウンロードします（作成に 50 分くらいかかりました）
# (参考画面) https://docs.microsoft.com/ja-jp/azure/vpn-gateway/point-to-site-vpn-client-configuration-azure-cert#generate-files-using-the-azure-portal
unzip ~/Downloads/${prefix}-gw.zip -d ${prefix}-gw

# このファイルを Azure VPN クライアントにインポートして VPN 接続します
code ${prefix}-gw/AzureVPN/azurevpnconfig.xml

# 接続検証用の VM を作成します
vmpassword=$(openssl rand -base64 16)
echo $vmpassword

az vm create \
  --resource-group ${prefix}-rg \
  --name ${prefix}-vm \
  --os-disk-name ${prefix}-vmOSDisk \
  --image CentOS \
  --size Standard_A2_v2 \
  --vnet-name ${prefix}-vnet \
  --subnet FrontEnd \
  --admin-username azureuser \
  --admin-password $vmpassword \
  --nsg "" \
  --public-ip-address "" \
  --storage-sku Standard_LRS

# SSH 接続します
ssh azureuser@10.1.0.4
```

## 実施結果

VPN ゲートウェイに接続出来ている状態です。

![p2s-vpn-mac.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675885/91e58a46-4d15-865d-8943-22d19b87b460.png)

## 参考

作成したリソースを削除します。

```bash:bash
# リソースグループを削除します
az group delete \
  --name ${prefix}-rg
```

下記は、参考サイトです。

[General availability: Azure VPN Client for macOS](https://azure.microsoft.com/ja-jp/updates/general-availability-ga-of-azure-vpn-client-for-macos/)

[Azure 証明書認証を使用した VNet へのポイント対サイト VPN 接続の構成:PowerShell](https://docs.microsoft.com/ja-jp/azure/vpn-gateway/vpn-gateway-howto-point-to-site-rm-ps)

[P2S OpenVPN プロトコル接続用の Azure Active Directory テナントを作成する](https://docs.microsoft.com/ja-jp/azure/vpn-gateway/openvpn-azure-ad-tenant)

[Azure Active Directory 認証: P2S OpenVPN プロトコル接続用に VPN クライアントを構成する - macOS - プレビュー](https://docs.microsoft.com/ja-jp/azure/vpn-gateway/openvpn-azure-ad-client-mac)

[az network vnet-gateway create](https://docs.microsoft.com/ja-jp/cli/azure/network/vnet-gateway?view=azure-cli-latest#az_network_vnet_gateway_create)