Windows 上で Azure Files で使用するポイント対サイト (P2S) VPN を構成する

ポイント対サイト (P2S) VPN 接続を使用すると、ポート 445 を開くことなく、Azure の外部から SMB 経由で Azure ファイル共有をマウントできます。 ポイント対サイト VPN 接続は、Azure と個々のクライアントの間の VPN 接続です。 Azure Files で P2S VPN 接続を使うには、接続するクライアントごとに VPN 接続を構成する必要があります。 オンプレミス ネットワークから Azure ファイル共有に接続する必要のある多数のクライアントが存在する場合は、クライアントごとのポイント対サイト接続の代わりにサイト間 (S2S) VPN 接続を使用できます。 詳細については、「Azure Files で使用するサイト間 VPN を構成する」を参照してください。

このハウツー記事を読み進める前に、Azure Files で使用可能なネットワーク オプションの完全な説明について直接 Azure ファイル共有アクセスのネットワークに関する考慮事項に関するページを参照することを強くお勧めします。

この記事では、Azure ファイル共有をオンプレミスに直接マウントするために、Windows (Windows クライアントおよび Windows Server) 上でポイント対サイト VPN を構成する手順について詳細に説明します。 Azure File Sync のトラフィックを VPN 経由でルーティングすることを検討している場合は、Azure File Sync のプロキシとファイアウォールの設定の構成に関するページを参照してください。

適用対象

ファイル共有の種類 SMB NFS
Standard ファイル共有 (GPv2)、LRS/ZRS Yes No
Standard ファイル共有 (GPv2)、GRS/GZRS Yes No
Premium ファイル共有 (FileStorage)、LRS/ZRS Yes No

前提条件

  • 最新バージョンの Azure PowerShell モジュール。 Azure PowerShell モジュールのインストールに関するページを参照してください。

  • オンプレミスにマウントする Azure ファイル共有。 ストレージ アカウント内にデプロイされた Azure ファイル共有は、複数のファイル共有だけでなく、その他のストレージ リソースをデプロイできるストレージの共有プールを表す管理構造です。 Azure ファイル共有とストレージ アカウントをデプロイする方法の詳細については、「Azure ファイル共有を作成する」を参照してください。

  • オンプレミスでマウントする Azure ファイル共有が含まれるストレージ アカウント用のプライベート エンドポイントを含む仮想ネットワーク。 プライベート エンドポイントを作成する方法については、「Azure Files ネットワーク エンドポイントの構成」を参照してください。

  • 仮想ネットワーク上にゲートウェイ サブネットを作成する必要があります。 ゲートウェイ サブネットを作成するには、Azure portal にサインインし、仮想ネットワークに移動して、[設定] > [サブネット] を選んでから、[+ ゲートウェイ サブネット] を選びます。 ゲートウェイ サブネットを作成するときに、サブネットに含まれる IP アドレスの数を指定します。 必要な IP アドレスの数は、作成する VPN ゲートウェイの構成によって異なります。 /27 以上 (/26、/25 など) を指定して、ExpressRoute ゲートウェイの追加など、将来の変更に十分な IP アドレスを使用できるようにすることをお勧めします。

環境情報の収集

ポイント対サイト VPN を設定する前に、環境に関する情報をいくつか収集する必要があります。

Azure portal を使ってポイント対サイト VPN を設定するには、リソース グループ名、仮想ネットワーク名、ゲートウェイ サブネット名、ストレージ アカウント名がわかっている必要があります。

VPN 認証用のルート証明書の作成

オンプレミスの Windows コンピューターからの VPN 接続が、仮想ネットワークにアクセスするための認証を受けるには、2 つの証明書を作成する必要があります。

  1. 仮想マシン ゲートウェイに提供されるルート証明書
  2. ルート証明書で署名されるクライアント証明書

エンタープライズ ソリューションで生成されたルート証明書を使うことも、自己署名証明書を生成することもできます。 エンタープライズ ソリューションを使う場合は、IT 組織からルート証明書の .cer ファイルを入手します。

