AWS SSO を Client VPN の認証に使う

# 初めに

この記事は以下の AWS ブログを参考にやってみたものです。

https://aws.amazon.com/jp/blogs/news/using-aws-sso-with-aws-client-vpn-for-authentication-and-authorization/

# AWS SSO の環境構築

ここでやることは以下の 3 つです。

- SSO にアプリケーションを作成
- ユーザーグループを作成
- ユーザーを作成

「AWS SSO の有効化」をクリックします。

![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/111767da-cdd5-3735-89ed-e7e8b27db6ba.png)

有効化されたことを確認した後、左のナビゲーションペインから「アプリケーション」をクリックします。

![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/92ac901f-fa79-d66b-0cb9-7fbe2c0c0302.png)

「新規アプリケーションの追加」をクリックします。

![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/508c5862-fb07-fdfd-0dd0-cef925df91ad.png)

「カスタム SAML 2.0 アプリケーションの追加」をクリックします。

![5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/58e91748-115f-ce4a-6b71-4cc560ca2a23.png)

以下の「メタデータファイルがない場合は・・・」をクリックします。

![6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/d4b31676-c1f4-93ce-d81d-14f9126a5c72.png)

「ダウンロード」をクリックし、メタデータファイルをダウンロードします。

![7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/8a56f318-55f3-15e6-c134-19c298426e3d.png)

アプリケーション ACS URL に「http:\//127.0.0.1:35001」、アプリケーション SAML 対象者に「urn:amazon:webservices:clientvpn」を入力します。その後「変更の保存」をクリックします。

![8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/c623e89d-0265-3192-b3d5-33c8f4d63748.png)

作成したアプリケーションを選択し、「属性マッピング」タブをクリックします。以下のようにマッピングを設定します。

|アプリケーションのユーザー属性|マッピング|形式|
|---|---|---|
|`Subject`|`${user:email}`|`emailAddress`|
|`memberOf`|`${user:groups}`|`unspecified`|

![9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/2a2efa0c-6f22-833d-1c83-68c8fd49db12.png)

続いてグループを作成します。左のナビゲーションペインから「グループ」をクリックし、以下の「グループを作成」をクリックします。

![10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/3b90225a-b4d8-7aa6-4106-3c1ce61c22c3.png)

グループ名に「VPN_Group」と入力します。その後「グループを作成」をクリックします。

![11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/8451cb0d-c051-7e67-ea54-e697e58a4212.png)

続いてユーザーを作成します。左のナビゲーションペインから「ユーザー」をクリックし、以下の「ユーザーを作成」をクリックします。

![12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/7e7b4ef3-e64e-3de2-bdb7-22e777a3f456.png)

ユーザー情報を入力します。E メールアドレスには招待メールが届くので、そのユーザーのメールアドレスを入力します。

![13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/150b5f77-3bf1-fe2a-03cb-299531b025f8.png)

一番下の「次へ」をクリックします。

![14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/c2d5e308-fbcd-42fb-6a26-13fd76324249.png)

先ほど作成したグループを選択し、「次へ」をクリックします。

![15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/96ebfac5-1066-2374-c32b-6df233f782b8.png)

確認画面で「ユーザーを追加」をクリックします。

![16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/8a532ad3-8238-7c72-25a3-49973b4c58a7.png)

しばらくすると招待メールが届きます。「Accept invitation」をクリックします。

![17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/902fa553-753b-16d6-429f-82fbd6b5b40c.png)

ユーザーのパスワードを入力します。

![18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/978b755c-df7f-eb46-cfe1-7e09cddd56e2.png)

これで有効なユーザーが作成されます。

最後にアプリケーションに作成したグループを割り当てます。アプリケーションを選択し、「割り当て済みユーザー」タブから「ユーザーの割り当て」をクリックします。

![36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/6fcd225b-03f2-ed9f-97c4-a6c595434995.png)

続いて「グループ」タブからグループを選択します。その後、「ユーザーの割り当て」をクリックします。

![37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/28939647-aa87-ec40-7a4b-268d5800e954.png)

# IAM ID プロバイダの作成

IAM のコンソール画面に行き、ナビゲーションペインから「ID プロバイダ」をクリックします。その後、以下の「プロバイダを追加」をクリックします。

![19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/5f233d45-472e-5868-42d5-1e4ec314b951.png)

プロバイダの種類は「SAML」を選択し、プロバイダ名には任意の名前（ここでは「AWS_SSO_for_Client_VPN」）を入力します。

メタデータドキュメントは以前ダウンロードしたメタデータファイルを選択します。その後「プロバイダを追加」をクリックします。

![20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/de398990-bb9f-f2d7-3689-0d25ac913795.png)

# クライアント VPN エンドポイントの作成

VPC のコンソール画面に行き、ナビゲーションペインから「クライアント VPN エンドポイント」をクリックします。その後、「クライアント VPN エンドポイントの作成」をクリックします。

![21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/78444607-4696-550d-ea23-85abc5b168db.png)

名前タグには任意の名前（ここでは「AWS Client VPN」）を入力します。クライアント IPv4 CIDR （VPN 接続時のクライアントに割り当てられる IP アドレス）には「192.168.0.0/22」を入力します。クライアント IPv4 CIDR を入力するときは以下の考慮事項があります。

