AWS Client VPNをOktaのSAML認証を使ってアクセスしてみた

AWS Client VPNをOktaのSAML認証を使ってアクセスしてみた

Clock Icon2025.07.14

今回は、AWS Client VPNとOktaをSAML認証でVPNアクセス環境を構築する方法についてご紹介します。
「VPN接続にセキュリティを強化したいけど、どんな方法があるんだろう?」「既存のOkta環境を活用してAWS Client VPNを設定できないかな?」とお考えの方もいらっしゃるのではないでしょうか。
SAML認証によりIdP経由での多要素認証(MFA)を伴うセキュアな認証や効率的な運用管理が実現できます。

本記事では、AWS Client VPNとOktaのSAML認証を組み合わせることで、「セキュアで管理しやすいVPN環境」 の実現を目指します。
では、早速やってみます。

AWS Client VPNとは

AWS Client VPNは、クラウドベースのリモートアクセスVPNサービスです。
これにより、ユーザーはどこからでもAWSのリソースやオンプレミスネットワークに安全にアクセスできます。
スケーラブルで高可用性なサービスであり、既存のAWS環境に容易に統合できるのが特徴です。

AWS Client VPNの認証方式

AWS Client VPNでは、主に以下の3つの認証方式をサポートしています。

  • Active Directory認証: AWS Directory Serviceを利用して、既存のActive Directoryと連携します。
  • 相互認証(クライアント証明書認証): クライアント証明書を使用して認証を行います。高いセキュリティが確保できますが、証明書の管理が必要になります。
  • Federated Authentication(フェデレーション認証): OktaなどのSAML 2.0またはOpenID Connect(OIDC)互換のIdPと連携し、IdPの認証機能を利用します。

今回は、この「Federated Authentication」に焦点を当て、特にOktaのSAML認証を用いた方法を深掘りしていきます。

Oktaとは

Oktaは、クラウドベースのID管理およびアクセス管理(IAM)サービスです。シングルサインオン(SSO)、多要素認証(MFA)、プロビジョニングなどの機能を提供し、企業がユーザーのアプリケーションやデータへのアクセスを安全に管理できるようにします。

OktaとSAML認証

SAML (Security Assertion Markup Language) は、異なるセキュリティドメイン間で認証および認可データを交換するためのXMLベースの標準です。OktaはSAMLをサポートしており、サービスプロバイダ(SP)であるAWS Client VPNが、IDプロバイダ(IdP)であるOktaに認証を委譲することを可能にします。これにより、ユーザーはOktaで一度認証すれば、AWS Client VPNを含む複数のサービスにアクセスできるようになります。

構成の全体像

今回の構成は以下のようになります。

vscode-paste-1752477982732-q3axc6cp509.png

  1. VPNクライアントはAWS Client VPNエンドポイントに接続要求を行います。
  2. AWS Client VPNエンドポイントは、認証要求をOktaにリダイレクトします。
  3. Oktaでユーザーは認証(必要に応じてMFA)を行います。
  4. OktaからのSAMLアサーションに基づいて、AWS Client VPNエンドポイントがアクセスを許可します。
  5. 認証に成功すると、VPNクライアントはVPC内のリソースや、Direct Connect/VPN経由で接続されたオンプレミスリソースにアクセスできるようになります。

AWS Client VPNとOkta SAML認証の設定手順

ここからは、実際にAWS Client VPNとOktaを連携させるための具体的な設定手順を解説していきます。

前提条件

  • Client VPNエンドポイントの作成に必要なVPC、サブネットが準備されていること
  • アクセスのテストに利用するEC2インスタンスの起動
  • Amazon Route 53 でドメインを取得していること
  • VPNクライアントソフトウェア(AWS VPN Clientなど)がインストールされていること

1. Oktaアプリケーションの作成

まず、Okta側でSAMLアプリケーションを作成し、AWS Client VPNからの認証リクエストを受け付ける準備をします。

  1. Oktaの管理画面にログインします。

  2. 「Applications」>「Applications」>「Browse App Catalog」を選択します。