エンタープライズ証明書ソリューションを使わない場合は、この PowerShell スクリプトを使って自己署名ルート証明書を作成します。 仮想ネットワーク ゲートウェイをデプロイした後、クライアント証明書を作成します。 できれば、この記事で後ほどクライアント証明書を作成するときに変数を定義し直す必要がないように、PowerShell セッションを開いたままにします。

重要

この PowerShell スクリプトを、Windows 10 または Windows Server 2016 以降を実行しているオンプレミスのコンピューターから、管理者として実行します。 Azure の Cloud Shell または VM からは、スクリプトを実行しないでください。

$rootcertname                = 'CN=P2SRootCert'
$certLocation                = 'Cert:\CurrentUser\My'
$vpnTemp                     = 'C:\vpn-temp'
$exportedencodedrootcertpath = "$vpnTemp\P2SRootCertencoded.cer"
$exportedrootcertpath        = "$vpnTemp\P2SRootCert.cer"

if (-Not (Test-Path -Path $vpnTemp -PathType Container)) {
    New-Item -ItemType Directory -Force -Path $vpnTemp | Out-Null
}

if ($PSVersionTable.PSVersion.Major -ge 6) {
    Import-Module -Name PKI -UseWindowsPowerShell
}

$selfSignedCertParams = @{
    Type              = 'Custom'
    KeySpec           = 'Signature'
    Subject           = $rootcertname
    KeyExportPolicy   = 'Exportable'
    HashAlgorithm     = 'sha256'
    KeyLength         = '2048'
    CertStoreLocation = $certLocation
    KeyUsageProperty  = 'Sign'
    KeyUsage          = 'CertSign'
}
$rootcert = New-SelfSignedCertificate @selfSignedCertParams

Export-Certificate -Cert $rootcert -FilePath $exportedencodedrootcertpath -NoClobber | Out-Null

certutil -encode $exportedencodedrootcertpath $exportedrootcertpath | Out-Null

$rawRootCertificate = Get-Content -Path $exportedrootcertpath

$rootCertificate = ''

foreach ($line in $rawRootCertificate) { 
    if ($line -notlike '*Certificate*') { 
        $rootCertificate += $line 
    } 
}

仮想ネットワーク ゲートウェイをデプロイする

Azure 仮想ネットワーク ゲートウェイは、オンプレミスの Windows マシンの接続先となるサービスです。 仮想ネットワーク上にゲートウェイ サブネットをまだ作成していない場合は、仮想ネットワーク ゲートウェイをデプロイする前に、作成する必要があります。

仮想ネットワーク ゲートウェイをデプロイするには、2 つの基本コンポーネントが必要です。

  1. クライアントが世界中のどこに存在していてもゲートウェイを識別するパブリック IP アドレス
  2. クライアントの認証に使われる、前のステップで作成したルート証明書

仮想ネットワーク ゲートウェイをデプロイするには、Azure portal または Azure PowerShell を使用できます。 デプロイの完了までに最大で 45 分かかる場合があります。

