【Azure AD】AWS Client VPN の SSO環境構築

記事タイトルとURLをコピーする

こんにちは、クラウドインテグレーション部 技術1課 宮形 です。

先日、別BLOGの検証目的で Microsoft Azure Active Directory (以下 AzureAD と記) の評価ライセンスを取得しました。 無料評価期間が終わる前に、せっかくなので AWS でSSOとかIDフェデレーションとか、クラウドエンジニアリングっぽい事に使ってみたいと思いました。

ということで、AWS で利用することが多い AWS Client VPN の認証を AzureAD でおこなう検証を行いました。その検証手順・結果を本BLOGで ご紹介します。

対象

下記のようなユースケースで利用可能かと思います。

  • 自社のクラウド認証基盤は AzureAD を利用する
  • 外出先で自社システムを利用するために AWS Client VPN を利用する
  • シングルサインオン (SSO) で利用する

検証内容

先日のBLOGでご紹介しました、ハイブリッド AzureAD 参加した Amazon WorkSpaces の環境で、SSO が正しく動作するか確認します。 blog.serverworks.co.jp

参考資料

AWS および Microsoft 両方の公式マニュアルに情報がありますので、基本はこちらに沿って構築を行います。 マニュアル通りに進めると1か所ハマる場所を見つけたので共有できればと思います。

Authentication - AWS クライアント VPN

チュートリアル:Azure Active Directory シングル サインオン (SSO) と AWS ClientVPN の統合 | Microsoft Docs

前提条件

  • Azure AD 構築済
  • Azure AD Connect を用いたオンプレミスADDSとのパスワードハッシュ同期環境
  • AWS VPC・サブネット 環境は構築済
  • 独自ドメイン取得、DNSサーバー契約済(私はお名前.comを利用)
  • AWS がVPN接続ポイントに利用するSSLサーバー証明書は ACM より発行

AzureAD アプリケーションの登録

Azure Portal の AzureAD 管理画面より「エンタープライズアプリケーション」へ移動します。

f:id:swx-miyagata:20220119092037p:plain

「すべてのアプリケーション」より「+新しいアプリケーション」をクリックします。

f:id:swx-miyagata:20220119144707p:plain

「Azure AD ギャラリーの参照」の画面となります。検索窓に「Amazon」と入力すると、一覧に「AWS Client VPN」が出てきますので選択します。(ライバル製品の設定テンプレートを用意しているところは好印象)

f:id:swx-miyagata:20220119092122p:plain

「名前」はわかりやすい任意の値で大丈夫です。

f:id:swx-miyagata:20220119092149p:plain

「シングル サインオン」より「SAML」をクリックします。

f:id:swx-miyagata:20220119092340p:plain

「SAML によるシングル サインオンのセットアップ」の画面となります。ここで色々と設定します。 「1. 基本的な SAML 構成」の「編集」をクリックします。

f:id:swx-miyagata:20220119092411p:plain

「基本的な SAML を構成」の画面となります。下記のように設定します。

パラメーター
識別子 (エンティティID) urn:amazon:webservices:clientvpn
応答URL https://127.0.0.1:35001
サインオン URL https://127.0.0.1:35001

f:id:swx-miyagata:20220119092450p:plain

「2. 属性とクレーム」の「編集」をクリックします。

f:id:swx-miyagata:20220119092535p:plain

「属性とクレーム」の画面となります。「+新しいクレームの追加」をクリックします。 「要求の管理」の画面になります。下記のように追加します。

パラメーター
名前 memberOf
名前空間 (ブランク)
ソース 属性
ソース属性 "user.groups"

(クレームと聞くと「苦情」みたいに聞こえますが、ここでは「要求」みたいな意味だと思われます。AWS側から認証要求する際にグループ指定ができるので、その応答を受けるための設定となります。)

f:id:swx-miyagata:20220119092615p:plain

「3. SAML 署名証明書」の「編集」をクリックします。

f:id:swx-miyagata:20220119092645p:plain

「SAML 署名証明書」の画面となります。下記のように設定を変更します。

パラメーター
署名オプション SAML 応答とアサーションへの署名

この設定は Microsoft 側のマニュアルには記載がありませんでした。 デフォルトの「SAMLアサーションへの署名」のまま設定を進めると、AWS Client VPN の認証がエラーになりました。 AWS 側のマニュアルには「SAML ベースのフェデレーション認証の要件と考慮事項 - SAML 応答は署名済み」とあるので変更が 必要であったと判断されます。

f:id:swx-miyagata:20220119092706p:plain

ここで、AzureAD の管理画面トップに戻り「アプリの登録」をクリックします。 「すべてのアプリケーション」タブを選択し、一覧より先ほど設定した AWS Client VPN のアプリケーションを選択します。

f:id:swx-miyagata:20220119092936p:plain

