【AWS】AWS Client VPN メモ　～OktaでSAML認証＋セルフサービスポータル機能使ってみる～

[前回](https://qiita.com/taka-s_999/items/9fba585ac6e946cdb50d)、AWS Client VPNでの環境構築したのですが、
認証方法として「SAMLによるユーザーフェデレーション認証」に対応しているのを把握しておりませんでした。<br>（[2020/05のアップデート](https://aws.amazon.com/jp/about-aws/whats-new/2020/05/aws-client-vpn-supports-federated-authentication-via-saml-2/)なのに、、）
ということで今回は、AWS Client VPN が公式対応している IDaaS (Identity as a Service) 「Okta」を使って、SAMLによるユーザーフェデレーション認証を試してみます。

また、せっかくユーザー認証を行うので、
実際の運用時に管理者的にメリットがありそうな、「セルフサービスポータル機能」についてもあわせて試してみます。

#OktaでSAML認証
##Oktaでの作業
###1.Okta 初期登録
- Oktaには、30 日間の無料トライアルがあるのでそれを利用します。
https://www.okta.com/free-trial/
- ユーザー登録を行います。

※注意：Gmail (gmail.com) など、自組織を特定できないメールアドレスでは初期登録 (管理者登録) 出来ません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/955507/80bf64eb-9f7e-9f63-e459-838c55c00aed.png)

- 登録を行ったメールアドレスに、登録確認のメールが来ます。<br>記載されたログイン用のURLと仮のパスワードで、ログインします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/955507/4c7619fd-8f4e-aa98-82d6-7d40b4dc05a4.png)

- 本パスワードの設定と秘密のパスワードとユーザの画像を設定します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/955507/2341aa67-02fb-004c-4dbc-d6f220312b60.png">
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/955507/91d729db-cad7-0835-82c8-0c83817bfd5f.png">

- （2021/02/01現在）、初期登録 (管理者登録) の際は MFAが 必須です。
画面指示に沿って、 Okta の MFA 用ツール をダウンロードしてセットアップしてください。
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/955507/dcc93ea7-e857-a6b3-3c54-afe927f03366.png><img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/955507/f214665a-d200-08c3-1754-eda9b719bf69.png>

###2.Okta アプリ登録
- アプリとして「AWS Client VPN」を登録します。
- [Application]→ [Add Application]を選択します。検索欄に「AWS」と入力して、「AWS Client VPN」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/955507/fb17977e-1d42-f931-0ef6-7ee0035d5221.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/955507/c109897f-f341-e512-553f-02b88910e7aa.png)

- 特に設定変更せずに、そのまま追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/955507/58b4de3a-1be6-b7dd-236c-c223cc8d04f6.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/955507/4b34f8e0-9c26-642e-190e-f27254de5146.png)

###3.Okta グループ登録
- グループの追加をします。今回は「dev」というグループを作成しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/955507/b57760d1-a6e6-4316-34fe-886d7a14a853.png)

###4.Okta エンドユーザー登録
- エンドユーザを作成します。[Directory] → [People] → [Add Person]で登録できます。<br>グループを指定することができるので先に作成したグループ「dev」を指定してます。
- エンドユーザに関しては、Gmail などのメールアドレスでも登録可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/955507/d36ccd1e-1168-6648-d87c-fd015e48480d.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/955507/e65840c1-7bfb-455f-d79e-8da02707abf5.png)

###5.Okta アプリアサイン
- 「AWS Client VPN」を、先ほど作成したエンドユーザにアサインします。<br>[Applications] → [AWS Client VPN] → [Assignments]でアサイン可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/955507/0296aac5-cd6b-6567-b22c-c5179e9b198b.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/955507/16dae0f5-eba0-a247-d166-d6d892465a1b.png)

###6.Okta SAML設定
- AWS Client VPN 用の SAML 設定を行います。<br>「Applications」 → 「AWS Client VPN」 → 「SSO」を選択して、「Edit」ボタンを押します。
- 設定画面に移行するので、下記を設定します。<br>memberOf を「Matches .*」で設定する。
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/955507/6f1f9234-e48e-df91-2130-1200f6fcc33c.png><img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/955507/454f2db4-157a-f61f-e26d-50853fb467ae.png>

※同様の設定について、参考にさせていただいたページで、ADVANCED SIGN-ON SETTINGSのポートを「35001」に設定する必要があると記載があったのですが、2021/02/01現在、Port番号を設定する箇所がなくなっておりました。
明示的にポート番号を設定する必要なくなったようです。(特に設定しなくても、ちゃんと認証出来ました。)

- 設定が完了したら、AWS の IdP 登録で使用するため、メタデータの XMLファイルをダウンロードしておきます。<br>下図赤枠部分を右クリックして、「名前を付けてリンク先を保存」で保存できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/955507/fe980aed-81b9-4171-6d7b-bc69eebdefc0.png)

