はじめに
_s__o_ です。
2020 年 5 月 19 日付けで AWS Client VPN が SAML 認証に対応しました。
[参考] AWS Client VPN で SAML 2.0 経由のフェデレーション認証のサポートを開始
Client VPN の ID 認証は、これまでは AWS Directory Service の利用が必須でした。ID 認証のためだけに AWS Directory Service を立て、さらには ID 管理のためだけに AWS EC2 で Windows を立て……など、あまり費用対効果が良いとは言いがたいものでした (ちなみに、MFA を有効にする場合は、AWS Directory Service に加えて Radius サーバも別途必要。。。)。
そのため、この機能追加は、非常に嬉しいものです。パスワード管理が IdP 依存になるので、IdP でポリシーや更新 UI を用意しておけば、システムとは完全に独立した形でパスワードを管理することができるようになります。また、IdP が MFA に対応していれば、よりセキュアな仕組みでシステムを構築することができます。
というわけで、2020/07/06 現在、AWS Client VPN が公式で対応している「Okta」を使って、AWS Client VPN の SAML 認証を試してみたいと思います。
なお、この記事は Okta や SAML 設定の部分に重きをおいており、Client VPN 設定に関しては最低限のことしか記載していません。Client VPN も含んだ設定に関しては、後述の「参考」に記載のサイトが詳しいので、そちらを参照してください。
Okta 作業
Okta 初期登録
30 日間は無料で試用できるので、下記サイトを参考にしながら登録しました。
[参考] Okta を試してみた
特につまづいた部分はありませんでしたが、下記は留意しておく必要があります。
- Gmail (gmail.com) など、自組織を特定できないメールアドレスでは初期登録 (管理者登録) 不可。プロバイダから付与されたメールアドレスなどで初期登録する必要あり
- 2020/07/06 時点、初期登録 (管理者登録) の際は MFA 必須。事前に Okta の MFA 用ツール をダウンロードしておくとよい
- 管理者画面はすべて英語。エンドユーザ画面は日本語対応
Okta エンドユーザ登録
エンドユーザを登録します。「Directory」 > 「People」 > 「Add Person」でサクッと登録できます。なお、エンドユーザに関しては、Gmail などのメールアドレスでも登録可能です。
Okta アプリ登録
アプリとして「AWS Client VPN」を登録します。「Applications」を選択して、検索欄に「AWS」と入力すれば、候補に「AWS Client VPN」が出てきます。「AWS Client VPN」を選択したら、特に設定などはいじらず、そのまま「Done」を押して登録です。
Okta アプリアサイン
「AWS Client VPN」を、先ほど作成したエンドユーザにアサインします。「Applications」 > 「AWS Client VPN」 > 「Assignments」でアサイン可能です。
Okta SAML 設定
AWS Client VPN 用の SAML 設定を行います。「Applications」 > 「AWS Client VPN」 > 「SSO」を選択して、「Edit」ボタンを押下します。設定画面に移行するので、下記 2 点を設定します。
- memberOf を「Matches .*」で設定する。Okta のグループ情報を Client VPN に連携するため
- Port を「35001」に設定する。AWS Client VPN から SAML 認証する際に使用するポート
設定が完了したら、AWS の IdP 登録で使用するため、メタデータの XML をダウンロードしておきます。下図赤枠部分を右クリックして、「名前を付けてリンク先を保存」で保存できます。
AWS 作業
IdP 登録
IAM から登録します。「IAM」 > 「ID プロバイダー」 > 「プロバイダの作成」で作成します。メタデータドキュメントでは、先ほどダウンロードしたメタデータを指定します。
Client VPN Endpoint 作成
ポイントのみ解説します。認証オプションで「ユーザーベースの認証を使用」を選択します。おそらく、前までは「Active Directory 認証」のみだけだったと思いますが、ここに「統合認証」の選択が増えているはずです。こちらを選択し、下部の「SAML プロバイダー ARN」で、先ほど作成した IdP の ARN を指定します。
エンドポイント作成後、「関連付け」や「認証」で、接続先サブネットや接続許可 CIDR を指定します。詳しい手順に関しては、後述の「参考」のサイトを参照してください。
接続試行
エンドポイントの ovpn ファイル (プロファイル) をダウンロードし、AWS 公式の「AWS VPN Client」にインポートします。
ちなみに、私が試した範囲では、VPN クライアントから認証がフェデレートする (Okta の認証画面が表示される) のは、AWS 公式の「AWS VPN Client」だけでした。残念ながら、OpenVPN クライアント (使用したのは OpenVPN Connect) では、VPN クライアントから認証がフェデレートせず、認証失敗として接続不可でした。
話を戻して、プロファイルを「AWS VPN Client」にインポートしたら、「接続」を押して接続開始します。「ID 連携中...」と画面に表示された後、ブラウザで Okta の画面が立ち上がります。
ここで Okta のエンドユーザ ID/Password を入力し、「サインイン」ボタンを押下します。ID/Password が正しければしばらく待ったのち、「接続完了」と表示され、はれて AWS Client VPN に接続できるようになります。
まとめ
以上、AWS Client VPN の SAML 認証を Okta で試してみた、でした。
2020/07/06 現在、公式でサポート (公式に手順が記載) [参考] されている IdP は「Okta」ぐらいのようですが、「AWS SSO」で試して成功したような記事もあるようです。
[参考] AWS Client VPNでSAML認証がサポートされたのでAWS SSOで認証してみた
まだ出始めの機能なので、公式対応の IdP もこれからドンドン増えていくと思います。期待大です。
あと、個人的には、何とかして OpenVPN クライアントからも SAML 認証を利用したいなあと思っています。というのも、AWS 公式の「AWS VPN Client」は、2020/07/06 現在、proxy 接続に非対応のため、proxy を挟むような企業 NW 環境では、OpenVPN クライアント一択となってしまうからです。。。
いずれにせよ、SAML 認証をサポートしたことで、ちょっと煩雑だった Client VPN の ID 認証まわりがスッキリし始めているのは確かです。サポート状況をウォッチしていきつつ、その他のいろんな IdP も試していきたいと思います。
参考
[参考] 多要素認証の実装が簡単になるぞ!AWS Client VPN で SAML ベースのフェデレーション認証がサポートされました