IAM Identity CenterでAWS Client VPNのSAML認証を構成する

目次

はじめに

個別のユーザーがセキュアにAWSVPC環境にインターネット越しに接続するには複数の方法があり、Systems Manager Session ManagerやEC2 Instance Connectなどが挙げられます。 AWSに限らず、近年はゼロトラストソリューションやAzure AD Application Proxy、Google Cloud IAP等のサービスも普及し、インターネット越しでのクラウド環境へのアクセスも選択肢が増えましたが、AWSで例えばVPC環境のAuroraやRedshiftにクライアントPCから直接接続したい場合、依然としてAWS Client VPNは有用かと思います。

AWS Client VPNでの接続には、証明書ベースの認証やADと連携したユーザーベースのパスワード認証方法が用意されていますが、証明書を各ユーザーに配布したり、ADがない環境でADを用意するのは労力がかかります。そうした時にSAMLベースのシングルサインオン(SSO)環境を構成していると、ADよりWebフレンドリーな方法でユーザーベースの認証をスムーズに行うことができます。

AWS Client VPNでSSOを構成する内容については、世の中で設定方法を紹介した記事がいくつかあるため、本記事では、そこから一歩踏み込んで参考情報が出てこない注意事項についてご紹介します。

Client VPN構成

AWS Client VPNでSSO認証を構成する

AWS Client VPNでSSO認証を構成する方法については軽くご説明することに留めますが、ここでは、AWS IAM Identity Center(Identity Center Directory)をID Provider(IdP)とし、AWS Client VPNをService Provider(SP)とする構成とします。

IAM Identity CenterでSSOしたいClient VPNのアプリケーションを作成する

アプリケーションの編集

  1. IAM Identity Centerの管理画面からアプリケーションを作成し、「カスタム SAML 2.0 アプリケーションの追加」を選択します。
  2. 表示名等、適切な設定値を入力し、IAM Identity Center メタデータファイルをダウンロードします。

    アプリケーションを設定

  3. アプリケーションのプロパティは開始URL, リレー状態共に空欄のままで、セッション時間はデフォルトが1時間ですが、1時間だとローカル環境から大きなデータのバルクロードなどをするとロード中に通信が切れてしまって不便があったりするため、少し長めに設定するのも良いです。

  4. アプリケーションメタデータには、「メタデータ値をマニュアルで入力する」を選択して、「アプリケーションACS URL」には「http://127.0.0.1:35001」、「アプリケーション SAML 対象者」には「urn:amazon:webservices:clientvpn」を入力します。
    アプリケーションメタデータ

IAM Identity CenterとAWSアカウントでSSO構成を準備する

IAM Identity CenterでのSSOを構成するためには、IdPとAWS間で信頼関係を結ぶために、AWSアカウントのIAMサービスでIDプロバイダを作成する必要があります。

  1. Client VPNを構成したいAWSアカウントのIAMでIDプロバイダを作成し、プロバイダのタイプはSAMLとしてIAM Identity CenterでClient VPNのアプリケーションを作成した際にダウンロードしたメタデータファイルをアップロードします。
    IDプロバイダを追加

AWS Client VPNのクライアントVPNエンドポイントを作成する

  1. クライアントVPNエンドポイントを作成する際に、認証情報の項目の「認証オプション」で「ユーザーベースの認証を使用」を選択します。その上で、「ユーザーベースの認証オプション」で「フェデレーション認証」を選択します。
  2. SAML プロバイダー ARN」では、先に作成したIDプロバイダをドロップダウンから選択します。
  3. 「セルフサービス SAML プロバイダー ARN」については、後述します。
  4. その他の設定値は、適切な設計を行い構成します。
    クライアントVPNエンドポイント

AWS Client VPNでSSO認証を構成する際の考慮点は、公式ドキュメントに詳細に記述があるため、こちらも参照ください。
シングルサインオン (SAML 2.0 ベースのフェデレーション認証) - AWS クライアント VPN

SSOで認証し、Client VPNで接続する

  1. 作成したクライアントVPNエンドポイントを選択した状態で、「クライアント設定をダウンロード」をクリックし、クライアント VPN エンドポイント設定ファイル(.ovpn)をダウンロードします。
  2. AWS Client VPNクライアントアプリケーションをPCにインストールし、プロファイルの追加でダウンロードした設定ファイルを取り込みます。
  3. 取り込まれた設定をドロップダウンから選択し、接続をクリックすると、ブラウザが開いてIAM Identity Centerのログイン画面が出ます。ログインが完了すると「認証の詳細を受信、詳細を処理中です。このウィンドウをいつでも閉じることができます。」とブラウザで表示され、VPN接続が確立されます。
    AWS VPN Client
    SSOポータルログイン画面
    Client VPN認証