##AWSでの作業
###1.AWS IdP登録
- IAM から登録します。<br>
[IAM] →[ID プロバイダー] → [プロバイダの作成]で作成します。<br>
メタデータドキュメントでは、先ほどダウンロードしたメタデータを指定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/955507/bbb07b28-bef5-8cf4-e429-fb9f2ac9cca9.png)

###2.AWS Client VPN Endpoint 作成
- Client VPN Endpointについて、以下のように設定します。
    - 「名前タグ」　任意
    - 「クライアント IPv4 CIDR」 任意　クライアントに割り当てられるIPアドレスです。<br>
     割り当てるサブネットと被らない範囲で/22以上のものを指定してください。
    - 「サーバー証明書 ARN」 ACMにアップロードしているサーバ用の証明書を指定
    - 「認証オプション」 ユーザーベースの認証を使用、統合認証を選択
    - 「SAML プロバイダー ARN」 IDプロバイダーで設定したものを指定

他の項目はデフォルトで作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/955507/edb5a578-47b4-a217-3486-78b1a1e31057.png)

###3.AWS Client VPN Endpoint 設定
- エンドポイント作成後、「関連付け」で接続するサブネットを追加します。
- 「認証」で、接続先サブネットや接続許可 CIDR を指定します。
- Oktaで作成したdevグループを指定します。これで宛先「10.0.0.0/16」は「devグループに所属しているユーザーのみ」が接続できるようになります。<br>
※詳しい手順に関しては、[前回](https://qiita.com/taka-s_999/items/9fba585ac6e946cdb50d)の手順を参照してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/955507/a4195a5a-7508-db8e-b879-d5fca90df658.png)

###4.接続確認
- ClientVPNクライアントを起動して、ダウンロードしたクライアント設定ファイルを読み込ませます。
- 接続をすると、ブラウザでOktaの認証画面が開かれます。devグループに所属しているユーザーでログインします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/955507/c9ba37e7-4d5f-1ac3-d261-d75994113fa5.png)

- 以下の「受信した～」のメッセージが表示されれば接続OKです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/955507/943e4c5d-95b8-4c8c-be7d-63d5e08750bf.png)

#セルフサービスポータル機能
##1.セルフサービスポータル機能とは
- AWS Client VPN をエンドユーザーが使用する際には、以下2つをクライアントデバイスにダウンロードする必要があります。
    - VPN クライアント
    - クライアント VPN 設定ファイル
- 前者のクライアントは任意の場所からダウンロードできますが、後者の設定ファイルはマネジメントコンソールからダウンロードする必要があります。
- セルフサービスポータル機能により、各エンドユーザーが専用ポータルから設定ファイルをダウンロードできるようになりました。管理者はセルフサービスポータル機能を有効化し、その URL を連携するだけで済みます。

[AWS Client VPN が VPN プロファイルとデスクトップアプリケーションをダウンロードするためのセルフサービスポータルを発表](https://aws.amazon.com/jp/about-aws/whats-new/2020/11/aws-client-vpn-announces-self-service-portal/)

##2.セルフサービスポータル機能の有効化
- セルフサービスポータル機能の有効化は、エンドポイントの新規作成時だけでなく、既存のエンドポイントを設定変更することでも指定できます。
- [VPC] → [クライアントVPNエンドポイント] → [アクション] → [クライアントエンドポイントの変更]を選択して、変更画面に移ります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/955507/1ff399a1-cbde-cbeb-9485-b4a568628074.png)

- セルフサービスポータルに関するパラメータを有効化します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/955507/b21f2a14-caba-2faf-4fe5-2ce25b37bb91.png)

- これで Client VPN 用のセルフサービスポータルの URL が生成されました。管理者の方は、このURLをエンドユーザーに連携することになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/955507/a5555b99-1250-39e0-2f3c-eb2337c4c8f1.png)

##3.セルフサービスポータルへのログイン
- 1で払いだされたセルフサービスポータルのURLへアクセすると、ポータルにログインできます。<br>
ここから設定ファイルおよび VPN クライアントがダウンロードできます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/955507/81b33255-1f1e-4e65-ab4d-856eac6cfe70.png)

#参考にさせていただいた記事：
- [Okta を試してみた(hawksnowlog)](https://hawksnowlog.blogspot.com/2018/08/idaas-okta.html)
- [AWS Client VPN が SAML 対応したので Okta で試してみた](https://qiita.com/_s__o_/items/2078089e771cef84c65d)
- [AWS Client VPN のリソースとパラメータを一枚絵にまとめつつ過去のエントリもまとめてみた（Developers.IO）](https://dev.classmethod.jp/articles/aws-client-vpn-perfect-understand-2/)
- [[アップデート] クライアント設定ファイルの配布が不要に！ AWS Client VPN でセルフサービスポータル機能が有効になりました（Developers.IO）](https://dev.classmethod.jp/articles/aws-client-vpn-announces-self-service-port)