話題の記事

[AWS]踏み台をワンチャンなくせる!?VPC接続にClient VPNを使ってみよう

クライアントVPNを利用することで、VPCへクライアント端末から接続することができるようになります。EC2に限らずS3やDX経由でオンプレまで接続できます。 そして、クライアント証明書認証に加えて、AD連携によるユーザー認証も可能です。このユーザーは、どこのIPセグメントにアクセスできるかみたいな制御ができます。これは、ワンチャン踏み台なくせるのでは?と思ったので、クライアントVPNに全振りした場合のコスト感や懸念についても考察してみます。 また、実際に接続するところまでやってみました。
2019.05.22

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

コンニチハ、千葉です。

はじめに

VPCにはDirectConnect(閉域網)をはじめ、インターネットVPNでのセキュアな接続もサポートされています。 VPCで利用できるインターネットVPN接続方式は複数あります。

  1. AWS Site-to-Site VPN
  2. AWS Client VPN
  3. AWS VPN CloudHub
  4. サードパーティー製ソフトウェア VPN アプライアンス

参考:https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/vpn-connections.html

今回は、その中でもClient VPNを試してみます。なぜなら、Client VPNが東京リージョンに対応したからです!記念です! ちなみにClient VPNを利用すると、端末ごとにVPN接続ができるので、特定の端末だけアクセスしたい場合なのど利用が可能です。認証はAD連携もできます。またクライアント証明書(相互認証)にも対応しています。

考察

AWS Client VPN の詳細 参考: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環境への接続管理にも役立ちそうな機能ですね。

参考