Blogical

AWS/Salesforceを中心に様々な情報を配信していきます(/・ω・)/

プロキシサーバの代わりにEIP付きClientVPNを導入してみた

こんにちは、ロジカルアーツの井川です。

今年は夏があっという間に終わってしまいましたね。朝晩も急に冷えてきて、最近風邪気味です。

はじめに

会社で固定IPアドレスを持っていないけど、お客さんのサイトにアクセスするのに固定IPアドレスが必要になってしまった!急にそんなこと言われても・・・その気持ちわかります。こういうケースでは、プロキシサーバVPNを使用するのが一般的ですよね。弊社でもプロキシサーバを運用しているんですが、運用者が使用するのに管理者に使用開始と停止を申請しなければなりませんでした。業務効率化を考えたときにあまり綺麗な運用方法じゃないなぁと思っておりました。そんなときにAWSより新しくローンチされたClientVPNを知り、弊社では6月からClientVPNを導入しました。

今日はそもそもプロキシサーバやVPNとは?という方への用語解説から、新たなClientVPNまでをご紹介しようと思います。

プロキシサーバとは?VPNとは?

f:id:logicalarts:20190924101206p:plain
出典: プロキシサーバーとは | 機能・仕組み・設定方法を解説【Chrome/IE】 - サーバー管理ツール | ボクシルマガジン

まずは、プロキシサーバやVPNとはどういったものなのか、簡単に用語の解説をします。既にご存じの方は飛ばしていただければと思います。

プロキシサーバとは?

プロキシ(Proxy)とは英語で代理を意味し、PC環境から何らかの理由で直接アクセスができないWebサイト等に対して”代理”でアクセスしてくれる仕組みです。

VPNとは?

VPNは正式名称が”Virtual Private Network”と言い、直訳すると仮想専用線を意味します。 その名の通り、インターネット上で安全にデータ通信をするために暗号化トンネルを用意してくれる仕組みです。

プロキシサーバとVPNの違い

2つの最も大きな違いは通信プロトコルによるところでしょう。

  • プロキシサーバ: HTTPリクエストのみ対応
  • VPN: 暗号化通信に対応

プロキシサーバはHTTP通信を行うことによって、VPNよりも通信が高速なケースがほとんどです。 デメリットは通信の暗号化をしないのでセキュアな接続は担保することができません。

VPNは暗号化通信に対応している分、セキュリティ対策とプライバシー保護に向いています。 デメリットは無料VPNは通信が遅かったり、有料サービスを利用する必要があったりします。

どういった用途で使われるのかによって、使い分けが必要ですね。

ClientVPNとは?

ClientVPNとは、AWSで作成したVPCリソース上にクライアント側と接続するためのエンドポイントを提供するサービスです。サーバ側はAWSが提供してくれるため、セットアップする必要はありません。運用者は自身のクライアント端末よりAWSリソースとのセキュアな接続を実現できます。

導入した背景

冒頭でも触れたのですが、弊社ではAWSのEC2を用いプロキシサーバを運用しています。 といっても常に使うわけではなく、必要にならないときはインスタンスはTerminateしています。

各部署の利用頻度
  • 技術部: プロジェクトで必要になった場合は数か月間(数台が同時接続します)
  • 管理部門: 月に数回程度

弊社のAWSアカウント管理者はAWSチームなんですが、運用者はプロキシサーバを使いたいときは、セキュリティの関係から都度AWSチームに連絡しなければなりませんでした。EC2の起動・停止を行うためです。

技術部は毎日、管理部門でも月に数回とは言え、毎度となると心理的にはすごく負担ですよね。そこを何とかできないかなというのが、今回ClientVPNの導入検証を始めたきっかけです。

やってみる

前置きが長くなりましたが、それでは実際にやってみましょう。

ClientVPNのアーキテクチャ

f:id:logicalarts:20190924113825p:plain こちらがネットワーク構成図です。なんだか上のプロキシサーバよりも少し複雑に見えますね。

前提条件

  • Windows10 Pro 64bit/Amazon Linux2 EC2インスタンス環境で検証する
  • AWS CLIはインストール済み
  • 接続に用いるVPCとサブネット、セキュリティグループを準備しておく
  • セキュリティグループの開放ポートは下記の通り
タイプ プロトコル ポート範囲 ソース
HTTPS TCP 443 カスタム 0.0.0.0/0

自己署名証明書の発行とACMへ登録

私と同環境で検証するのであれば、EC2へSSHした状態で下記を実行ください。

自己署名証明書の発行準備
$ git clone https://github.com/OpenVPN/easy-rsa.git
$ cd easy-rsa/easyrsa3
$ ./easyrsa init-pki
$ ./easyrsa build-ca nopass
自己署名証明書発行
$ ./easyrsa build-server-full server nopass
$ ./easyrsa build-client-full client1.domain.tld nopass
AWS CLIを使ってACMへ登録

aws configureを入力し、アクセスキーとシークレットアクセスキーでログインを行う必要があります。

$ aws acm import-certificate --certificate file://pki/issued/server.crt --private-key file://pki/private/server.key --certificate-chain file://pki/ca.crt --region ap-northeast-1
$ aws acm import-certificate --certificate file://pki/issued/client1.domain.tld.crt --private-key file://pki/private/client1.domain.tld.key --certificate-chain file://pki/ca.crt --region ap-northeast-1

上記の工程が問題なく終わり、ACMのコンソール画面に下記のように表示されればここまでは完了です。 f:id:logicalarts:20190924131024p:plain

クライアントVPNエンドポイントの作成

続いて、ClientVPNのコンソール画面を開きましょう。(VPC→クライアントVPCエンドポイント)