Azure portal を使って仮想ネットワーク ゲートウェイをデプロイするには、次の手順のようにします。

  1. Azure portal にサインインします。

  2. [リソース、サービス、ドキュメントの検索] に「仮想ネットワーク ゲートウェイ」と入力します。 Marketplace の検索結果で仮想ネットワーク ゲートウェイを見つけて選びます。

  3. [+ 作成] を選んで、新しい仮想ネットワーク ゲートウェイを作成します。

  4. [基本] タブで、 [プロジェクトの詳細][インスタンスの詳細] の各値を入力します。

    Screenshot showing how to create a virtual network gateway using the Azure portal.

    • サブスクリプション:使用するサブスクリプションをドロップダウンから選択します。
    • リソース グループ:この設定は、このページで仮想ネットワークを選択すると自動入力されます。
    • Name:ゲートウェイに名前を付けます。 ゲートウェイの名前付けは、ゲートウェイ サブネットの名前付けと同じではありません。 作成するゲートウェイ オブジェクトの名前です。
    • リージョン: このリソースを作成するリージョンを選択します。 ゲートウェイのリージョンは、仮想ネットワークと同じである必要があります。
    • ゲートウェイの種類: [VPN] を選択します。 VPN Gateway では、仮想ネットワーク ゲートウェイの種類として VPN を使用します。
    • SKU: 使用する機能をサポートするゲートウェイ SKU をドロップダウンから選択します。 ゲートウェイ SKU を参照してください。 Basic SKU は IKEv2 認証をサポートしていないため、使わないでください。
    • 世代: 使用する世代を選択します。 Generation2 SKU を使用することをお勧めします。 詳細については、「ゲートウェイの SKU」を参照してください。
    • 仮想ネットワーク:ドロップダウンから、このゲートウェイの追加先の仮想ネットワークを選択します。 ゲートウェイを作成する仮想ネットワークが表示されない場合は、正しいサブスクリプションとリージョンを選んだことを確認します。
    • サブネット: このフィールドは淡色表示され、作成したゲートウェイ サブネットの名前とその IP アドレス範囲の一覧が表示されているはずです。 代わりに、[ゲートウェイ サブネットのアドレス範囲] フィールドとテキスト ボックスが表示される場合は、ゲートウェイ サブネットをまだ構成してありません (「前提条件」を参照)。
  5. 仮想ネットワーク ゲートウェイに関連付けられる [パブリック IP アドレス] の値を指定します。 このパブリック IP アドレスは、仮想ネットワーク ゲートウェイが作成されるときに、このオブジェクトに割り当てられます。 プライマリ パブリック IP アドレスが変わるのは、ゲートウェイが削除され、再度作成されたときのみです。 これは、サイズ変更、リセット、その他の内部メンテナンスやアップグレードを行っても変わりません。

    Screenshot showing how to specify the public IP address for a virtual network gateway using the Azure portal.

    • パブリック IP アドレス : [新規作成] を選択しておいてください。
    • パブリック IP アドレス名:このテキスト ボックスに、パブリック IP アドレス インスタンスの名前を入力します。
    • パブリック IP アドレス SKU: 設定が自動的に選択されます。
    • 割り当て: 通常、割り当ては自動的に選択され、[動的] または [静的] のいずれかになります。
    • [アクティブ/アクティブ モードの有効化]: [無効] を選びます。 アクティブ/アクティブ ゲートウェイ構成を作成する場合にのみ、この設定を有効にします。
    • [BGP の構成]: 構成で特に必要ない限り、[無効] を選びます。 この設定が必要である場合、既定の ASN は 65515 です。ただし、この値は変わる場合があります。
  6. [確認と作成] を選択して検証を実行します。 検証に合格したら、[作成] を選んで仮想ネットワーク ゲートウェイをデプロイします。 デプロイの完了までに最大で 45 分かかる場合があります。

  7. デプロイが完了したら、[リソースに移動] を選択します。

  8. 左側のペインで [設定] > [ポイント対サイトの構成] を選んでから、[今すぐ構成] を選びます。 [ポイント対サイトの構成] ページが表示されます。

    Screenshot showing how to configure a point-to-site VPN using the Azure portal.

    • [アドレス プール]: 使用するプライベート IP アドレス範囲を追加します。 VPN クライアントには、指定した範囲から動的に IP アドレスが割り当てられます。 最小のサブネット マスクは、アクティブ/パッシブ構成の場合は 29 ビット、アクティブ/アクティブ構成の場合は 28 ビットです。
    • [トンネルの種類]: 使用するトンネルの種類を指定します。 ネイティブ Windows VPN クライアント経由で接続しているコンピューターは、最初に IKEv2 を試します。 それで接続されない場合は、SSTP にフォールバックします (ドロップダウンから IKEv2 と SSTP の両方を選んだ場合)。 トンネルの種類 OpenVPN を選択した場合は、OpenVPN クライアントまたは Azure VPN クライアントを使用して接続できます。
    • [認証の種類]: 使用する認証の種類を指定します (この例では、[Azure 証明書] を選びます)。
    • [ルート証明書] の [名前]: ルート証明書のファイル名 (.cer ファイル)。
    • [公開証明書データ]: NotePad でルート証明書を開き、公開証明書データをコピーしてこのテキスト フィールドに貼り付けます。 この記事の PowerShell スクリプトを使って自己署名ルート証明書を生成した場合は、C:\vpn-temp にあります。 必ず、-----BEGIN CERTIFICATE----- と -----END CERTIFICATE----- の間にのみテキストを貼り付けてください。 余分なスペースや文字を含めないでください。

    Note

    トンネルの種類または認証の種類が表示されない場合は、ゲートウェイで Basic SKU が使われています。 Basic SKU では、IKEv2 認証はサポートされません。 IKEv2 を使う場合は、ゲートウェイを削除し、別のゲートウェイ SKU を使って作り直す必要があります。

  9. ページの上部にある [保存] を選んで構成設定をすべて保存し、ルート証明書の公開キー情報を Azure にアップロードします。