- 範囲は /12 ～ /22
- 関連付けを行うサブネットの VPC の CIDR と重複不可
- クライアント VPN エンドポイントのルートテーブルのルート送信先の CIDR と重複不可
- クライアント VPN エンドポイント作成後に変更不可
- 一般に、クライアント VPN エンドポイントでサポートする予定の IP アドレスの 2 倍の数を含むクライアント CIDR 範囲を指定することが推奨される

![22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/ba051ee8-56f7-aeaf-58f8-36d3107693d9.png)


続いてサーバ証明書 ARN を選択します。サーバ証明書の作成方法 については、以下のドキュメントを参考にします。

https://docs.aws.amazon.com/ja_jp/vpn/latest/clientvpn-admin/client-authentication.html#mutual

認証オプションは「ユーザーベースの認証を使用」を選択し、「統合認証」を選択します。SAML プロバイダー ARN 、セルフサービス SAML プロバイダー ARN には作成したID プロバイダを選択します。

![23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/902f3b83-9161-8aa1-b814-1804a6759064.png)

接続ログ記録、クライアント接続ハンドラはいずれも「いいえ」を選択します。

![24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/a241e561-b0c2-9326-a443-5e5e8cacc9a1.png)

その他のオプションでは「スプリットトンネルを有効化する」にチェックを入れます。VPC ID とセキュリティグループ ID には、クライアント VPN エンドポイントを作成する VPC とそのセキュリティグループの ID を選択します。その後、「クライアント VPN エンドポイントの作成」をクリックします。

![25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/8c91ee14-a336-9a79-6a46-4199a886fb11.png)

続いて関連付けを行います。作成したクライアント VPN エンドポイントを選択し、「関連付け」タブから「関連付け」をクリックします。関連付ける VPC とサブネットを選択します。その後、「関連付け」をクリックします。

![26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/3c9e60b1-026f-f46e-49a8-d79f6828f462.png)

続いてどのユーザーがどの CIDR にアクセスできるかを設定するために、受信の承認を行います。「認証」タブから「受信の承認」をクリックします。

![28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/5d074332-f98d-c25b-e21a-402dd68973a6.png)

ここで AWS SSO のコンソール画面のナビゲーションペインから「グループ」を選択し、「VPN_Group」をクリックします。以下のようにグループ ID が表示されるのでコピーします。

![29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/ea345d50-7c0e-b89e-4905-de5c5eb8a86c.png)

アクセスを許可する CIDR を入力し、アクセスを付与する対象に「特定のアクセスグループのユーザーへのアクセスを許可する」を選択します。アクセスグループ ID に先ほどコピーした SSO のグループ ID を貼り付けます。その後、「認証ルールの追加」をクリックします。

![30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/fdef3ab9-af39-d7d2-d790-221f397760e9.png)

続いて「クライアント設定のダウンロード」をクリックし、VPN 接続に使用する設定ファイルをダウンロードします。

![31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/c87db190-5635-4f1d-1b19-bb5b09a24024.png)

VPN 接続のためのソフトである AWS VPN Client をインストールしていない場合は、以下のページから OS に適したインストーラをダウンロードします。

https://aws.amazon.com/jp/vpn/client-vpn-download/

AWS VPN Client を起動し、「ファイル」をクリックします。

![33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/02c863e6-d04b-6d5a-07db-c773b662b9fc.png)

表示名にこの VPN 接続に用いるわかりやすい名前を入力し、VPN 設定ファイルに先ほどダウンロードした設定ファイルを選択します。その後、「プロファイルを追加」をクリックします。

![33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/9c293c89-5cff-1dd1-f6f8-77781028dda7.png)

以下の「接続」をクリックします。

![35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/67ba6abd-2e4b-0658-ac65-c3bb95cc636f.png)

自動でブラウザが開き、以下のように表示されていれば、AWS SSO に認証されています。

![38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/7d4d77ce-3440-200f-190d-d1511a914d5f.png)

VPN 接続できているかを確かめるには、関連付けを行っている VPC のプライベート DNS サーバの IP アドレス（CIDR の最小値に プラス 2 した IP アドレス）に対して名前解決できるかを確認します。

- 成功時

![39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/11548cc9-da23-17af-e1d8-3965133ca36f.png)

- 失敗時

![40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/b18f10d9-38d2-eddb-3826-c49b21adb200.png)

# 参考記事

https://aws.amazon.com/jp/blogs/news/using-aws-sso-with-aws-client-vpn-for-authentication-and-authorization/

https://docs.aws.amazon.com/ja_jp/vpn/latest/clientvpn-admin/what-is.html#what-is-limitations

https://docs.aws.amazon.com/ja_jp/vpn/latest/clientvpn-admin/cvpn-getting-started.html#cvpn-getting-started-rules

https://docs.aws.amazon.com/ja_jp/vpn/latest/clientvpn-admin/scaling-considerations.html

https://docs.aws.amazon.com/ja_jp/Route53/latest/DeveloperGuide/resolver.html