[AWS]踏み台をワンチャンなくせる!?VPC接続にClient VPNを使ってみよう
コンニチハ、千葉です。
はじめに
VPCにはDirectConnect(閉域網)をはじめ、インターネットVPNでのセキュアな接続もサポートされています。 VPCで利用できるインターネットVPN接続方式は複数あります。
- AWS Site-to-Site VPN
- AWS Client VPN
- AWS VPN CloudHub
- サードパーティー製ソフトウェア VPN アプライアンス
参考:https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/vpn-connections.html
今回は、その中でもClient VPNを試してみます。なぜなら、Client VPNが東京リージョンに対応したからです!記念です! ちなみにClient VPNを利用すると、端末ごとにVPN接続ができるので、特定の端末だけアクセスしたい場合なのど利用が可能です。認証はAD連携もできます。またクライアント証明書(相互認証)にも対応しています。
考察
参考:https://docs.aws.amazon.com/ja_jp/vpn/latest/clientvpn-admin/how-it-works.html
このClient VPNを利用することで、VPCへクライアント端末から接続することができるようになります。EC2に限らずS3やDX経由でオンプレまで接続できます。 そして、クライアント証明書認証に加えて、AD連携によるユーザー認証も可能です。このユーザーは、どこのIPセグメントにアクセスできるかみたいな制御ができます。これは、ワンチャン踏み台なくせるのでは?と思ったので、Client VPNに全振りした場合のコスト感や懸念についても考察してみます。
料金
料金が気になるところです。
https://aws.amazon.com/vpn/pricing/
エンドポイントのアソシエーションで$0.15/Hで、VPN接続ごとに$0.05/Hとなります。 つまりClient VPNエンドポイントは複数のVPNに関連付けできますが、1つのVPC関連付けで$0.15/Hです。また、VPN接続ごとに$0.05/Hで1時間未満の場合でも$0.05/Hになります。
エンドポイントに1つのVPCを関連付けで$0.15/hなので$108/月。複数踏み台がある環境だと、VPNに乗り換えるだけでコスト抑えることができるかもですね。 注意点としては、VPN接続ごとに課金も発生するので短いVPN接続をたくさん繰り返す場合、ユーザーがどれくらいいて、どれくらいの頻度で接続するかは事前に検討が必要です。
考慮事項
- ユーザー管理:Client VPNに、AD連携が付いていてユーザーがアクセス可能なセグメントを設定できます。
- ログ: VPN接続に関するログを取得できます。ただし、OS上の監査ログを取得するにはそれぞれのサーバーで設定が必要になります。まぁ、設定すればいいので問題にはならないですね。
- VPC以外への接続:DX経由やVPCエンドポイント経由、またインターネットゲートウェイ経由でのアクセスも可能です。VPC内だけではなく、他の用途にも使えそうです。
以上、考察コーナーでした。
やってみた
やること
では早速試してみたいと思います! 今回は、VPC上にEC2を立てて、Client VPN経由でSSHしてみたいと思います!
相互認証用のキーの準備
Client VPNではAD連携または相互認証(クライアント証明書)を選択可能です。また、AD連携+相互認証も可能です。 今回は、Getting Startedに従って相互認証を試してみます。
まずは、クライアント証明書とキーを用意しましょう。
OpenVPNの環境を準備します。
git clone https://github.com/OpenVPN/easy-rsa.git cd easy-rsa/easyrsa3 ./easyrsa init-pki
認証機関 (CA) を構築します。
./easyrsa build-ca nopass Common Name (eg: your user, host, or server name) [Easy-RSA CA]:chiba.com
サーバ証明書とクライアント証明書を作成します。
./easyrsa build-server-full server nopass ./easyrsa build-client-full client1.domain.tld nopass
作成したサーバ証明書、クライアント証明書、キーを取集します。
mkdir /tmp/chiba-key/ cp pki/ca.crt /tmp/chiba-key/ cp pki/issued/server.crt /tmp/chiba-key/ cp pki/private/server.key /tmp/chiba-key/ cp pki/issued/client1.domain.tld.crt /tmp/chiba-key/ cp pki/private/client1.domain.tld.key /tmp/chiba-key/ cd /tmp/chiba-key/
作成したキーはこんな感じです。
ls -l total 56 -rw------- 1 chiba.jun wheel 1164 5 21 14:57 ca.crt -rw------- 1 chiba.jun wheel 4452 5 21 14:57 client1.domain.tld.crt -rw------- 1 chiba.jun wheel 1704 5 21 14:57 client1.domain.tld.key -rw------- 1 chiba.jun wheel 4539 5 21 14:57 server.crt -rw------- 1 chiba.jun wheel 1704 5 21 14:57 server.key
キーをACMに登録する
次にACMへ作成したキーを登録します。サーバー証明書とクライアント証明書をそれぞれ登録しましょう。
サーバー証明書
- 証明書本文:server.crt
- 証明書のプライベートキ:server.key
- 証明書チェーン:ca.crt
クライアント証明書
- 証明書本文:client1.domain.tld.crt
- 証明書のプライベートキ:client1.domain.tld.key
- 証明書チェーン:ca.cr
それぞれインポートしました。
Client VPNエンドポイントを作成
Client VPNエンドポイントを作成して、VPCにアタッチしてみます。 VPCの画面よりClient VPNエンドポイントを作成しましょう。
それぞれ入力しましょう。
*「クライアント IPv4 CIDR」は接続するクライアントに割り当てされるIPなので、VPCのCIDRと重複しないようにしましょう
*DNSサーバー1と2はVPN接続後に利用するDNSサーバーです。オプションなので未指定でもokです。VPC DNS サーバーまたはカスタムDNSサーバーを指定できます。
最後にVPNへ関連付けを行います。「Associate」から関連付けを行います。
クライアントアクセスを承認する
VPCへクライアントアクセスをさせるためには、「承認」を作成します。どのユーザーが、どのVPCセグメントに接続できるかを設定します。 今回は、VPCのCIDRに対して全ユーザーがアクセスできるような設定を入れました。
承認タブから設定を追加しましょう。
VPN接続してみる
設定は完了したので接続してみましょう! 接続するために、Client VPNエンドポイントの設定ファイルをダウンロードします。
エディタにてダウンロードしたファイルを開き、末尾に追加します。
cert /tmp/chiba-key/client1.domain.tld.crt key /tmp/chiba-key/client1.domain.tld.key
私の環境にVPNクライアントであるTunnelblickがインストールされてたので、こちらを利用し、ファイルをインポートしました。 インポートされた設定を利用し、VPN接続できました!
VPC上に立てたEC2のプライベートIPに対してSSHしてみました。
$ ssh -i ~/.ssh/chiba-key.pem ec2-user@172.32.2.81 The authenticity of host '172.32.2.81 (172.32.2.81)' can't be established. ECDSA key fingerprint is SHA256: Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '172.32.2.81' (ECDSA) to the list of known hosts. __| __|_ ) _| ( / Amazon Linux 2 AMI ___|\___|___| https://aws.amazon.com/amazon-linux-2/
プライベートIPに接続できました!!!!!
さいごに
VPCへClient VPNを経由して東京リージョンのEC2へ接続できることを確認しました。 アーキテクチャ的には、ワンチャン踏み台サーバをなくすこともできるかもしれません。また、Client VPNを通してS3やピアリング先、DX先まで接続することもできるので、AWS環境への接続管理にも役立ちそうな機能ですね。