こんにちは、クラウドインテグレーション部 技術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 管理画面より「エンタープライズアプリケーション」へ移動します。
「すべてのアプリケーション」より「+新しいアプリケーション」をクリックします。
「Azure AD ギャラリーの参照」の画面となります。検索窓に「Amazon」と入力すると、一覧に「AWS Client VPN」が出てきますので選択します。(ライバル製品の設定テンプレートを用意しているところは好印象)
「名前」はわかりやすい任意の値で大丈夫です。
「シングル サインオン」より「SAML」をクリックします。
「SAML によるシングル サインオンのセットアップ」の画面となります。ここで色々と設定します。 「1. 基本的な SAML 構成」の「編集」をクリックします。
「基本的な SAML を構成」の画面となります。下記のように設定します。
パラメーター | 値 |
---|---|
識別子 (エンティティID) | urn:amazon:webservices:clientvpn |
応答URL | https://127.0.0.1:35001 |
サインオン URL | https://127.0.0.1:35001 |
「2. 属性とクレーム」の「編集」をクリックします。
「属性とクレーム」の画面となります。「+新しいクレームの追加」をクリックします。 「要求の管理」の画面になります。下記のように追加します。
パラメーター | 値 |
---|---|
名前 | memberOf |
名前空間 | (ブランク) |
ソース | 属性 |
ソース属性 | "user.groups" |
(クレームと聞くと「苦情」みたいに聞こえますが、ここでは「要求」みたいな意味だと思われます。AWS側から認証要求する際にグループ指定ができるので、その応答を受けるための設定となります。)
「3. SAML 署名証明書」の「編集」をクリックします。
「SAML 署名証明書」の画面となります。下記のように設定を変更します。
パラメーター | 値 |
---|---|
署名オプション | SAML 応答とアサーションへの署名 |
この設定は Microsoft 側のマニュアルには記載がありませんでした。 デフォルトの「SAMLアサーションへの署名」のまま設定を進めると、AWS Client VPN の認証がエラーになりました。 AWS 側のマニュアルには「SAML ベースのフェデレーション認証の要件と考慮事項 - SAML 応答は署名済み」とあるので変更が 必要であったと判断されます。
ここで、AzureAD の管理画面トップに戻り「アプリの登録」をクリックします。 「すべてのアプリケーション」タブを選択し、一覧より先ほど設定した AWS Client VPN のアプリケーションを選択します。
「マニフェスト」をクリックすると、JSONを編集する画面になります。 応答URL(replyUrlsWithType)を https から http に変更します。AWS Client VPN ソフトウェア仕様に合わせた対応となります。 変更後「保存」をクリックします。
「エンタープライズアプリケーション」-「シングルサインオン」の画面に戻ります。 「3. SAML署名証明書」の「フェデレーション メタデータ XML」を「ダウンロード」します。 .xmlファイルがパソコンにダウンロードされます。後で AWS にアップロードするので保管しておきます。
AzureAD VPN許可ユーザーの登録
AzureAD 側で、AWS Client VPN の認証を許可するユーザーを選択します。 「エンタープライズアプリケーション」-「ユーザーとグループ」より、VPN接続許可するユーザーを登録します。
これで AzureAD側 の準備は完了です。続けて AWS 側の設定を行います。
AWS IDプロバイダ の登録
AWS マネージメントコンソールの「Identity and Access Management (IAM)」の画面より「IDプロバイダ」-「プロバイダを追加」をクリックします。
「IDプロバイダ」の画面となります。下記のように設定し、AzureAD 側でダウンロードしたメタデータXMLファイルをアップロードします。
パラメーター | 値 |
---|---|
プロバイダのタイプ | SAML |
プロバイダ名 | 任意の名前 |
「プロバイダを追加」すると、IAMロールの割り当てを促すリボンが表示されますが、こちらは対応不要です。
AWS ACM SSLサーバー証明書の発行
AWS Client VPN の接続ポイント用にSSLサーバー証明書が必要となります。今回検証では、AWS Certificate Manager (ACM) でSSLサーバー証明書を発行しました。ACMで発行するパブリック証明書は無料で利用できます。ただし、Route 53 でドメイン取得、DNSサーバー運用 等については課金対象です。 AWS Certificate Manager(SSL/TLS 証明書のプロビジョン、管理、およびデプロイ)| AWS
ACMの画面より「証明書をリクエスト」します。
「証明書をリクエスト」の画面が開きます。「パブリック証明書をリクエスト」を選択します。
次の画面では、「完全修飾ドメイン名」「検証方法の選択」を設定します。私は お名前.com で取得している独自ドメインがあるので、それを使います。「DNS検証」を選択して「リクエスト」します。
まだ検証が完了していないので、「ステータス:保留中と検証」のままです。「証明書ID」をクリックします。
DNS検証用に設定するCNAMEレコードが指示されていますので、この通りにDNSサーバーへレコード登録します。
DNSレコードが正しく登録されてしばらく時間がたつと、「ステータス:発行済み」となります。これで ACM でのSSLサーバー証明書の準備は完了です。
AWS セキュリティグループの設定
AWS Client VPN で接続するクライアントと、VPC・サブネット間の通信を制御するセキュリティグループをあらかじめ準備しておきます。
インバウンドルールは無しとし、アウトバウンドルールのみ設定とします。許可するタイプ・プロトコルやIPアドレス範囲CIDRブロックを定義します。
AWS クライアントVPNエンドポイントの設定
「VPC」の画面より「クライアントVPNエンドポイント」-「クライアントVPNエンドポイントの作成」をクリックします。
「クライアントVPNエンドポイントの作成」の画面が開きます。下記のように設定します。
パラメーター | 値 |
---|---|
名前タグ | 任意の名前 |
説明 | 任意 |
クライアント IPv4 CIDR | VPNクライアント接続時に端末へ割り当たるIPアドレスを設定 /22以上 |
サーバー証明書ARN | 先ほどACMで発行したSSLサーバー証明書(検索で表示される) |
認証オプション | ユーザーベースの認証を使用 - 統合認証 |
SAMLプロバイダーARN | 先ほどIAMで設定したIDプロバイダ(検索で表示される) |
スプリットトンネルを有効にする | オン |
VPC ID | クライアントVPNで接続するVPC |
セキュリティグループID | 先ほど設定したセキュリティグループを選択 |
他はデフォルトのままとしましたが、環境によってDNSサーバー等も設定します。
ひとつ前の画面に戻ります。まだ「状態:保留中」となっています。 登録したクライアントVPNエンドポイントを選択します。「関連付け」タブより「関連付け」をクリックします。
「ターゲットネットワークへのクライアントVPNの関連付けの作成」の画面が開きます。クライアントVPNで接続するVPC・サブネットを設定します。複数登録もできます。
「認証」タブより「受信の承認」をクリックします。
「認証ルールの追加」の画面が開きます。「アクセスを有効にする送信先ネット」のIPアドレスCIDRブロックを設定します。 本BLOGの検証では「アクセスを許可する対象:すべてのユーザーにアクセスを許可する」としました。VPN認証に利用するユーザーID毎に接続先IPアドレスを制限する場合、この設定でカスタマイズすることになります。
しばらく待つと「状態:使用可能」となります。「クライアント設定のダウンロード」をクリックします。 クライアントVPN接続するための設定情報ファイル .ovpn をダウンロードします。このファイルはクライアント端末へ配布して利用します。
これで AWS側 の準備は完了です。クライアント端末からVPN接続が行えるか確認します。
動作確認 - クライアント端末からのVPN接続
クライアント端末へ専用VPNソフトウェア AWS VPN Client をインストールします。AWSサイトより対応OS毎インストーラーを入手してインストールします。 AWS Client VPN Download | Amazon Web Services
本BLOGの検証では Windows 10 端末を利用しています。インストールが終わりましたら、ソフトウェアを起動します。 メニューより「ファイル」-「プロファイルを管理」をクリックします。
「プロファイルを管理」の画面が開きます。「プロファイルを追加」をクリックします。先ほどAWSマネージメントコンソールよりダウンロードした .ovpn ファイルを取り込みます。これでVPN接続の準備完了です。
AWS VPN Client を起動し、一覧より登録したプロファイルを選択し「接続」をクリックします。
AzureAD で認証する設定のため、ブラウザが起動し Microsoft のサインイン画面となります。 AzureAD のユーザーID・パスワードを入力してサインインします。
サインイン成功後にブラウザ画面が「。。。いつでも閉じることができます」となりましたらクローズします。
「接続済み」の表示になれば、AWS Client VPN の接続は成功です。クライアント端末から AWS VPC 上のリソースに接続できるか確認します。
Windows端末より ipconfig を打つと、先ほどクライアントVPNエンドポイントで設定した「クライアント IPv4 CIDR」のIPアドレスが割り振られていることがわかります。
テストとしてVPC上で起動するEC2へ ping を発行します。無事応答が返ってきました。
スプリットトンネルを設定したので、route print の結果では VPC の CIDR のみ仮想イーサーネットへルーティングが向けられていることがわかります。
動作確認 - SSO
先日のBLOGで紹介したハイブリッド AzureAD 参加している Amazon WorkSpaces で、同様に AWS Client VPN の接続を行ってみると、Azure AD のユーザーID・パスワード入力不要で、接続完了することが確認できます。SSO が正常動作していることがわかります。
まとめ
AWS Client VPN は専用のVPNルーターが設置できない環境でも、AWS上の VPC とセキュアに接続できるサービスのため、ご活用いただけるシーンは多いと思います。ただし、ユーザーID・パスワードが漏洩すると、意図しない第3者が接続するリスクがあります。AzureAD や他多くのIDフェデレーションサービス(IDaaS)では、多要素認証をサポートしているので、合わせて検討が必要です。
利用者の利便性を向上しつつも、ID管理が1つに集約される IDaaS を用いたSSOは、システム管理者の方の負担減にもなる等 メリットが多いです。AWS Client VPN をご検討される場合は、合わせてSSOもご検討いただけると良いと思います。