「マニフェスト」をクリックすると、JSONを編集する画面になります。 応答URL(replyUrlsWithType)を https から http に変更します。AWS Client VPN ソフトウェア仕様に合わせた対応となります。 変更後「保存」をクリックします。

f:id:swx-miyagata:20220119093008p:plain

「エンタープライズアプリケーション」-「シングルサインオン」の画面に戻ります。 「3. SAML署名証明書」の「フェデレーション メタデータ XML」を「ダウンロード」します。 .xmlファイルがパソコンにダウンロードされます。後で AWS にアップロードするので保管しておきます。

f:id:swx-miyagata:20220119093052p:plain

f:id:swx-miyagata:20220119093125p:plain

AzureAD VPN許可ユーザーの登録

AzureAD 側で、AWS Client VPN の認証を許可するユーザーを選択します。 「エンタープライズアプリケーション」-「ユーザーとグループ」より、VPN接続許可するユーザーを登録します。

f:id:swx-miyagata:20220119093238p:plain

f:id:swx-miyagata:20220119093334p:plain

これで AzureAD側 の準備は完了です。続けて AWS 側の設定を行います。

AWS IDプロバイダ の登録

AWS マネージメントコンソールの「Identity and Access Management (IAM)」の画面より「IDプロバイダ」-「プロバイダを追加」をクリックします。

f:id:swx-miyagata:20220119093406p:plain

「IDプロバイダ」の画面となります。下記のように設定し、AzureAD 側でダウンロードしたメタデータXMLファイルをアップロードします。

パラメーター
プロバイダのタイプ SAML
プロバイダ名 任意の名前

f:id:swx-miyagata:20220119093448p:plain

「プロバイダを追加」すると、IAMロールの割り当てを促すリボンが表示されますが、こちらは対応不要です。

f:id:swx-miyagata:20220119093509p:plain

AWS ACM SSLサーバー証明書の発行

AWS Client VPN の接続ポイント用にSSLサーバー証明書が必要となります。今回検証では、AWS Certificate Manager (ACM) でSSLサーバー証明書を発行しました。ACMで発行するパブリック証明書は無料で利用できます。ただし、Route 53 でドメイン取得、DNSサーバー運用 等については課金対象です。 AWS Certificate Manager(SSL/TLS 証明書のプロビジョン、管理、およびデプロイ)| AWS

ACMの画面より「証明書をリクエスト」します。

f:id:swx-miyagata:20220119093527p:plain

「証明書をリクエスト」の画面が開きます。「パブリック証明書をリクエスト」を選択します。

f:id:swx-miyagata:20220119093558p:plain

次の画面では、「完全修飾ドメイン名」「検証方法の選択」を設定します。私は お名前.com で取得している独自ドメインがあるので、それを使います。「DNS検証」を選択して「リクエスト」します。

f:id:swx-miyagata:20220119093620p:plain

まだ検証が完了していないので、「ステータス:保留中と検証」のままです。「証明書ID」をクリックします。

f:id:swx-miyagata:20220119093646p:plain

DNS検証用に設定するCNAMEレコードが指示されていますので、この通りにDNSサーバーへレコード登録します。

f:id:swx-miyagata:20220119093752p:plain

DNSレコードが正しく登録されてしばらく時間がたつと、「ステータス:発行済み」となります。これで ACM でのSSLサーバー証明書の準備は完了です。

f:id:swx-miyagata:20220119093809p:plain

AWS セキュリティグループの設定

AWS Client VPN で接続するクライアントと、VPC・サブネット間の通信を制御するセキュリティグループをあらかじめ準備しておきます。

インバウンドルールは無しとし、アウトバウンドルールのみ設定とします。許可するタイプ・プロトコルやIPアドレス範囲CIDRブロックを定義します。

f:id:swx-miyagata:20220119093835p:plain

f:id:swx-miyagata:20220119093917p:plain

AWS クライアントVPNエンドポイントの設定

「VPC」の画面より「クライアントVPNエンドポイント」-「クライアントVPNエンドポイントの作成」をクリックします。

f:id:swx-miyagata:20220119093938p:plain

「クライアントVPNエンドポイントの作成」の画面が開きます。下記のように設定します。

パラメーター
名前タグ 任意の名前
説明 任意
クライアント IPv4 CIDR VPNクライアント接続時に端末へ割り当たるIPアドレスを設定 /22以上
サーバー証明書ARN 先ほどACMで発行したSSLサーバー証明書(検索で表示される)
認証オプション ユーザーベースの認証を使用 - 統合認証
SAMLプロバイダーARN 先ほどIAMで設定したIDプロバイダ(検索で表示される)
スプリットトンネルを有効にする オン
VPC ID クライアントVPNで接続するVPC
セキュリティグループID 先ほど設定したセキュリティグループを選択

他はデフォルトのままとしましたが、環境によってDNSサーバー等も設定します。