”クライアントVPCエンドポイント作成”をクリックすると下記の画面が表示されると思います。 f:id:logicalarts:20190924134959p:plain

入力事項

以下は画像の通り入力したパラメータになります。自分の設定合うよう調整していただければと思います。

項目名 内容 
名前タグ ClientVpn
説明 ClientVpn
クライアント IPv4 CIDR 11.0.0.0/20
サーバー証明書 ARN arn:aws:acm:ap-northeast-1:831461333044:certificate/bd224480-5aee-4cb4-8486-xxxxxxxxxxxxxx
認証オプション 相互認証の使用にチェック
クライアント証明書 ARN arn:aws:acm:ap-northeast-1:831461333044:certificate/72d483fc-cfba-4d5e-acc5-xxxxxxxxxxxxxx
接続ログ記録 いいえ
  • サーバー証明書ARNとクライアント証明書ARNはACMに登録したものをそれぞれ選択してください。
  • 接続ログ記録を保持したい場合は CloudWatch Logs上でロググループ、ログストリームを作成する必要があります。

各種設定

ターゲットVPCへの関連付け

f:id:logicalarts:20190924142406p:plain

作成されたエンドポイントを選択すると、下にタブが開きますので、画像のように関連付け→ Associate と進んでください。

  • 新たに画面が開いたら、予め準備しておいた任意のVPCとサブネットを選択してください。
セキュリティグループの適用

f:id:logicalarts:20190924144714p:plain

続いて、セキュリティグループの項目をクリックし、関連付けされたVPCを選択してからセキュリティグループの適用に進んでください。

  • 新たに画面が開いたら、VPN接続が可能なセキュリティグループを選択してください。
認証の設定

続いて、認証の設定を行います。認証を開き Authorize Ingress をクリックしてください。

f:id:logicalarts:20190924145512p:plain

認証ルールの追加という画面が出てきたら、アクセスを有効にする送信先ネットワーク先として0.0.0.0/0を入力。 その他の項目は変更なしで構いません。

ルートテーブルの作成

続いて、ルートテーブルを選択し、Create Routeに進んでください。

f:id:logicalarts:20190925130835p:plain

上記の画面が出たら、送信先0.0.0.0/0とし、先ほど関連付けで使用したサブネットを選択しましょう。

  • この時のサブネットは必ず NAT-Gateway がルーティングされているものにしましょう。
  • 固定IPアドレスを使用したい場合はこの設定が必須となります。
configファイルのダウンロード

設定が完了したら、反映された configファイルをダウンロードしていきましょう!下記から行えます。 f:id:logicalarts:20190924151442p:plain

クライアントソフトウェアのインストール

まず、OpenVPNをインストールします。

インストールが完了したら右下のインジケーターを確認してください。 f:id:logicalarts:20190924151801p:plain

パソコンのマークが表示されてればインストールは完了です。

ルートディレクトリは、変更していなければ下記になると思います。

C:\Program Files\OpenVPN

クライアントソフトウェアの設定

configファイルを保存

鍵専用のディレクトリを作成し、今まで発行した証明書や configファイルを下記の通りまとめちゃいましょう。ここではkeyディレクトリを OpenVPN 直下に作成しています。

key/client1.domain.tld.crt
key/client1.domain.tld.key
key/downloaded-client-config.ovpn
configファイルの設定変更

key/downloaded-client-config.ovpnを開き、下記のように変更ください。

f:id:logicalarts:20190924153847p:plain

remote cvpn-endpoint-xxxxxxxxxxxxxx.prod.clientvpn.ap-northeast-1.amazonaws.com 443
configファイルの選択

先ほどの OpenVPN のインジケーターを右クリックして、設定画面を開いてください。

f:id:logicalarts:20190924154219p:plain

Advanced→設定ファイルより、先ほど移動したkey/downloaded-client-config.ovpnを選択してください。

そして、インジケーターの OpenVPN のアイコンを右クリックして「接続」を押し、下記のように表示されれば完了です。

f:id:logicalarts:20190924154514p:plain

この接続は ClientVPN のコンソール画面からも確認できます。

成果と今後の課題

ClientVPNを導入した弊社管理部門の利用料金(例)

週1回2時間×5週×2端末=20h 

(0.05×20h)+(0.15×5週×2端末)=2.5USD

ClientVPNを導入することによって、EC2を使ってる時よりも無駄なコストを排除でき、運用者が好きな時にVPNを立ち上げて使用することができるようになりました。

ただ、料金面の課題がまだ残っています。ClientVPNに接続したまま長時間放置すると時間課金されてしまいます。忘れないように各自で管理することが必要です。

AWS SIMPLE MONTHLY CALCULATORを元に計算した

1か月間(1日24時間)止めずに稼働した場合の料金

★Client VPN

(0.05×24時間×30日)+0.15=40.5USD ※接続端末1台の時

★EC2インスタンス

概算13.56USD

EC2 t3.micro×1 EBS 30GB Snapshot/データ転送量含まず

また、上記は1か月使用した際のプロキシサーバ(EC2)とClientVPNの料金なのですが、長時間の利用や多数の端末を使用する場合、ClientVPNのほうがどうしても高くなってしまいます。手軽に使える反面、費用がかかってしまっては元も子もないですよね・・・・。

こういった問題は今後の課題としたいと思います。

参考サイト

  1. クライアント VPN の使用開始 - AWS Client VPN

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

  3. AWS Client VPNがTokyoに来た! | 概要と固定IPの設定方法を解説 - SMARTCAMP Engineer Blog

  4. AWS Clinet VPNを分かりやすく解説してみる – サーバーワークスエンジニアブログ

  5. プロキシ、VPN、トーア 違いを理解しましょう