Help us understand the problem. What is going on with this article?

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

Azure 仮想ネットワークの Point to Site VPN 接続 (OpenVPN) でAzure AD認証がサポートされたとアナウンスがありました。

アップデートを確認

参考:Native Azure Active Directory authentication support in point-to-site VPN

上記のアップデート情報には、以下のように記載されています。(機械翻訳)

OpenVPN プロトコルのネイティブ Azure Active Directory (Azure AD) 認証サポート、および Windows 用 Azure VPN クライアントが利用可能になりました。

Azure AD の統合により、Point to Site VPN のユーザーベースのポリシー、条件付きアクセス、および多要素認証 (MFA) が可能になるため、ネイティブの Azure AD 認証サポートは企業顧客から広く要求されました。ネイティブ Azure AD 認証では、Azure AD トークンを取得および検証するために、Azure VPN ゲートウェイ統合と新しい Azure VPN クライアントの両方が必要です。

今までよりセキュアに VPN 接続でき、かつ運用がとてもラクになりそうですね。:heart_eyes:

やってみよう

ざっくりな手順は以下のとおり。
今回は、新規の仮想ネットワークの作成から作業してみます。

  1. 新規で仮想ネットワークと VPN ゲートウェイを作成する
  2. Azure AD テナントを構成する
  3. Point to Site VPN クライアントを構成する

1. 新規で仮想ネットワークと VPN ゲートウェイを作成する

まず新規で仮想ネットワークを作成し、GatewaySubnet を作成します。

image.png

続いて、VPN ゲートウェイを作成します。
※VPN ゲートウェイの SKU は Basic 以外を選択すること

image.png

2. Azure AD テナントを構成する

それでは本題に入ります。
以下のドキュメントの手順に従って操作していきます。

参考:Azure AD 認証を使用する P2S Open VPN 接続用の Azure Active Directory テナントを作成する

Azure AD テナントを作成する

Azure サブスクリプションに紐づく Azure AD テナントを利用します。なので省略。

ユーザーを作成する

ユーザーは、既存の全体管理者アカウントを利用します。なので省略。

Azure AD テナントに「Azure VPN」を登録する

Azure AD テナントにアプリケーション「Azure VPN」を登録します。これは初回だけ行います。

以下の URL アクセスします。サインインを求められますので、対象の Azure AD テナントの全体管理者アカウントでサインインします。

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

すると、以下のように管理者の承諾を求められますので、[承諾] をクリックします。

image.png

その後、Azure AD テナントの [エンタープライズ アプリケーション] の一覧に「Azure VPN」が掲載されます。

image.png

「Azure VPN」のプロパティを確認してみます。
[ユーザーの割り当てが必要ですか?] 項目を「はい」と設定することにより、このアプリケーションにアクセスを許可するユーザーを限定することも可能ですね。

image.png

VPN ゲートウェイで Azure AD 認証を有効にする

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

image.png

PowerShell で、以下のコマンドを実行して、VPN ゲートウェイでの Azure AD 認証を有効にします。
「<your Directory ID>」を先ほどコピーした Azure AD テナントの「ディレクトリ ID」に置換してください。
併せて、VPN クライアントのプロトコル「-VpnClientProtocol OpenVPN」とアドレス空間「-VpnClientAddressPool "172.16.0.0/24"」も設定します。

$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 `
 -VpnClientAddressPool "172.16.0.0/24"

実行結果は以下のとおり。
赤枠の「VPN クライアント構成 (VpnClientConfiguration)」が設定されていることが確認できます。

image.png

クライアント構成プロファイルをダウンロードする

クライアント構成プロファイルを生成して、ダウンロードします。

PowerShell で、以下のコマンドを実行して、クライアント構成プロファイルを生成します。

$rgName = "<Resource group>"
$gwName = "<name of VPN gateway>"
$profile = New-AzVpnClientConfiguration -ResourceGroupName $rgName -Name $gwName  `
 -AuthenticationMethod "EapTls"

次に、クライアント構成プロファイルが格納している ZIP ファイルをダウンロードするための URL を出力します。

$profile.VpnProfileSASUrl

出力した URL をブラウザーでアクセスして、クライアント構成プロファイルが格納している ZIP ファイルをダウンロードします。

ダウンロードした ZIP ファイルを解凍して「AzureVPN」フォルダーを開くと、「azurevpnconfig.xml」があることが確認できます。

image.png

3. Point to Site VPN クライアントを構成する

最後に、VPN クライアントをセットアップします。
以下のドキュメントを参考に操作していきます。