クライアント証明書の作成

ポイント対サイト接続を使って仮想ネットワークに接続する各クライアント コンピューターには、クライアント証明書がインストールされている必要があります。 ルート証明書からクライアント証明書を生成して、各クライアント コンピューターにインストールします。 有効なクライアント証明書をインストールしないと、クライアントが接続を試みたときに認証が失敗します。 エンタープライズ ソリューションで生成されたルート証明書からクライアント証明書を作成することも、自己署名ルート証明書からクライアント証明書を作成することもできます。

エンタープライズ ソリューションを使ってクライアント証明書を作成する

エンタープライズ証明書ソリューションを使用している場合は、共通名の値の形式 name@yourdomain.com を使用してクライアント証明書を生成します。 domain name\username 形式の代わりに、この形式を使用します。 クライアント証明書が、ユーザー一覧の最初の項目が "クライアント認証" であるユーザー証明書テンプレートに基づいていることを確認します。 証明書を確認するには、それをダブルクリックし、 [詳細] タブの [拡張キー使用法] を表示します。

自己署名ルート証明書からクライアント証明書を作成する

エンタープライズ証明書ソリューションを使っていない場合は、PowerShell を使って、仮想ネットワーク ゲートウェイの URI でクライアント証明書を作成できます。 この証明書は、前に作成したルート証明書を使って署名されます。 自己署名ルート証明書からクライアント証明書を生成した場合、お客様が生成に使用したコンピューターにそれが自動的にインストールされます。

クライアント証明書を別のクライアント コンピューターにインストールしたい場合は、証明書を証明書チェーン全体と共に .pfx ファイルとしてエクスポートします。 そうすることで、クライアントの認証に必要なルート証明書情報が含まれている .pfx ファイルが作成されます。 自己署名ルート証明書を .pfx としてエクスポートするには、ルート証明書を選び、「クライアント証明書のエクスポート」で説明されているのと同じ手順を使います。

自己署名ルート証明書を識別する

自己署名ルート証明書の作成に使ったのと同じ PowerShell セッションを使っている場合は、「クライアント証明書を生成する」に進んでかまいません。

そうでない場合は、次の手順のようにして、コンピューターにインストールされている自己署名ルート証明書を特定します。

  1. コンピューターにインストールされている証明書の一覧を取得します。

    Get-ChildItem -Path 'Cert:\CurrentUser\My'
    
  2. 返された一覧でサブジェクト名を探し、その横にあるサムプリントをテキスト ファイルにコピーします。 次の例では、2 つの証明書があります。 CN 名は、子証明書の生成元となる自己署名ルート証明書の名前です。 この例では、P2SRootCert という名前です。

    Thumbprint                                Subject
    ----------                                -------
    AED812AD883826FF76B4D1D5A77B3C08EFA79F3F  CN=P2SChildCert4
    7181AA8C1B4D34EEDB2F3D3BEC5839F3FE52D655  CN=P2SRootCert
    
  3. 前の手順の拇印を使用して、ルート証明書の変数を宣言します。 THUMBPRINT を、クライアント証明書の生成元となるルート証明書のサムプリントに置き換えます。

    $rootcert = Get-ChildItem -Path 'Cert:\CurrentUser\My\<THUMBPRINT>'
    

    たとえば、前のステップの P2SRootCert のサムプリントを使うと、コマンドは次のようになります。

    $rootcert = Get-ChildItem -Path 'Cert:\CurrentUser\My\7181AA8C1B4D34EEDB2F3D3BEC5839F3FE52D655'
    