vscode-paste-1752459573753-p4htaccc53.jpeg

vscode-paste-1752459578934-hguksbn83q8.jpeg

  1. 「AWS」などで検索して、AWS ClientVPN」を選択し、「Add Integration」をクリックします。

vscode-paste-1752459646400-jkvv9sjpau.jpeg

vscode-paste-1752459651262-yt8fickfrmh.jpeg

  1. 「App name」に任意の名前(例: AWS Client VPN SAML)を入力し、「Done」をクリックします。

vscode-paste-1752459730482-bxenmlxbbop.jpeg

  1. 「Assignments」でグループまたは人を割り当てます。

  2. 「Sign on」のタブで「Metadata URL」をコピーして、ブラウザで表示します。

vscode-paste-1752461584572-51vfvib1sff.png

vscode-paste-1752461738508-iiriu0fa3zi.jpeg

  1. XMLを任意の名前(例: oktametadata.xml)などで保存します。※この後のIDプロバイダの設定で使用します

2. IAMにSAMLプロバイダの作成

AWS Client VPNがOktaとSAML認証を行うためには、OktaのメタデータXMLをIAMにSAMLプロバイダとして登録する必要があります。

  1. AWSマネジメントコンソールにログインし、IAMサービスに移動します。
  2. 左側のナビゲーションペインから「ID プロバイダ」を選択し、「プロバイダを追加」をクリックします。

vscode-paste-1752460145753-hrj29kglepa.jpeg

vscode-paste-1752460151205-73qa6t0u7cl.jpeg

  1. 「プロバイダのタイプ」で「SAML」を選択します。
  2. 「プロバイダ名」に任意の名前(例: OktaSAMLProvider)を入力します。
  3. 「メタデータドキュメント」に、OktaでダウンロードしたSAMLメタデータXMLファイル(例: oktametadata.xml)をアップロードします。
  4. 「プロバイダを追加」をクリックします。

vscode-paste-1752461982801-0u7ct3opimf.png

  1. 作成されたSAMLプロバイダのARNを控えておきます。これをAWS Client VPNエンドポイント作成時に「SAML プロバイダー ARN」として指定します。

3. ACM (AWS Certificate Manager) でサーバー証明書を発行

AWS ClientVPN ではサーバー証明書が必須です。
このサーバー証明書により、クライアントが接続しようとしているAWS ClientVPN エンドポイントが正規のものであることを証明する役割を果たし、VPNクライアントとエンドポイント間の通信を暗号化します。
AWS Client VPNでは、このサーバー証明書をAWS Certificate Manager (ACM) で発行し、利用することを推奨しています。
ACMを利用することで、証明書の取得、デプロイ、および更新プロセスが簡素化され、運用の手間が大幅に削減されます。
特に、Route 53で管理されているドメインを使用する場合、DNS検証を利用することで、証明書の発行から更新までをほぼ自動化できます。

今回は、事前に Amazon Route 53 で〇〇のドメインを取得済みであることを前提とし、ACM (AWS Certificate Manager) での証明書発行していきます。

  1. ACMサービスに移動し、「証明書をリクエスト」をクリックします。

  2. 「パブリック証明書のリクエスト」を選択し、「次へ」をクリックします。

  3. 「ドメイン名」に取得済みのドメインを入力します。(例: clientvpn.example.com)

  4. 「検証方法」で「DNS検証」を選択します。Route 53で管理されているドメインを使用する場合、この方法が最も簡単です。

  5. 「キーアルゴリズム」はデフォルトの「RSA 2048」で問題ありません。

  6. 「リクエスト」をクリックします。

vscode-paste-1752475351157-bv3wz64k8aa.jpeg

  1. 証明書を表示すると、「保留中の検証」と表示されるので、「Route 53 でレコードを作成」をクリックするとRoute 53でCNAMEレコードが作成できます。

