スマートなVPN環境の作り方!
現代社会に蔓延る、社内のシステムへアクセスする際の古い慣習… 。
そう、社内のNWに穴開けてアクセスするアレ…そうVPN!
管理が面倒ですよね
「 ん?エラー?何も見なかったことにしよう… 」
「 え?社内のシステムにアクセスできない?調子悪いんですかねー… 」
「 なになに?ファームウェアの脆弱性?気のせいだ」
「 今日リモートなんで、実機確認できないんですよ 」
なんて言った事ないですか?ぼくは無いです…🙇♂️
…はい!スマートにしましょう!
これまでに困った事
クライアントVPNの利用方法は、
「重要なシステムへのアクセスを特定のNWからのみに制限する」
という用途が多いので、慎重に扱わないといけないと思ってます。
特に下記のようなケースが気になります
・NW機器の障害による停止
オフィスが突然の停電でNW機器が落ち、VPNアクセスできなくなり、業務ができなくなった。
・認証情報の持ち出し(漏洩)による不正アクセス
VPNで利用する証明書が持ち出されて(漏洩)、第三者からVPNアクセスされた
この辺りは、最近特にリモートワークが加速した事により、大きな課題になったと考えています。
実現したいこと
上記を踏まえた上で実現したい事をざっくり整理すると、こんな感じかと思います。
・重要なシステムへのアクセスを特定のNWからのみに制限する
・障害が発生しても可用性を担保できるようにする
・第三者からアクセスされないようにする
これらの要件を満たせるようにやっていきます!
行き着いた結論(手段)
こうです!
※実際の画面の動きは(静止画ですが)1番最後に載せてます
けっこう省略してますが、AWSのマネージドサービスを使います!認証はOkta(SAMLできるやつならOK)
それぞれの要件に対してどうできるかを見てみると…
・重要なシステムへのアクセスを特定のNWからのみに制限する
インターネット出る時は固定のIPになるので、これまで通りIPアドレスでアクセスを制限する事が可能です。
・障害が発生しても可用性を担保できるようにする
AWSのマネージドサービスなので、例えばYAMAHAの1台しかない物理機器より大幅に可用性が担保できると考えます。
・第三者からアクセスされないようにする
SAMLで認証が可能なので、いいように認証してください!
ぼくは、OTPとデバイス認証します。
実装方法
今回のこの構成のすごい良いところは、実装がマジで簡単です。たぶん30分くらいです。さっきはだいぶ省略した図を載せましたが、こんな感じになります。
やる事リスト
・Okta管理画面で、SPとしてAWS Client VPN使いますよの設定
・AWS管理画面で、OktaをIDプロバイダーとして使いますよの設定
・AWS管理画面で、クライアントVPNエンドポイントの作成
・PCで、VPNクライアントの設定
以下省略して書きます(基本デフォルト設定でOKでした)
・サーバ証明書の生成
・ACMへ証明書の登録
・VPCの設定
・Subnetの設定
・Security Groupの設定
・NatGatewayの設定
・InternetGatewayの設定
・OktaのMFA設定
けっこう省略してもうたな…。
では先ず、
Okta管理画面で、SPとしてAWS Client VPN使いますよの設定
下記順で選択
aws client vpnを検索して選択
Add選択
Applicatioon labelを入力してDoneクリック
Sign On > Edit の順にクリックし、memberOfを下記の通り入力
Portに 35001を入力しSave
metadataをダウンロードしておきます
AWS管理画面で、OktaをIDプロバイダーとして使いますよの設定
IAM > ID プロバイダーの「プロバイダ作成」をクリック
プロバイダーのタイプで「SAML」を選択
プロバイダー名を適当に入力
メタデータドキュメントで先ほどダウンロードしたIdPのメタデータを選択し次のステップ > 作成 をクリック
AWS管理画面で、クライアントVPNエンドポイントの作成
「クライアントVPNエンドポイントの作成」をクリック
それぞれ項目を入力
・名前タグ(適当に)
・説明(適当に)
・クライアントIPv4 CIDR (あとでクライアントVPNとサブネットを紐つけるのですが、それとは別で被らないようは範囲で設定)
・サーバー証明書 ARN(オレオレでいいのでサーバ証明書を作って、ACMにアップロードした証明書を選択)
・認証オプション(「ユーザーベースの認証を使用」を選択。「統合認証」も選択)
・SAMLプロバイダー ARN(IDプロバイダーに登録したやつを選択)
・接続ログ記録(任意)
その他はそのままで「クライアントVPNエンドポイントの作成」をクリック
関連付け>関連付けをクリック
紐つけたいVPCとサブネットを選択(今回の構成だと、図のprivate subnet)
認証の設定をします。認証>受信の承認 をクリック
特に制限なくインターネットアクセスしたい場合は、下記のように入力
ルートテーブルの設定をします
ルート送信先は「0.0.0.0/0」
ターゲットVPCサブネットIDは、クライアントVPNエンドポイントを紐つけたいサブネットを選択します。(構成図のprivate subnet)
「クライアント設定のダウンロード」で設定ファイルをダウンロードします。
PCでVPNクライアントの設定
下記からインストーラーをダウンロードします
インストール完了後、起動してください。
ファイル>プロファイル管理をクリック
プロファイル追加をクリックし、ダウンロードしておいた「クライアント設定」ファイルを追加します
以上で設定完了です。
さいごに
VPN自体は便利な仕組みだと思うのですが、物理的な機械が必要で困らされる人が多くいるのかなと思います。
そんな状況を解決するとても素敵な手段だと思うので、是非AWS Client VPNご検討されてはどうでしょうか!
※不明点とかTwitterでDMもらえたら、できる範囲でお答えします
実際の挙動…
VPNクライアントの接続をクリックすると
自動でブラウザが起動して、ID/パスワードを求められます
未許可PCでやったので止められました…(正しい!)
問題なく認証が完了すれば、VPNクライアントの表示が「接続済み」に変わりアクセスが可能になります。
以上です!