クライアント証明書の生成

New-AzVpnClientConfiguration PowerShell コマンドレットを使って、クライアント証明書を生成します。 自己署名ルート証明書の作成に使ったのと同じ PowerShell セッションを使っていない場合は、前のセクションで説明したように、自己署名ルート証明書を特定する必要があります。 スクリプトを実行する前に、<resource-group-name> をリソース グループ名に置き換え、<vpn-gateway-name> を先ほどデプロイした仮想ネットワーク ゲートウェイの名前に置き換えます。

重要

Azure ファイル共有に接続するオンプレミスの Windows マシンから、管理者としてこの PowerShell スクリプトを実行します。 コンピューターは、Windows 10 または Windows Server 2016 以降を実行している必要があります。 Azure の Cloud Shell からスクリプトを実行しないでください。 スクリプト (Connect-AzAccount) を実行する前に、Azure アカウントにサインインしていることを確認します。

$clientcertpassword = '<enter-your-password>'
$resourceGroupName  = '<resource-group-name>'
$vpnName            = '<vpn-gateway-name>'
$vpnTemp            = 'C:\vpn-temp'
$certLocation       = 'Cert:\CurrentUser\My'

$vpnClientConfigParams = @{
    ResourceGroupName    = $resourceGroupName
    Name                 = $vpnName
    AuthenticationMethod = 'EAPTLS'
}
$vpnClientConfiguration = New-AzVpnClientConfiguration @vpnClientConfigParams

$webRequestParams = @{
    Uri = $vpnClientConfiguration.VpnProfileSASUrl
    OutFile = "$vpnTemp\vpnclientconfiguration.zip"
}
Invoke-WebRequest @webRequestParams

$expandArchiveParams = @{
    Path            = "$vpnTemp\vpnclientconfiguration.zip"
    DestinationPath = "$vpnTemp\vpnclientconfiguration"
}
Expand-Archive @expandArchiveParams

$vpnGeneric = "$vpnTemp\vpnclientconfiguration\Generic"
$vpnProfile = ([xml](Get-Content -Path "$vpnGeneric\VpnSettings.xml")).VpnProfile

$exportedclientcertpath = "$vpnTemp\P2SClientCert.pfx"
$clientcertname         = "CN=$($vpnProfile.VpnServer)"

$selfSignedCertParams = @{
    Type              = 'Custom'
    DnsName           = $vpnProfile.VpnServer
    KeySpec           = 'Signature'
    Subject           = $clientcertname
    KeyExportPolicy   = 'Exportable'
    HashAlgorithm     = 'sha256'
    KeyLength         = 2048
    CertStoreLocation = $certLocation
    Signer            = $rootcert
    TextExtension     = @('2.5.29.37={text}1.3.6.1.5.5.7.3.2')
}
$clientcert = New-SelfSignedCertificate @selfSignedCertParams

$mypwd = ConvertTo-SecureString -String $clientcertpassword -Force -AsPlainText

Export-PfxCertificate -FilePath $exportedclientcertpath -Password $mypwd -Cert $clientcert |
    Out-Null

VPN クライアントを構成する