AWS Client VPNでSSO認証を構成する際の留意事項

ここからが本記事で特筆したい点になりますが、IAM Identity CenterでAWS Client VPNのSSOを構成した場合に、留意すべき事項がいくつかあります。

Client VPNエンドポイント作成後のセルフサービス SAML プロバイダー ARNの入力が出来ない

Client VPNセルフサービスポータルを有効化すると、先ほど手動でダウンロードした.ovpnファイルやAWS Client VPNクライアントアプリケーションのインストーラーの入手を一つのウェブページから行うことが出来るようになり、利用者へのサービス展開が容易になります。
セルフサービスポータルにアクセスする - AWS クライアント VPN

便利な機能のため有効化したいところですが、一度Client VPNエンドポイントを作成してしまうと、マネージメントコンソールでエンドポイントの編集を行っても、「セルフサービス SAML プロバイダー ARN」の入力欄がないため、セルフサービスポータルを有効化するための設定値を後から変更できず、エンドポイントの再作成を行う必要があるため注意が必要です。

IAM Identity Centerは複数のACS URLに対応していない

「セルフサービス SAML プロバイダー ARN」とは、セルフサービスポータルを有効化するために指定が必要なIDプロバイダですが、IdPが複数のACS URLに対応していない場合は、構成編で指定したIDプロバイダとは別のIDプロバイダを作成する必要があり、更に、IDプロバイダに対応するIAM Identity Centerのアプリケーションをもう一つ作成する必要があります。
惜しいことに、IAM Identity Centerは一つのアプリケーションで複数のACS URLに対応していないため、セルフサービスポータルを有効化するため専用のSSOアプリケーションを作成して、「アプリケーションACS URL」に「https://self-service.clientvpn.amazonaws.com/api/auth/sso/saml」を入力し、このアプリケーションに対応するIDプロバイダをメタデータのアップロードなどをしつつ作成する必要があります。

複数ACS URL非対応

SSOポータルのアイコンを任意に隠すことはできない

IAM Identity Centerでアプリケーションを作成すると、SSOポータルにユーザーに割り振られているアプリケーションのアイコンが並びますが、Client VPN用のアプリケーションやセルフサービスポータル用のアプリケーションのアイコンをクリックしても、ACS URLはシステムとしての認証結果がSPに返る際に使用されるもののため、ユーザーにとって意味のあるページは表示されません。
アイコンをクリックしたらセルフサービスポータルが開くとか、Client VPNアプリケーションが立ち上がるといったIdP initiated SSO(IdP側からSSOでアプリケーションを利用するフロー)が出来るのであれば、アイコンの意味がありますが、利用者にとって特別な意味を持たないアイコンを任意で非表示にするような機能はIAM Identity Centerにはないため、ポータル画面が少し乱雑になります。

SSOポータルのアプリケーションアイコン

Client VPNアプリケーションの証明書更新には4-8時間かかる

IAM Identity CenterのSSOアプリケーションを作成し、IDプロバイダ作成時にメタデータをアップロードしましたが、このメタデータの中にはSAMLで使用されるURLやIdPとSPの間で接続の真正性を確認するためのSSL証明書が含まれています。
このSSL証明書の有効期間は、新規にアプリケーションを作成したときは5年になっており、有効期限が切れる前後で新しい証明書を発行してローテーションし、新しい証明書を含んだメタデータを再度IDプロバイダにアップロードしてから、IAM Identity Centerで新しい証明書をアクティブにする必要があります。

アプリケーションの証明書管理

この作業を行わないとIdPとSPの間で信頼関係が正常に確認されなくなるため、Client VPNのSSO認証が失敗するようになりますが、AWSの仕様で、Client VPNに利用するIDプロバイダに新しいメタデータをアップロード(証明書更新)してから4-8時間を待たないと新しい証明書に切り替わりません。内部的にキャッシュを持っているような動作ですが、公式ドキュメントに記載はなく、この仕様はAWSサポートに確認しました。
つまり、うっかりSSL証明書の有効期限が切れてから更新作業を行っても、4-8時間はClient VPNの認証が出来ない状態になるため、注意が必要です。(なお、この仕様はClient VPNに特有のもので、その他のSSOアプリケーションでは問題は起こりませんでした。)

まとめ

本記事では、AWS IAM Identity CenterとAWS Client VPNでSSOを構成して、ユーザーベースのフェデレーション認証を行う方法の概要と、その構成の際に留意しないといけない事項について説明しました。
特に、留意事項についてはまとまった形で参考情報が出てこないものになりますので、同様の疑問をお持ちの方のお役に立てば幸いです。