[AWS] マネージドなVPNサービスのClient VPNを試してみた

安全なネットワーク接続を実現するVPNですが、非常にたくさんのソフトウェアが存在しています。

私は個人でOpenVPNを使っていたことがありましたが、会社ではPritunlというOpenVPNライクなツールを活用していました。
そんな感じで要件に応じて色々なVPNがあるわけです。

今回はAWS内のマネージドサービスであるClient VPNエンドポイントを試してみたので記事にしてみました。

ClientVPNのメリット・デメリット

実際に今まで複数のVPNサービスを利用してきた経験から、AWS ClientVPNエンドポイントのメリットは以下の通りかなと思います。

・マネージドなサービスのため保守が容易
・ライセンスが不要
・IdPと紐付けて詳細な認証を実現可能
・OpenVPNベースなので専用クライアント以外でも利用可能(設定次第)
・基本利用料金 + 利用時間ベースなので少人数向き
・ルートテーブルによるアクセス先の制御が可能

一方で、利用ケースによっては料金が少し高いと感じることがありそうです。

例えば、2つのサブネットに紐付けたClientVPNエンドポイントを作成した場合、基本的な利用料金は23,000[円/月]程度かかります。

さらに追加で接続数と接続時間に応じた課金が発生するので、自分でEC2インスタンス上にVPNを構築するケースと比較すると料金に大きな差が出てしまいます。

もちろん安全性を取るのであればAWSのマネージドサービスに安全安心を担保させてしまう方が良いのですが、この辺りは要件に応じて選択したいですね。

利用のための事前準備


かなり面倒なのですが、ClientVPNエンドポイントを利用するためには事前にサーバ証明書とクライアント証明書を発行する必要があります。

これはClientVPNが相互認証を採用しているためです。

そのため、相互証明書を作成してACMへ登録しておく必要があります。

事前準備に必要な手順は以下を参考にしてみてください。

◆相互証明書の作成
https://docs.aws.amazon.com/ja_jp/vpn/latest/clientvpn-admin/client-authentication.html#mutual

また、ClientVPNにはセキュリティグループをアタッチすることができるため、インバウンドは空でも良いので何かしら専用の設定を作成しておくことをおすすめします。
他のセキュリティグループでアクセスを制御する際に、ClientVPNにアタッチしたセキュリティグループを指定すれば良いので制御が簡単になります。

エンドポイントの作成


管理コンソールからClientVPNと検索して対象のページへ遷移します。

VPNエンドポイントの作成を押下してください。


上記の画像を参考に必要な項目を埋めていきます。

オプションの[スプリットトンネルを有効にする]をチェックすることで、ルートテーブルでレンジの指定をしていない範囲のIPアドレスに対してはVPNを経由せずにクライアントのPCから直接アクセスするようになります。
このオプションを有効にしていると、ルートテーブルに0.0.0.0/0のような設定を入れた場合も無視されます。

意図せぬ大量のデータ通信が発生しないように、スプリットトンネルは有効にしておくことをおすすめします。

関連付け・認証・ルートテーブル


ClientVPNエンドポイントは先ほどの設定項目だけでは機能しません。
まず関連付けを作成する必要があります。


[関連付け]ではサブネットとVPNを紐付けることができます。
複数のサブネットと関連付けた場合はその分料金が発生することに注意しましょう。


関連付けたサブネットへのルートテーブルは自動的に生成されます。
他のルーティング設定が必要な場合はこのタブから追加します。


[認証]ではVPNアクセスの制御を行うことができます。
IdPを利用する場合などはここで条件を追加する必要があります。
今回はAWS公式ドキュメントの例に倣って認証せずに0.0.0.0/0からの受信を許可させておきます。

VPNクライアントファイルのダウンロードと編集


設定が完了したらVPNクライアントファイルをダウンロードしてください。

本来であればこのVPNクライアントファイルをお手元のデバイスのClientソフトウェアに読み込ませれば良いのですが、今回は相互認証を採用しているため、VPNクライアントファイルにクライアント証明書と秘密鍵を埋め込む必要があります。

事前準備で作成しておいた「client1.domain.tld.crt(クライアント証明書)」と「client1.domain.tld.key(秘密鍵)」をそれぞれ上記の位置に埋め込んでください。

◆事前準備:相互証明書の作成
https://docs.aws.amazon.com/ja_jp/vpn/latest/clientvpn-admin/client-authentication.html#mutual


その後、AWS ClientVPNソフトウェアに読み込ませてVPN接続ができることを確認します。

OpenVPNベースなのでOpenVPNクライアントソフトウェアやPritunlクライアントソフトウェアでも実行できますが、設定内容によってはこれらでは接続できないケースがあります。そのため、必ず最初はAWSが提供しているソフトウェアで試してください。

◆AWS Client VPN ダウンロード
https://aws.amazon.com/jp/vpn/client-vpn-download/

おわりに

今回はAWS Client VPNを試しました。
これによりPrivateなサブネットに対して踏み台なしで安心安全なアクセスが可能になります。

一方で利用規模によっては料金が高くなってしまうなど少々クセがありそうです。
私の勤務先の会社では、相互認証ではなくIdPによるClientVPNを最近設定してみました。

今回のケースでは認証が行われていないため、クライアントファイルの流出などによる不正なアクセスが防げません。
一方でIdPを利用することで、権限のあるユーザーにしかVPN接続を許可しないので、より安全な構成にすることができます。

VPNには様々な選択肢がありますが、もしも要件にマッチしていたならば利用してみてはいかがでしょうか。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)