参考:VPN クライアントを P2S VPN 接続用に構成する:Azure AD 認証 (プレビュー)

Point to Site VPN 接続する PC (検証では Windows 10 を使用) で、Microsoft ストアから「Azure VPN Client (Preview)」をダウンロードしてインストールします。

image.png

起動すると、以下のような画面が表示されます。
VPN クライアントを構成するため、画面の左下にある「+」をクリックして「インポート」を選択します。

image.png

先ほど入手した「クライアント構成プロファイル (azurevpnconfig.xml)」を開きます。

image.png

画面の右側に反映されますので、[保存] をクリックします。

image.png

利用できる状態になりました。

image.png

動作確認

それでは VPN 接続してみます。

PC で、「Azure VPN Client」を起動します。
画面の左側のリストから先ほどインポートした「VPN 接続」を選択して [接続] をクリックします。

image.png

資格情報が求められますので、対象の Azure AD テナントのユーザーでサインインします。
※デバイスに登録されているアカウントでない場合は「別のアカウントを使用する」を選択して、[続行] をクリック

image.png

接続できました。

image.png

仮想ネットワーク上の仮想マシンにリモートデスクトップ接続もできました。

image.png

検証:「Azure VPN に割り当てられていないユーザー」の場合

前述した以下の点を検証してみます。ユーザー割り当てを必要とし、割り当てられていないユーザーが Point to Site VPN 接続を試みた場合はどうなるでしょう。

「Azure VPN」のプロパティを確認してみます。
[ユーザーの割り当てが必要ですか?] 項目を「はい」と設定することにより、このアプリケーションにアクセスを許可するユーザーを限定することも可能ですね。

[ユーザーの割り当てが必要ですか?] 項目を「はい」と設定し、[ユーザーとグループ] にいないユーザーアカウントで試してみます。

image.png

「サインインしているユーザーは、アプリケーションのロールに割り当てられていません」ということで接続できず...これは想定どおりの動作ですね。

image.png

検証:ゲストユーザー「別組織のアカウント(外部の Azure AD アカウント)」の場合

Azure AD テナントにゲストとして招待した「別組織のアカウント(外部の Azure AD アカウント)」は VPN 接続できるのでしょうか?

以下はその実行結果です。VPN 接続できませんでした。

image.png

「クライアントは、クライアントのアプリケーション登録で要求された許可にリストされていないリソースへのアクセスを要求しました。」というのは、サインインしているユーザーのプロファイルを読み取ろうとして失敗したということです。このアカウントの Azure AD テナントでは、「Azure VPN」からのユーザープロファイルのアクセス許可していない (そもそもアプリケーション登録していない) ので、正しい動作となります。

検証:ゲストユーザー「Microsoft アカウント」の場合

Azure AD テナントにゲストとして招待した「Microsoft アカウント」は VPN 接続できるのでしょうか?
※検証では「Outlook.com (hotmail) アカウント」を使いました。

以下はその実行結果です。

image.png

挙動はナゾですが、VPN 接続できませんでした。

検証した結果、「Azure VPN」にアクセスを許可されたユーザー (対象 Azure AD テナント内部) は VPN 接続可。ゲストユーザーは VPN 接続不可。となりました。
※これは、あくまで私が検証したの結果 (2019年11月時点) であり、今後のアップデートで機能改善するかもしれません。あしからず。

まとめ

これまで Point to Site VPN 接続を採用した場合、私は「VPN クライアント証明書の認証 (Azure 証明書)」を主に使っていました。これだと、定期的に証明書を更新しなければならず、また厳密にはユーザーと紐づかないので、運用がとても面倒くさいなと思っていました。

今回の「Azure AD 認証がサポート」されたことによって、ID 管理だけでアクセス許可/拒否が管理できるのはとてもラクであり、Azure AD MFAAzure AD 条件付きアクセス を併せて使えばよりセキュアに VPN 接続することができるようになるので、安心ですね。:blush:

次回につづく

tetsuya-ooooo
Azure solution engineer. Microsoft MVP for Microsoft Azure
https://mvp.microsoft.com/ja-jp/PublicProfile/5003113
persol-pt
労働人口の減少が見込まれる現代において、 一人ひとりが生み出す付加価値を最大化することが、 日本における重要なテーマです。 わたしたちは、 人・プロセスデザイン・テクノロジーの力で、 お客さまのビジネスプロセスに変革をもたらし、 人と組織の生産性を高めていきます。 さらに、はたらくを楽しむことを大切にし、 「はたらいて、笑おう。」の世界を実現します。
https://www.persol-pt.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away