vscode-paste-1752475392837-wzvko55l4xm.png

  1. Route 53でのCNAMEレコード追加後、ACMに戻り、証明書の状態が「発行済み」になるまで待ちます。これには数分かかる場合があります。

  2. 証明書が発行されたら、そのARN(Amazon Resource Name)を控えておきます。このARNをClient VPNエンドポイント作成時の「Server certificate ARN」に指定します。

4. セキュリティグループ作成(AWS Client VPNエンドポイント用)

Client VPNエンドポイントに設定するセキュリティグループを用意します。

  1. AWSマネジメントコンソールにログインし、EC2サービスに移動します。

  2. 左側のナビゲーションペインから「セキュリティグループ」をクリックして以下のセキュリティグループを作成しておきます。

インバウンドルール

なし

アウトバウンドルール

# タイプ プロトコル ポート範囲 ソース
1 全てのトラフィック すべて すべて 0.0.0.0/0

5. AWS Client VPNエンドポイントの作成

次に、AWS側でClient VPNエンドポイントを作成します。

  1. AWSマネジメントコンソールにログインし、VPCサービスに移動します。

  2. 左側のナビゲーションペインから「クライアント VPN エンドポイント」を選択し、「クライアント VPN エンドポイントを作成」をクリックします。

  3. 以下の設定を行います。

    • 名前タグ: 任意の名前(例: my-clientvpn-endpoint
    • クライアント IPv4 CIDR: VPN接続時にクライアントに割り当てるIPアドレス範囲(例: 10.0.0.0/22)。既存のVPC CIDRおよびデバイスで利用中のIPアドレス(自宅のWifiで利用されるIPなど)と重複しないように注意してください。また、CIDRプレフィックスは/22より大きい必要があります。
    • サーバー証明書 ARN: VPNエンドポイントで使用するサーバー証明書のARNを指定します。ACMで事前に作成したARNを指定します。
    • 認証オプション: 「ユーザーベースの認証を使用」、「フェデレーション認証」を選択し、以下の情報を入力します。
      • SAML プロバイダー ARN: IAMで作成したSAMLプロバイダのARN
    • DNS サーバー 1 IP アドレス: 今回はブランクでいきます
    • スプリットトンネルを有効化: 必要に応じて有効/無効を設定します。有効にすると、VPNトラフィックのみVPN経由でルーティングされ、インターネットトラフィックは直接ルーティングされます。
    • VPC ID: 接続先のVPCを選択します。
    • Security group IDs: VPNクライアントに適用するセキュリティグループを選択します。

vscode-paste-1752465699610-4fd17laam6w.png

  1. 「クライアント VPN エンドポイントを作成」をクリックしてエンドポイントを作成します。

6. Client VPNエンドポイントとターゲットネットワークの関連付け

作成したClient VPNエンドポイントを、VPC内のサブネットに関連付けます。これにより、VPNクライアントは指定されたサブネット内のリソースにアクセスできるようになります。

  1. Client VPNエンドポイントの詳細画面で、「ターゲットネットワークの関連付け」タブを選択し、「ターゲットネットワークを関連付ける」をクリックします。

vscode-paste-1752230023754-fdofwv9uih7.png

  1. 「VPC」と「パブリックに所属する Subnet ID」を選択し、「ターゲットネットワークを関連付ける」をクリックします。複数のサブネットに関連付けることも可能です。

vscode-paste-1752230040133-1byl11x9z89.jpeg

※関連付けるサブネットは最低でも/27プレフィックス確保する必要があります。

7. 承認ルールの追加

VPNクライアントがアクセスできるネットワークやポートを制限するために、承認ルールを設定します。

  1. Client VPNエンドポイントの詳細画面で、「承認ルール」タブを選択し、「承認ルールを追加」をクリックします。

vscode-paste-1752230764991-fema67e6art.png

  1. 「アクセスを有効にする送信先ネットワーク」に、VPNクライアントがアクセスを許可されるIPアドレス範囲を指定します(例: 0.0.0.0/0 で全てのトラフィックを許可、または特定のVPC CIDR)。
  2. アクセス権を特定のユーザー(Oktaで特定のグループに属するユーザー)のみにアクセスを許可したい場合に指定します。今回は指定なしで進めます。
  3. 「承認ルールを追加」をクリックします。

vscode-paste-1752230776138-im5avzcwfjf.jpeg

8. クライアント設定ファイルのダウンロードと設定

最後に、VPNクライアントが接続するための設定ファイルをダウンロードし、必要な情報を追加します。

  1. Client VPNエンドポイントの詳細画面で、「クライアント設定をダウンロード」をクリックします。

vscode-paste-1752231034554-y03k8p9dybj.png

  1. ダウンロードした.ovpnファイルをテキストエディタで開きます。

  2. ファイルの一番最後に、以下の行を追加します。

    auth-federate
    reneg-sec 0
    
    • auth-federate: フェデレーション認証を有効にするための設定です。
    • reneg-sec 0: OpenVPNのセッション再ネゴシエーションを無効にします。これはSAML認証との互換性のために必要です。
  3. ファイルを保存します。

9. EC2インスタンスのセキュリティグループ設定

今回EC2インスタンスはプライベートサブネット内に構築している前提としていますが、EC2インスタンスに紐づけるセキュリティグループは以下になっています。
ICMPで疎通テストすることを想定しています。

インバウンドルール

# タイプ プロトコル ポート範囲 ソース
1 全てのICMP - IPv4 ICMP すべて クライアントVPNエンドポイントのセキュリティグループ

アウトバウンドルール

# タイプ プロトコル ポート範囲 ソース
1 全てのトラフィック すべて すべて 0.0.0.0/0

VPNクライアントからの接続

準備が整ったので、VPNクライアントから接続を試してみましょう。

  1. AWS VPN Clientアプリケーションを起動します。
  2. 「File」>「Manage Profiles」を選択し、「Add Profile」をクリックします。
  3. 「Client VPN endpoint configuration file」で、先ほどダウンロードして編集した.ovpnファイルを選択します。
  4. プロファイル名を入力し、「Add Profile」をクリックします。

vscode-paste-1752476234515-7fmh9mic1d3.jpeg

  1. 追加したプロファイルを選択し、「Connect」をクリックします。
  2. ブラウザが起動し、Oktaのログイン画面にリダイレクトされます。Oktaのユーザー名とパスワードを入力し、必要に応じてMFAを完了します。

vscode-paste-1752476314362-kqgj9np9mmd.jpeg

  1. 認証が成功すると、ブラウザが閉じられ、AWS VPN Clientが「Connected」と表示されます。

最後にPingを打ってみます。
EC2のIPアドレスは 10.0.0.190 です。

% ping 10.0.0.190
PING 10.0.0.190 (10.0.0.190): 56 data bytes
64 bytes from 10.0.0.190: icmp_seq=0 ttl=126 time=108.631 ms
64 bytes from 10.0.0.190: icmp_seq=1 ttl=126 time=40.906 ms
64 bytes from 10.0.0.190: icmp_seq=2 ttl=126 time=19.207 ms
64 bytes from 10.0.0.190: icmp_seq=3 ttl=126 time=38.976 ms
64 bytes from 10.0.0.190: icmp_seq=4 ttl=126 time=37.495 ms
64 bytes from 10.0.0.190: icmp_seq=5 ttl=126 time=20.128 ms
64 bytes from 10.0.0.190: icmp_seq=6 ttl=126 time=18.820 ms

無事にVPN経由でPingが到達しました。

その他

接続に失敗した場合、AWS Client VPNのログ(CloudWatch Logsで確認可能)や、VPNクライアントのログを詳細に確認することが重要です。特にOktaとの連携エラーであれば、認証関連のメッセージが出力されているはずなので、うまくいかない場合は確認してみるのが良いです。

まとめ

今回は、AWS ClientVPNとOktaのSAML認証を連携をやってみました。
私自身の、AWS ClientVPNの設定は初めてやってみたので、連携するサービスや、接続パターンを整理することができてよかったです。

AWS Client VPNをOktaのSAML認証をやってみたいときなどに、参考にしていただけると幸いです。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.