AWS Client VPNを試してみる
AWS Client VPNってもっと注目されても良いですよね?(唐突) と思って本記事を書きました。
テレワークが一般的になるなか、AWSのVDIサービスであるWorkSpacesが注目されていますが、AWSのVPC環境へプライベート接続ができるClient VPNもテレワーク時代に活用できると思います。 既にClient VPNも注目されているかもしれませんが、私自身試したことがなかったため、接続までの手順を本記事にまとめてみます。
Client VPNの何が嬉しいのか
ネットワーク機器の設定が不要で、より簡単にVPN接続ができる点がClient VPNの利点かと思います。
Client VPNが登場するまでは、AWSにVPN接続をする場合はAWS Site-to-Site VPNを使用する必要がありました。これを使用する場合、接続元にルーター(ソフトウェアでもOK)を用意して接続設定をする必要がありました。設定サンプルはAWSからダウンロードできますが、ルーター設定って、ネットワークの設定をしたことが無い人にとってはちょっとハードルが高いですよね?ルーター機器の購入費、保守費もかかります。 (私個人の印象です)
じゃあClient VPNはどこまで簡単なのか、とうことで試していきたいと思います。
結論からいうと、AWS Site-to-Site VPNよりは簡単ですが、それなりに作業量はありました。ただ接続元のPCとAWS環境さえあれば気軽に試せる点は良いですね。
VPN接続を試してみる
公式ドキュメントの手順を参考に進めていきます。
0.事前準備
以下を用意しておきます。
- 接続元のクライアントPC
私の場合(本記事)はWindows10のPCを使用します。
- 接続先のVPC
以下のようなプライベートサブネットのみのVPCを用意します。VPCのCIDRは10.10.0.0/16で作成しています。
クライアントPCからプライベートサブネット内のEC2にSSH接続ができるというところをゴールにします。
1.証明書の作成
VPN接続の認証は Active Directoryによるアカウント管理, サーバ証明書・クライアント証明書による相互認証、その両方の3種から選択できますが、今回は証明書による相互認証で試していきます。
認証に必要な証明書を作成します。今回はAWS上のCloud9(Linuxサーバ)で作成していきます。
# Open VPNソースのダウンロード、ディレクトリ移動 $ git clone https://github.com/OpenVPN/easy-rsa.git $ cd easy-rsa/easyrsa3 # PKI環境の初期化 $ ./easyrsa init-pki # 認証機関 (CA) を構築 # Common Nameは任意の名前を入力します。 $ ./easyrsa build-ca nopass # サーバー証明書とキーを生成 $ ./easyrsa build-server-full server nopass # クライアント証明書とキーを生成 $ ./easyrsa build-client-full client1.domain.tld nopass # サーバー証明書とキー、およびクライアント証明書とキーをcert_folderフォルダにコピーして移動 $ mkdir ~/cert_folder/ $ cp pki/ca.crt ~/cert_folder/ $ cp pki/issued/server.crt ~/cert_folder/ $ cp pki/private/server.key ~/cert_folder/ $ cp pki/issued/client1.domain.tld.crt ~/cert_folder $ cp pki/private/client1.domain.tld.key ~/cert_folder/ $ cd ~/cert_folder/
これでサーバー証明書とクライアント証明書のペアが出来ました。この時点でちょっと面倒くさい感がありますが、基本的にはコマンドをそのまま実行すればOKです。
2.証明書をACMへインポート
作成した証明書をACM(AWS Certificate Manager)へインポートする必要があります。 AWS CLIでインポートする場合は以下のコマンドで実行できます。今回はCloud9からそのままインポートを実行します。 マネジメントコンソールからインポートも可能です。
# サーバー証明書とキーをインポート $ aws acm import-certificate --certificate fileb://server.crt --private-key fileb://server.key --certificate-chain fileb://ca.crt --region ap-northeast-1 # クライアント証明書とキーをインポート $ aws acm import-certificate --certificate fileb://client1.domain.tld.crt --private-key fileb://client1.domain.tld.key --certificate-chain fileb://ca.crt --region ap-northeast-1
ACMの画面で見ると以下のようにインポートされているのがわかります。
3.クライアント VPN エンドポイントの作成
VPCの画面からクライアントVPNエンドポイントを作成していきます。
以下のように入力していきます。
- 名前タグ:任意の名前を入力します。無しでも大丈夫です。
- クライアント IPv4 CIDR:PCが所属するネットワークのCIDRを指定します。VPCのCIDRとは別です。
- サーバー証明書 ARN:ACMにインポートしたサーバ証明書を指定します。
- 認証オプション:相互認証の使用を選択します。
- クライアント証明書 ARN:ACMにインポートしたクライアント証明書を指定します。
以降の設定は全てデフォルトのままエンドポイントを作成します。
4.サブネットの関連付け
作成したVPNエンドポイントをVPCのサブネットに関連付けしていきます。 エンドポイント一覧から作成したエンドポイントを選択し、関連付けをクリックします。
関連付けするVPCとサブネットを選択します。
しばらくすると関連付けが完了して使用可能な状態になります。
5.クライアントのネットワークへのアクセスを承認する
サブネットが存在する VPC へのアクセスをクライアントに承認するために、承認ルールを作成します。
アクセスを有効にする送信先ネットに接続するVPC全体のCIDRを指定して、「すべてのユーザーにアクセスを許可する」を選択します。
ここまでで、VPC側のVPNエンドポイントを設定できました。
6.クライアント VPN エンドポイントの設定ファイルをダウンロードする
ここからはクライアントPC側の設定です。
エンドポイントの画面から設定ファイルをダウンロードします。
ダウンロードしたファイルをテキストエディタで開き、以下の通り編集します。
6-1. クライアント証明書とキーの追記
末尾に以下の通り追記します。
<cert> ※最初に作成したclient1.domain.tld.crt(-----BEGIN CERTIFICATE-----~-----END CERTIFICATE-----)の内容※ </cert> <key> ※最初に作成したclient1.domain.tld.key(-----BEGIN PRIVATE KEY-----~-----END PRIVATE KEY-----)の内容※ </key>
6-2. VPN エンドポイントの DNS 名の先頭にランダムな文字列を追加
例. (AWS公式ドキュメント内容)
cvpn-endpoint-0102bc4c2eEXAMPLE.prod.clientvpn.us-west-2.amazonaws.com
↓
asdfa.cvpn-endpoint-0102bc4c2eEXAMPLE.prod.clientvpn.us-west-2.amazonaws.com
7. クライアントアプリケーションの入手、設定
OpenVPN ベースのクライアントアプリケーションであれば何でも良いのですが、AWS公式のクライアントアプリケーションがあるためそれを使用します。
こちらからダウンロードしてインストールします。 ダウンロードしたファイルをクリックして手順に従えば簡単にインストールできます。
アプリケーションを起動して、先ほどの設定ファイルをプロファイルとして登録していきます。
接続準備完了となったので、接続してみます。
接続済みとなればOKです。
PCのIPアドレスを確認してみると、「クライアント IPv4 CIDR」に設定したネットワークのIPアドレス「10.20.1.2」が設定されていることがわかります。
8. サーバー(EC2)接続
プライベートサブネットにEC2を作成し、クライアントPCからEC2のプライベートIPでSSH接続してみます。 ※EC2の作成手順は本記事では割愛します。
EC2のプライベートIPは、「10.10.11.188」なのでここにSSH接続します。
EC2のセキュリティグループは、VPC内からSSHを許可しておきます。 VPNエンドポイントが所属するサブネットから許可してあればOKです。(エンドポイント用のENIがVPC内にできる)
クライアントPCのTeratermで接続します。
Amazon Linuxのため、ユーザーにec2-userを指定し、EC2用に作成したキーペアを指定します。
接続できました!
まとめ、感想
いかがでしたでしょうか?最初から設定していくと多少手間はかかりますね。ネットワーク機器の設定ほどの手間は無いので、Site-to-Site VPN用のネットワーク環境整備が難しい場合や、限られた端末がアクセスする場合(本番接続端末など)に活用できるかなと思います。
VPN接続の場合、接続していない時のPCのセキュリティをどう守るかも観点になるので、そういった観点も踏まえて、より簡単にセキュアなネットワーク環境ができると良いですね。