見出し画像

スマートなVPN環境の作り方!

現代社会に蔓延る、社内のシステムへアクセスする際の古い慣習… 。
そう、社内のNWに穴開けてアクセスするアレ…そうVPN!

管理が面倒ですよね

「 ん?エラー?何も見なかったことにしよう… 」

「 え?社内のシステムにアクセスできない?調子悪いんですかねー… 」

「 なになに?ファームウェアの脆弱性?気のせいだ」

「 今日リモートなんで、実機確認できないんですよ 」

なんて言った事ないですか?ぼくは無いです…🙇‍♂️

…はい!スマートにしましょう!

これまでに困った事

クライアントVPNの利用方法は、
「重要なシステムへのアクセスを特定のNWからのみに制限する」
という用途が多いので、慎重に扱わないといけないと思ってます。
特に下記のようなケースが気になります

・NW機器の障害による停止
 オフィスが突然の停電でNW機器が落ち、VPNアクセスできなくなり、業務ができなくなった。

・認証情報の持ち出し(漏洩)による不正アクセス

 VPNで利用する証明書が持ち出されて(漏洩)、第三者からVPNアクセスされた

この辺りは、最近特にリモートワークが加速した事により、大きな課題になったと考えています。

実現したいこと

上記を踏まえた上で実現したい事をざっくり整理すると、こんな感じかと思います。

・重要なシステムへのアクセスを特定のNWからのみに制限する
・障害が発生しても可用性を担保できるようにする
・第三者からアクセスされないようにする

これらの要件を満たせるようにやっていきます!

行き着いた結論(手段)

こうです!
※実際の画面の動きは(静止画ですが)1番最後に載せてます

画像1

けっこう省略してますが、AWSのマネージドサービスを使います!認証はOkta(SAMLできるやつならOK)

それぞれの要件に対してどうできるかを見てみると…

・重要なシステムへのアクセスを特定のNWからのみに制限する
インターネット出る時は固定のIPになるので、これまで通りIPアドレスでアクセスを制限する事が可能です。

・障害が発生しても可用性を担保できるようにする
AWSのマネージドサービスなので、例えばYAMAHAの1台しかない物理機器より大幅に可用性が担保できると考えます。

・第三者からアクセスされないようにする
SAMLで認証が可能なので、いいように認証してください!
ぼくは、OTPとデバイス認証します。

実装方法

今回のこの構成のすごい良いところは、実装がマジで簡単です。たぶん30分くらいです。さっきはだいぶ省略した図を載せましたが、こんな感じになります。

画像16

やる事リスト
・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使いますよの設定

下記順で選択

画像2

aws client vpnを検索して選択

画像3

Add選択

画像4

Applicatioon labelを入力してDoneクリック

画像5

Sign On > Edit の順にクリックし、memberOfを下記の通り入力

画像7

Portに 35001を入力しSave

画像7

metadataをダウンロードしておきます

画像8

AWS管理画面で、OktaをIDプロバイダーとして使いますよの設定

IAM > ID プロバイダーの「プロバイダ作成」をクリック

画像12

プロバイダーのタイプで「SAML」を選択
プロバイダー名を適当に入力
メタデータドキュメントで先ほどダウンロードしたIdPのメタデータを選択し次のステップ > 作成 をクリック

画像12

AWS管理画面で、クライアントVPNエンドポイントの作成

「クライアントVPNエンドポイントの作成」をクリック

画像12

それぞれ項目を入力
・名前タグ(適当に)
・説明(適当に)
・クライアントIPv4 CIDR (あとでクライアントVPNとサブネットを紐つけるのですが、それとは別で被らないようは範囲で設定)
・サーバー証明書 ARN(オレオレでいいのでサーバ証明書を作って、ACMにアップロードした証明書を選択)
・認証オプション(「ユーザーベースの認証を使用」を選択。「統合認証」も選択)
・SAMLプロバイダー ARN(IDプロバイダーに登録したやつを選択)
・接続ログ記録(任意)
その他はそのままで「クライアントVPNエンドポイントの作成」をクリック

画像12

関連付け>関連付けをクリック

画像26

紐つけたいVPCとサブネットを選択(今回の構成だと、図のprivate subnet)

画像14

認証の設定をします。認証>受信の承認 をクリック

画像27

特に制限なくインターネットアクセスしたい場合は、下記のように入力

画像15

ルートテーブルの設定をします

画像27

ルート送信先は「0.0.0.0/0」
ターゲットVPCサブネットIDは、クライアントVPNエンドポイントを紐つけたいサブネットを選択します。(構成図のprivate subnet)

画像19

「クライアント設定のダウンロード」で設定ファイルをダウンロードします。

画像20

PCでVPNクライアントの設定

下記からインストーラーをダウンロードします

インストール完了後、起動してください。
ファイル>プロファイル管理をクリック

画像22

プロファイル追加をクリックし、ダウンロードしておいた「クライアント設定」ファイルを追加します

画像21

以上で設定完了です。

さいごに

VPN自体は便利な仕組みだと思うのですが、物理的な機械が必要で困らされる人が多くいるのかなと思います。
そんな状況を解決するとても素敵な手段だと思うので、是非AWS Client VPNご検討されてはどうでしょうか!

※不明点とかTwitterでDMもらえたら、できる範囲でお答えします

実際の挙動…

VPNクライアントの接続をクリックすると

画像23

自動でブラウザが起動して、ID/パスワードを求められます

画像26

未許可PCでやったので止められました…(正しい!)

画像26

問題なく認証が完了すれば、VPNクライアントの表示が「接続済み」に変わりアクセスが可能になります。

画像26

以上です!



この記事が気に入ったらサポートをしてみませんか?