Azure 仮想ネットワーク ゲートウェイは、オンプレミスの Windows マシンで VPN 接続を初期化するために必要な構成ファイルを含むダウンロード可能なパッケージを作成します。 構成パッケージには、作成した VPN ゲートウェイに固有の設定が含まれています。 トンネルの種類、証明書、認証の種類を変更するなど、ゲートウェイに変更を加えた場合は、別の VPN クライアント プロファイル構成パッケージを生成して、各クライアントにインストールする必要があります。 そうしないと、VPN クライアントが接続できなくなる可能性があります。

Windows 10/Windows Server 2016 以降で導入された Always On VPN 機能を使って、VPN 接続を構成します。 このパッケージには、レガシ Windows VPN クライアントを構成する実行可能ファイルも含まれます (必要な場合)。 このガイドでは、レガシ Windows VPN クライアントではなく Always On VPN を使います。なぜなら、Always On VPN クライアントを使うと、マシンに対する管理者アクセス許可を持っていなくても、Azure VPN に接続したり切断したりできるからです。

クライアント証明書のインストール

仮想ネットワーク ゲートウェイに対する認証に必要なクライアント証明書をインストールするには、クライアント コンピューターで次の手順のようにします。

  1. クライアント証明書がエクスポートされた後、 .pfx ファイルを探して クライアント コンピューターにコピーします。
  2. クライアント コンピューターで、 .pfx ファイルをダブルクリックしてインストールします。 [ストアの場所][現在のユーザー] のままにしておき、 [次へ] を選択します。
  3. [インポートするファイル] ページでは、何も変更しないでください。 [次へ] を選択します。
  4. [秘密キーの保護] ページで、証明書のパスワードを入力するか、セキュリティ プリンシパルが正しいことを確認し、 [次へ] を選択します。
  5. [証明書ストア] ページで、既定の場所をそのまま使用し、 [次へ] を選択します。
  6. [完了] を選択します。 証明書のインストールの [セキュリティ警告][はい] を選択します。 証明書を生成したため、このセキュリティ警告では安心して [はい] を選択できます。
  7. これで証明書がインポートされます。

VPN クライアントをインストールする

このセクションは、Windows オペレーティング システムに含まれるネイティブ VPN クライアントを、仮想ネットワーク (IKEv2 と SSTP) に接続するように構成する場合に役立ちます。 この構成では、追加のクライアント ソフトウェアは必要ありません。

構成ファイルを表示する

クライアント コンピューターで C:\vpn-temp に移動し、vpnclientconfiguration フォルダーを開いて、次のサブフォルダーを表示します。

  • WindowsAmd64 および WindowsX86。Windows の 64 ビットと 32 ビットのインストーラー パッケージがそれぞれに含まれています。 WindowsAmd64 インストーラー パッケージは、Amd だけでなく、サポートされている 64 ビットの Windows クライアントを対象としています。
  • Generic。これには、独自の VPN クライアント構成の作成に使用される全般的な情報が含まれています。 Generic フォルダーが提供されるのは、IKEv2 または SSTP+IKEv2 がゲートウェイ上で構成された場合です。 SSTP のみが構成されている場合、Generic フォルダーは存在しません。

VPN クライアント プロファイルを構成する

バージョンがクライアントのアーキテクチャと一致する限り、各 Windows クライアント コンピューターで同じ VPN クライアント構成パッケージを使用できます。

Note

インストーラー パッケージを実行するには、接続元の Windows クライアント コンピューターでの管理者権限が必要です。

  1. Windows コンピューターのアーキテクチャに対応する VPN クライアント構成ファイルを選択します。 64 ビットのプロセッサ アーキテクチャの場合は、VpnClientSetupAmd64 インストーラー パッケージを選びます。 32 ビットのプロセッサ アーキテクチャの場合は、VpnClientSetupX86 インストーラー パッケージを選びます。

  2. パッケージをダブルクリックしてインストールします。 SmartScreen ポップアップが表示された場合は、 [詳細][実行] の順に選択します。

  3. VPN に接続します。 [VPN 設定] に移動し、作成した VPN 接続を探します。 仮想ネットワークと同じ名前です。 [接続] を選択します。 ポップアップ メッセージが表示される場合があります。 [続行] を選択して、昇格された特権を使用します。

  4. [接続] 状態ページで、[接続] を選択して接続を開始します。 [証明書の選択] 画面が表示された場合は、表示されているクライアント証明書が接続に使用する証明書であることを確認します。 そうでない場合は、ドロップダウン矢印を使用して適切な証明書を選び、[OK] を選択します。