f:id:swx-miyagata:20220119094001p:plain

f:id:swx-miyagata:20220119094029p:plain

ひとつ前の画面に戻ります。まだ「状態:保留中」となっています。 登録したクライアントVPNエンドポイントを選択します。「関連付け」タブより「関連付け」をクリックします。

f:id:swx-miyagata:20220119094114p:plain

「ターゲットネットワークへのクライアントVPNの関連付けの作成」の画面が開きます。クライアントVPNで接続するVPC・サブネットを設定します。複数登録もできます。

f:id:swx-miyagata:20220119094131p:plain

「認証」タブより「受信の承認」をクリックします。

f:id:swx-miyagata:20220119094221p:plain

「認証ルールの追加」の画面が開きます。「アクセスを有効にする送信先ネット」のIPアドレスCIDRブロックを設定します。 本BLOGの検証では「アクセスを許可する対象:すべてのユーザーにアクセスを許可する」としました。VPN認証に利用するユーザーID毎に接続先IPアドレスを制限する場合、この設定でカスタマイズすることになります。

f:id:swx-miyagata:20220119094242p:plain

しばらく待つと「状態:使用可能」となります。「クライアント設定のダウンロード」をクリックします。 クライアントVPN接続するための設定情報ファイル .ovpn をダウンロードします。このファイルはクライアント端末へ配布して利用します。

f:id:swx-miyagata:20220119094258p:plain

f:id:swx-miyagata:20220119094319p:plain

これで AWS側 の準備は完了です。クライアント端末からVPN接続が行えるか確認します。

動作確認 - クライアント端末からのVPN接続

クライアント端末へ専用VPNソフトウェア AWS VPN Client をインストールします。AWSサイトより対応OS毎インストーラーを入手してインストールします。 AWS Client VPN Download | Amazon Web Services

本BLOGの検証では Windows 10 端末を利用しています。インストールが終わりましたら、ソフトウェアを起動します。 メニューより「ファイル」-「プロファイルを管理」をクリックします。

f:id:swx-miyagata:20220119094336p:plain

「プロファイルを管理」の画面が開きます。「プロファイルを追加」をクリックします。先ほどAWSマネージメントコンソールよりダウンロードした .ovpn ファイルを取り込みます。これでVPN接続の準備完了です。

f:id:swx-miyagata:20220119094413p:plain

AWS VPN Client を起動し、一覧より登録したプロファイルを選択し「接続」をクリックします。

f:id:swx-miyagata:20220119094509p:plain

AzureAD で認証する設定のため、ブラウザが起動し Microsoft のサインイン画面となります。 AzureAD のユーザーID・パスワードを入力してサインインします。

f:id:swx-miyagata:20220119094614p:plain

サインイン成功後にブラウザ画面が「。。。いつでも閉じることができます」となりましたらクローズします。

f:id:swx-miyagata:20220119094632p:plain

「接続済み」の表示になれば、AWS Client VPN の接続は成功です。クライアント端末から AWS VPC 上のリソースに接続できるか確認します。

f:id:swx-miyagata:20220119094703p:plain

Windows端末より ipconfig を打つと、先ほどクライアントVPNエンドポイントで設定した「クライアント IPv4 CIDR」のIPアドレスが割り振られていることがわかります。

f:id:swx-miyagata:20220119094726p:plain

テストとしてVPC上で起動するEC2へ ping を発行します。無事応答が返ってきました。

f:id:swx-miyagata:20220119094742p:plain

スプリットトンネルを設定したので、route print の結果では VPC の CIDR のみ仮想イーサーネットへルーティングが向けられていることがわかります。

f:id:swx-miyagata:20220119094820p:plain

動作確認 - SSO

先日のBLOGで紹介したハイブリッド AzureAD 参加している Amazon WorkSpaces で、同様に AWS Client VPN の接続を行ってみると、Azure AD のユーザーID・パスワード入力不要で、接続完了することが確認できます。SSO が正常動作していることがわかります。

f:id:swx-miyagata:20220119150010p:plain

まとめ

AWS Client VPN は専用のVPNルーターが設置できない環境でも、AWS上の VPC とセキュアに接続できるサービスのため、ご活用いただけるシーンは多いと思います。ただし、ユーザーID・パスワードが漏洩すると、意図しない第3者が接続するリスクがあります。AzureAD や他多くのIDフェデレーションサービス(IDaaS)では、多要素認証をサポートしているので、合わせて検討が必要です。

利用者の利便性を向上しつつも、ID管理が1つに集約される IDaaS を用いたSSOは、システム管理者の方の負担減にもなる等 メリットが多いです。AWS Client VPN をご検討される場合は、合わせてSSOもご検討いただけると良いと思います。

宮形純平(執筆記事の一覧)

クラウドインテグレーション部 技術1課

好きなお酒は缶チューハイと本格焼酎