こんにちは、クラウドソリューション事業部の上野です。
今回は AWS Client VPN を利用して会社のVPN環境を冗長化しようとしているお話になります。
事の経緯
2022年某日、会社に出勤しているメンバーからインターネットへ接続できないという連絡がありました。同時に社内ネットワーク上にあるルーターの機能を利用していたVPN環境も停止する状態となりました。
なお、障害の原因は社内のルーターと回線業者の上位ルーター間のネットワークの断線が原因でした。
弊社では多くの社員がリモートワークをしているため、社内のネットワークが停止しても即座に業務が止まるということはありませんでした。しかしながらサーバーやAWSマネジメントコンソール、検証環境へのWEBアクセスなどは会社のIPアドレスからのみアクセスを許可しており、VPN接続できなくなることで、これらの環境へ接続できないという問題が発生いたしました。
結果、自社のネットワークが利用できなくなった場合でもIPアドレスによるアクセス制限された環境へ接続できるようにする必要性がでてきました。
要件
VPNとはいうものの弊社で必要となるのは、
リモートワーク主体の弊社においてIPアドレスによるアクセス制限された環境へ接続するための固定IPアドレスを利用できる機能
という要件になります。
一方で通常VPNで求められる社内のネットワークにセキュアに接続するための機能は今回は付随的な要件となります。
要件をまとめると重要度順に以下の通りになります。
- VPN接続により固定のIPアドレスが利用できるようになること
- 社内ネットワークがダウンした場合でも利用できること
- VPN接続用のユーザーは社員単位で発行し、且つ容易に管理できること
- VPN接続時のログを取得できること
- 社内ネットワーク内へ接続できること
出来上がった構成
いきなりですが構成図は出来上がったこちらになります。
冗長化用のVPNには AWS Client VPN を利用する構成としました。
それぞれの要件はどのように対応しているか見ていきましょう。
要件1.VPN接続により固定のIPアドレスが利用できるようになること
Client VPN Endpoint を社内システム用のAWSアカウントのプライベートサブネット上に作成しています。
VPN接続した端末は NatGateway にセットされた Elastic IPアドレス (EIP) を使ってインターネットへアクセスされることになるため、固定のIPアドレスが利用されることになります。
冗長性を考慮すると複数のアベイラビリティゾーンに分けて運用すべきですが、そもそもが既存のVPN環境を冗長化するための環境となりますので、今回はシングルAZで運用します。
要件2.社内ネットワークがダウンした場合でも利用できること
VPNを利用してインターネットへアクセスされる経路は
- 社内ネットワーク経由
- AWSのVPC経由
と2系統となり、社内ネットワークがダウンしても問題なくなります。
要件3.VPN接続用のユーザーは社員単位で発行し、且つ容易に管理できること
AWS Client VPN には下記3つの認証方法があります。
- Active Directory 認証 (ユーザーベース)
- 相互認証 (証明書ベース)
- シングルサインオン (SAML ベースのフェデレーション認証) (ユーザーベース)
弊社では AWS Single Sign-On (AWS SSO) を利用して各AWSアカウントへ接続する運用を行っていたため、シングルサインオン (SAML ベースのフェデレーション認証)を利用することにしました。
AWS Client VPN は社内システム用のAWSアカウントにて構築し、ユーザー認証を行う AWS SSO は社内のAWSアカウントを AWS Organizations で管理しているマスターアカウントのものを利用しています。
各ユーザーは AWS SSO で認証することでVPN接続できるようになります。
結果、社員全員分のシングルサインオン用のアカウントはすでに存在していたため、あらためてVPNユーザーを作成する必要もなく、追加でユーザーの管理の手間が増えることもなく非常に便利です。
要件4.VPN接続時のログを取得できること
アクセスログは AWS Client VPN の機能で CloudWatch Logs に保管されます。
要件5.社内ネットワークへ接続できること
VPN接続先のVPCは以前から社内ネットワークと AWS Site-to-Site VPN 接続をしていました。そのため AWS Client VPN で接続した時点で VPC ⇔ 社内ネットワーク 間は疎通することができました。
弊社が利用している業務システムの多くはクラウドのサービスや自社でAWS上に構築したものを利用しているため、社内ネットワークにはほぼ業務システムは稼働していない状態で活用する機会はほぼありません。
しかしながら、将来的に何らかの用途で使われることを考慮して、AWS Client VPN で接続した環境から社内ネットワークに接続できる経路は確保しておきたかったのでこのような設計にしています。
AWS Client VPNに接続してみる
AWS Client VPN でVPN接続するためのクライアントソフト(AWS VPN Client)がAWSより提供されています。OSごとのクライアントソフトや利用方法は下記ユーザーガイドを参照してください。
インストールと設定ができたらクライアントソフトを起動し、設定した接続先へVPN接続します。
接続を開始すると自動でWEBブラウザで AWS SSO のログイン画面が立ち上がるので、自身のユーザーIDとパスワードを入力します。
ログインに成功するとVPNが接続されます。
接続後に使用しているIPアドレスが Elastic IPアドレス になっていればOKです。下記のサイトで自身のIPアドレスを確認することができます。
CMANインターネットサービス
https://www.cman.jp/network/support/go_access.cgi
あとはVPN用の Elastic IPアドレス を許可IPとして各環境へ登録するだけです。
まとめ
弊社の様に社内ネットワークとAWS環境を AWS Site-to-Site VPN や AWS Direct Connect などですでに接続された環境下にある場合、AWSおよび社内の両方のクローズドな環境に接続することができ、非常に便利なサービスでした。
また、AWS Client VPN は、
・マネージドサービスであるため機器の管理が不要
・AD や SSO など既存の認証基盤と連携が可能
といった点で運用の管理コストも下がります。
弊社と同じような環境にある場合は AWS Client VPN の導入をご検討してみてはいかがでしょうか。