Azure ファイル共有をマウントする

ポイント対サイト VPN を設定したので、それを使って Azure ファイル共有をオンプレミスのコンピューターにマウントできるようになりました。

ストレージ アカウント キーを使ってファイル共有をマウントするには、Windows コマンド プロンプトを開き、次のコマンドを実行します。 <YourStorageAccountName><FileShareName>、および <YourStorageAccountKey> を独自の値に置き換えます。 Z: が既に使用されている場合は、使用可能なドライブ文字に置き換えます。 Azure portal でストレージ アカウントに移動し、[セキュリティとネットワーク]>[アクセス キー] を選ぶことで、ストレージ アカウント キーを見つけることができます。

net use Z: \\<YourStorageAccountName>.file.core.windows.net\<FileShareName> /user:localhost\<YourStorageAccountName> <YourStorageAccountKey>

VPN ルート証明書のローテーション

有効期限または新しい要件のためにルート証明書をローテーションする必要がある場合は、仮想ネットワークゲートウェイを再デプロイしなくても、既存の仮想ネットワークゲートウェイに新しいルート証明書を追加できます。 次のスクリプトを使ってルート証明書を追加した後、VPN クライアント証明書を再作成する必要があります。

スクリプトを実行する前に、<resource-group-name><desired-vpn-name-here>、および <new-root-cert-name> を実際の値に置き換えます。

#Creating the new Root Certificate
$ResourceGroupName           = '<resource-group-name>'
$vpnName                     = '<desired-vpn-name-here>'
$NewRootCertName             = '<new-root-cert-name>'
$rootcertname                = "CN=$NewRootCertName"
$certLocation                = 'Cert:\CurrentUser\My'
$date                        = Get-Date -Format 'MM_yyyy'
$vpnTemp                     = "C:\vpn-temp_$date"
$exportedencodedrootcertpath = "$vpnTemp\P2SRootCertencoded.cer"
$exportedrootcertpath        = "$vpnTemp\P2SRootCert.cer"

if (-Not (Test-Path -Path $vpnTemp -PathType Container)) {
    New-Item -ItemType Directory -Force -Path $vpnTemp | Out-Null
}

$selfSignedCertParams = @{
    Type              = 'Custom'
    KeySpec           = 'Signature'
    Subject           = $rootcertname
    KeyExportPolicy   = 'Exportable'
    HashAlgorithm     = 'sha256'
    KeyLength         = 2048
    CertStoreLocation = $certLocation
    KeyUsageProperty  = 'Sign'
    KeyUsage          = 'CertSign'
}
$rootcert = New-SelfSignedCertificate @selfSignedCertParams

$exportCertParams = @{
    Cert      = $rootcert
    FilePath  = $exportedencodedrootcertpath
    NoClobber = $true
}
Export-Certificate @exportCertParams | Out-Null

certutil -encode $exportedencodedrootcertpath $exportedrootcertpath | Out-Null

$rawRootCertificate = Get-Content -Path $exportedrootcertpath

$rootCertificate = ''

foreach($line in $rawRootCertificate) { 
    if ($line -notlike '*Certificate*') { 
        $rootCertificate += $line 
    } 
}

#Fetching gateway details and adding the newly created Root Certificate.
$gateway = Get-AzVirtualNetworkGateway -Name $vpnName -ResourceGroupName $ResourceGroupName

$vpnClientRootCertParams = @{
    PublicCertData               = $rootCertificate
    ResourceGroupName            = $ResourceGroupName
    VirtualNetworkGatewayName    = $gateway
    VpnClientRootCertificateName = $NewRootCertName
}
Add-AzVpnClientRootCertificate @vpnClientRootCertParams

関連項目