Azure VPN Gateway の Basic SKU がポータルから作成出来なかったので PowerShell で作成してみた

2024.01.20

いわさです。

AWS と Azure でサイト間 VPN 接続を構成すること、よくありますよね。
少し古い記事になるのですが、今でも次の記事を参考に同じ流れで Azure と AWS 間のサイト間 VPN を構築することが出来ます。

今回 VPN を構築していて、検証用に長期間環境を保持する必要があり、BGP なども不要だったのでコスト面を鑑みて Azure VPN Gateway の SKU で Basic を選択しようとしました。

しかし Azure ポータルから仮想ネットワークゲートウェイの SKU を選択する際に Basic が選択出来ないことに気が付きました。

Azure VPN Gateway には旧世代と新世代があり、Basic SKU は旧世代でのみ利用可能です。
ポータルから旧世代も選択は出来るのですが、SKU はやはり選択出来ませんでした。

また、料金ページには Basic SKU に関する料金が表示されているので、使えないというわけではなさそうです。

いまはポータルから作成出来ないらしい

公式ドキュメントを調べてみると、次の記述を見つけました。

VPN Gateway Basic SKU も廃止されますか?
いいえ、Basic SKU は廃止されません。 現在は Basic IP (提供終了パスに含まれます) のみがサポートされている Basic SKU に、Standard IP のサポートが間もなく追加されます。 現在は、Powershell または CLI を使って Basic SKU を作成できますが、Standard IP のサポートが追加されると、ポータルでも Basic SKU を作成できるようになります。

あっ、ポータルからは作れないのか!そうなの?
この記述からすると、将来的にはポータルからも作れるようにはなりそうですが。

というわけで今回は PowerShell を使って Azure VPN Gateway などの一部リソースを作成し、AWS との接続を行ってみましたので紹介します。

作成したスクリプト

PowerShell スクリプトを今回作成したのですが、ベースは次のドキュメントを参考にしています。
いくつかリソースを作成する必要があるのですが、リソースグループから VPN Gateway の作成までのコマンドが紹介されています。

上記を基にスクリプトを作成し、あとは Basic SKU に対応させたり、IP アドレスがなぜか静的になっていたので動的に変更したりしています。
CIDR やリソース名、リージョンなどもちょっとだけ変えてます。

hoge.ps1

# https://learn.microsoft.com/ja-jp/azure/vpn-gateway/create-routebased-vpn-gateway-powershell
# 作成済みのリソースグループとリージョン
$resourceGroupName = "20240120"
$region = "JapanEast"

# # リソースグループ作成
New-AzResourceGroup -Name $resourceGroupName -Location $region

# 仮想ネットワーク
$virtualNetwork = New-AzVirtualNetwork -ResourceGroupName $resourceGroupName -Location $region -Name "hogevnet" -AddressPrefix 10.0.0.0/16
$subnetConfig = Add-AzVirtualNetworkSubnetConfig -Name "hogesubnet" -AddressPrefix 10.0.0.0/24 -VirtualNetwork $virtualNetwork
$virtualNetwork | Set-AzVirtualNetwork

# # ゲートウェイサブネットの追加
$vnet = Get-AzVirtualNetwork -ResourceGroupName $resourceGroupName -Name "hogevnet"
Add-AzVirtualNetworkSubnetConfig -Name 'GatewaySubnet' -AddressPrefix 10.0.254.0/24 -VirtualNetwork $vnet
$vnet | Set-AzVirtualNetwork

# パブリックIPアドレス
$gwpip = New-AzPublicIpAddress -Name "hogepublicip" -ResourceGroupName $resourceGroupName -Location $region -AllocationMethod Dynamic -Sku "Basic"

# ゲートウェイIPアドレスの構成の作成
$vnet = Get-AzVirtualNetwork -Name "hogevnet" -ResourceGroupName $resourceGroupName
$subnet = Get-AzVirtualNetworkSubnetConfig -Name 'GatewaySubnet' -VirtualNetwork $vnet
$gwipconfig = New-AzVirtualNetworkGatewayIpConfig -Name "hogegwipconfig" -SubnetId $subnet.Id -PublicIpAddressId $gwpip.Id

# VPNゲートウェイ作成
New-AzVirtualNetworkGateway -Name "hogevpngw" -ResourceGroupName $resourceGroupName -Location $region -IpConfigurations $gwipconfig -GatewayType "Vpn" -VpnType "RouteBased" -GatewaySku "Basic" -VpnGatewayGeneration "Generation1"

# VPNゲートウェイ表示
Get-AzVirtualNetworkGateway -Name "hogevpngw" -ResourceGroup $resourceGroupName

# パブリックIPアドレス表示
Get-AzPublicIpAddress -Name "hogepublicip" -ResourceGroupName $resourceGroupName

構築に使ってみた

上記をスクリプト化して実行しました。

PS /Users/iwasa.takahito> ./hoge.ps1
ResourceGroupName : 20240120
Location          : japaneast
ProvisioningState : Succeeded
Tags              : 
ResourceId        : /subscriptions/11111111-2222-3333-4444-555555555555/resourceGroups/20240120

:

IpConfigurations                   : {hogegwipconfig}
GatewayType                        : Vpn
VpnType                            : RouteBased
EnableBgp                          : False
DisableIPsecProtection             : False
EnablePrivateIpAddress             : False
ActiveActive                       : False
GatewayDefaultSite                 : 
ProvisioningState                  : Succeeded
Sku                                : Microsoft.Azure.Commands.Network.Models.PSVirtualNetworkGatewaySku
VirtualNetworkGatewayPolicyGroups  : {}
VpnClientConfiguration             : 
BgpSettings                        : 
CustomRoutes                       : 
VpnGatewayGeneration               : Generation1
ExtendedLocation                   : 
VNetExtendedLocationResourceId     : 
NatRules                           : {}
EnableBgpRouteTranslationForNat    : False
AdminState                         : 
AllowRemoteVnetTraffic             : False
AllowVirtualWanTraffic             : False
AutoScaleConfiguration             : 
IpConfigurationsText               : [
                                       {
                                         "PrivateIpAllocationMethod": "Dynamic",
                                         "Subnet": {
                                           "Id": "/subscriptions/11111111-2222-3333-4444-555555555555/resourceGroups/20240120/providers/Microsoft.Network/virtualNetworks/hogevnet/subnets/GatewaySubnet"
                                         },
                                         "PublicIpAddress": {
                                           "Id": "/subscriptions/11111111-2222-3333-4444-555555555555/resourceGroups/20240120/providers/Microsoft.Network/publicIPAddresses/hogepublicip"
                                         },
                                         "Name": "hogegwipconfig",
                                         "Etag": "W/\"5dbb93d4-bda6-4360-9d25-4bb4d71a2847\"",
                                         "Id": "/subscriptions/11111111-2222-3333-4444-555555555555/resourceGroups/20240120/providers/Microsoft.Network/virtualNetworkGateways/hogevpngw/ipConfigurations/hogegwipconfig"
                                       }
                                     ]
ExtendedLocationText               : null
VNetExtendedLocationResourceIdText : null
GatewayDefaultSiteText             : null
SkuText                            : {
                                       "Capacity": 2,
                                       "Name": "Basic",
                                       "Tier": "Basic"
                                     }
VpnClientConfigurationText         : null
BgpSettingsText                    : null
NatRulesText                       : []
CustomRoutesText                   : null
AutoScaleConfigurationText         : null
ResourceGroupName                  : 20240120
Location                           : japaneast
ResourceGuid                       : a2e60575-9a6a-4fef-902f-d85b8d59ff55
Type                               : Microsoft.Network/virtualNetworkGateways
Tag                                : 
TagsTable                          : 
Name                               : hogevpngw
Etag                               : W/"5dbb93d4-bda6-4360-9d25-4bb4d71a2847"
Id                                 : /subscriptions/11111111-2222-3333-4444-555555555555/resourceGroups/20240120/providers/Microsoft.Network/virtualNetworkGateways/hogevpngw


ExtendedLocation         : 
PublicIpAllocationMethod : Dynamic
Sku                      : Microsoft.Azure.Commands.Network.Models.PSPublicIpAddressSku
IpConfiguration          : Microsoft.Azure.Commands.Network.Models.PSIPConfiguration
DnsSettings              : 
DdosSettings             : Microsoft.Azure.Commands.Network.Models.PSDdosSettings
IpTags                   : {}
IpAddress                : 52.253.117.31
PublicIpAddressVersion   : IPv4
IdleTimeoutInMinutes     : 4
Zones                    : {}
ProvisioningState        : Succeeded
PublicIpPrefix           : 
IpConfigurationText      : {
                             "Id": "/subscriptions/11111111-2222-3333-4444-555555555555/resourceGroups/20240120/providers/Microsoft.Network/virtualNetworkGateways/hogevpngw/ipConfigurations/hogegwipconfig"
                           }
DdosSettingsText         : {}
DnsSettingsText          : null
IpTagsText               : []
SkuText                  : {
                             "Name": "Basic",
                             "Tier": "Regional"
                           }
PublicIpPrefixText       : null
ExtendedLocationText     : null
ResourceGroupName        : 20240120
Location                 : japaneast
ResourceGuid             : 550afb4e-660c-4a69-9e1f-07cb73384ec8
Type                     : Microsoft.Network/publicIPAddresses
Tag                      : 
TagsTable                : 
Name                     : hogepublicip
Etag                     : W/"20826178-ffe7-43cd-b6c6-fb842abd7272"
Id                       : /subscriptions/11111111-2222-3333-4444-555555555555/resourceGroups/20240120/providers/Microsoft.Network/publicIPAddresses/hogepublicip

完了まで数十分かかりますが、完了後に Azure ポータルからリソースを確認してみると、Azure VPN Gateway の SKU が Basic で作成されていました。やった。

あとは冒頭の手順に沿って AWS、Azure それぞれの後続の設定を行い無事 Basic SKU でのサイト間 VPN を構成することが出来ました。

なお、Basic SKU の場合は IKE バージョンを少し気をつける必要があります。
次のドキュメントに記載されているのですが、今回スクリプトで設定しているルートベースのゲートウェイの Basic SKU だと IKEv2 のみサポートされています。ローカル接続作成時に IKEv1 を使おうとするとエラーで構築に失敗します。

IKEv1 を使いたい場合はポリシーベースを選択する必要があるようです。

さいごに

本日は Azure VPN Gateway の Basic SKU がポータルから作成出来なかったので PowerShell で作成してみました。

毎回ポータルから私は作成していたので、AWS も含めて全部テンプレートやスクリプトにしても良い気がしてきました。
公式ドキュメントの記述からすると将来的にはポータルから作成出来るようになるそうなのですが、検証用途だと Basic SKU 使いたいこともあると思うので、ポータルに実装されるまでは今回のような形で構築しようと思います。