[アップデート]AWS ClientVPNがSAMLに対応したので試してみた

ClientVPNの認証方式にSAMLが新しく追加されたので早速試してみました。IdPはOktaです。
2020.05.22

こんにちは、コンサル部の島川です。

ClientVPNのユーザー認証がSAMLでできるようになりました!既に東京リージョンでも使うことができます。

  • クライアント証明書による相互認証
  • Active Directory によるユーザー認証
  • SAML によるユーザーフェデレーション認証 <--- New!!

サービスプロバイダーとしてIAMのIDプロバイダーを使います。そこでIdPを指定し、そのIdP経由で認証を行います。

参考:Authentication workflow

今回はIdPをAWSの公式ブログでも紹介されていた「Okta」を使って実際の動きを確かめてみたいと思います。

動作環境について

今回はAWSから提供されているAWS Client VPNクライアントを使用します。バージョンが1.2.0以上である必要があるので、更新してない場合はこちらからダウンロードして更新しましょう。(1.2.0は2020/5/19リリース)

また認証における注意事項がこちらに記載されているので先に読んでおくと良いかもしれません。

Single sign-on (SAML 2.0-based federated authentication)

やってみた

今回参考にしたAWS公式ブログはこちらです。

前提条件

  • テスト用のVPC及びEC2は作成済みであること
  • ACMにプライベート証明書にアップロードされていること
    • 用意していない場合はこちら参考に作成して、ACMにアップロードしてください。
  • Oktaのアカウントは作成済みであること
    • trial版でOKです。

やること一覧

1.Oktaの設定
2.IAM IDプロバイダーの設定
3.Client VPNのエンドポイントを作成
4.接続確認

また確認したいこととしては

  • SAML認証された状態でEC2にpingができること
  • アクセス先をユーザーで制限ができること(ユーザーグループによって接続先を制限できるため)

になります。

Oktaの設定

Oktaの設定をしていきます。管理者画面からApplication -> Add Applicationを選択します。 検索画面で「ClientVPN」と検索して「AWS ClientVPN」を選択します。 そのまま追加していきます。

続いて、OktaがSAMLグループ情報を送れるようにする設定をしていきます。Sign On -> Edit -> memberOfを「Matches regix .*」に変更します。

そのまま少し下に行って、Portを「35001」を選択してSaveします。

IdPのメタデータも保存しておきます。後ほどIAMのIDプロバイダーの設定で使用します。

ユーザーを追加する

ユーザー制限できることを確認するためにここでユーザーを追加しておきます。

実際にはグループ名を指定して制限することができるので、グループの追加をします。私は「dev」を追加しました。

次にユーザーを作成します。グループを指定することができるので先に作成したグループを指定しておきましょう。

IAM IDプロバイダーの設定

マネジメントコンソールを開いて、IAMのIDプロバイダーを選択します。 タイプは「SAML」、名前は適当、メタデータは先ほどダウンロードしたものを指定して、作成します。

Client VPNのエンドポイントを作成

  • 「名前タグ」 任意
  • 「クライアント IPv4 CIDR」 任意
    • クライアントに割り当てられるIPアドレスです。割り当てるサブネットと被らない範囲で/22以上のものを指定してください。
  • 「サーバー証明書 ARN」ACMにアップロードしているサーバ用の証明書を指定
  • 「認証オプション」ユーザーベースの認証を使用、統合認証を選択
  • 「SAML プロバイダー ARN」IDプロバイダーで設定したものを指定 他の項目はデフォルトで作成します。

接続するサブネットを追加します。

ユーザー制限を確認したいので、認証の設定をします。Oktaで作成したdevグループを指定します。これで宛先「10.0.0.0/8」は「devグループに所属しているユーザーのみ」が接続できるようになります。

クライアント設定もダウンロードしておきましょう。ClientVPNクライアントで読み込ませます。

接続確認

ClientVPNクライアントを起動して、ダウンロードしたクライアント設定ファイルを読み込ませます。接続をすると、ブラウザでOktaの認証画面が開かれます。devグループに所属しているユーザーでログインします。

これが表示されれば接続OKです。ブラウザも閉じてOKです。

起動しているEC2にpingしてみます。

できました!

次にdevグループ以外のユーザーでログインして、サーバにアクセスできないことを確認します。

さいごに

ClientVPNでユーザー認証実施したいけどADサーバ用意するのは...というケースも多かったかと思います。SaaSのIdPを通すことでお手軽にユーザー認証ができるようになりました。Oktaは正式にClientVPN用の設定を用意しているので今すぐにでも始めることができます。

参考URL

Authenticate AWS Client VPN users with SAML

クライアント認証と認可