Microsoft Azure の仮想ネットワークに VPN の P2S で繋ぐとき、Azure VPN Client を使うことになる。Azure VPN Client はポータルでダウンロードすれば事足りるけど、REST API や SDK でもダウンロードできる。
実際には、Azure VPN Client セットアップを生成要求してダウンロード用 URL を取得し、その URL からダウンロードする形になる。
using Azure; using Azure.Identity; using Azure.ResourceManager; using Azure.ResourceManager.Network; using Azure.ResourceManager.Network.Models; using Azure.ResourceManager.Resources; const string ClientId = "クライアントID"; const string ClientSecret = "クライアントシークレット"; const string TenantId = "テナントID"; const string SubscriptionId = "サブスクリプションID"; const string ResourceGroupName = "リソースグループ名"; const string VirtualNetworkGatewayName = "VPNゲートウェイ名"; var credential = new ClientSecretCredential( tenantId: TenantId, clientId: ClientId, clientSecret: ClientSecret); var client = new ArmClient(credential); ResourceGroupResource resourceGroup = await client.GetSubscriptionResource( SubscriptionResource.CreateResourceIdentifier(SubscriptionId)) .GetResourceGroupAsync(ResourceGroupName); VirtualNetworkGatewayResource gateway = await resourceGroup.GetVirtualNetworkGatewayAsync(VirtualNetworkGatewayName); // VPN クライアントセットアップの生成を要求し、 // ダウンロード用 URL を取得。 var generateOperation = await gateway.GeneratevpnclientpackageAsync( waitUntil: WaitUntil.Completed, vpnClientParameters: new VpnClientParameters { ProcessorArchitecture = ProcessorArchitecture.Amd64, }); string downloadUrl = await generateOperation.WaitForCompletionAsync(); // 生成された VPN クライアントセットアップをダウンロード var httpClient = new HttpClient(); using var downloadStream = await httpClient.GetStreamAsync(downloadUrl); using var writeStream = File.OpenWrite( Path.Combine(AppContext.BaseDirectory, "VpnClientSetupAmd64.exe")); await downloadStream.CopyToAsync(writeStream);