AWS Client VPNを利用して、リモート接続環境を構築してみる


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

在宅勤務に移行したいけれど、情報漏洩や導入に関するオペレーションの複雑さが心配という方は多いのではないでしょうか。

 

先日の日経新聞にこんな記事がありました。

 

病院の情報システムがランサムウエアに感染し、電子カルテが暗号化されて閲覧できず、診療停止に追い込まれる被害は後を絶たない。情報システムとインターネットを安全に接続するためのVPN(仮想私設網)機器の欠陥を突かれ、ハッカーに侵入される事例が多い。(「病院サイバー対策で支援組織 厚労省主導、日本医師会と」より)

 

AWSはクラウドセキュリティを最優先事項としています。今回紹介する“AWS Client VPN(クライアントVPN)”は、AWSリソースやオンプレミスネットワーク内のリソースに安全にアクセスでき、かつ利用量に応じて請求料金が変化する従量課金型のサービスです。

 

テレワークの検討やネットワークのセキュリティ強化のためにVPNサービスを試してみたい方には、“AWS Client VPN(クライアントVPN)”がぴったりかもしれません。

 

この記事では、“AWS Client VPN(クライアントVPN)”の簡単な紹介と、“AWS Client VPN”を実際に使って、ローカルPCからVPC内にあるAWSリソースにアクセスするハンズオンを行います。

 

この記事はこんな方におすすめ

  • Client VPNについて知りたい方
  • VPNサービス導入で迷っている方

 

 

AWS Client VPNを利用して、リモート接続環境を構築

■AWS Client VPNとは

saitou-handson-clientvpn-icon

 

AWS Client VPN は、AWSリソースやオンプレミスネットワーク内のリソースに安全にアクセスできるようにする、クライアントベースのマネージドVPNサービスです。クライアントVPNを使用すると、OpenVPNベースのVPNクライアントを使用して、どこからでもリソースにアクセスできます。

 

AWS Client VPNを利用することで、外出先や自宅から、VPC内のAWSリソースと直接データのやり取りができるようになるということですね。

 

 

VPNとは?

さきほどから“VPN”というフレーズが出てきていますが、“VPN”とは何でしょうか。

 

VPNとはそもそも”Virtual Private Network”の略称で、日本語にすると「仮想専用通信網」を意味します。VPNでインターネットに接続することをVPN接続と言いますが、この場合、専用ネットワークとは言いつつも物理的な専用回線を用いるのではありません。
 
「仮想」専用通信網というように、共用の回線を諸々の技術によって仮想的に独立した専用回線であるかのように扱うのがVPN接続なのです。「VPN接続とは?仕組みや方法をわかりやすく解説」より

 

VPNを利用することで、セキュアな通信を実現できるということですね。

 

 

AWS Client VPNのメリットは?

“VPNサービス”と検索すると、たくさんのVPNサービスがヒットします。AWSのVPNサービス“AWS Client VPN”のメリットは何でしょうか。

 

  • マネージド型サービス
  • 高可用性と高伸縮性
  • 認証サービスを幅広くサポート
  • 接続ルールの詳細な設定が可能
  • ログ取得による監視のしやすさ

 

具体的には、

 

  • 接続デバイスがVPC内リソースに直接アクセスできる
  • 既存のデバイスで利用可能なので、新たなデスクトップ環境を必要としない
  • アプリケーションの準備も最低限
  • VPC内にSSHアクセス用の踏み台などが不要になる
  • 社内ネットワークとVPCが接続済みであれば、社内環境にもアクセスが可能

 

 

AWS Client VPNのユースケース

AWS Client VPNのユースケースは、以下の状況が考えられます。(AWS公式ドキュメントより)

 

  • VPCへのアクセス
  • ピア接続先VPCへのアクセス
  • オンプレミスのネットワークへのアクセス
  • インターネットへのアクセス
  • クライアント間のアクセス
  • ネットワークへのアクセスを制限する

 

今回実施するハンズオンでは、構築後に“VPCへのアクセス”と“インターネットへのアクセス”をテストしてみます。それでは、AWS Client VPNを使ってみましょう。

 

 

■構築例紹介

saitou-handson-clientvpn構築図

 

“AWS Client VPN(クライアントVPN)”を実際に使ってローカルPCからAWSリソースにアクセスする仕組みは、上の画像の構築図をもとに作成していきます。構築の概要は以下の通りです。

 

 

~使用するAWSサービス~

 

  • Amazon CloudWatch
  • Amazon EC2
  • AWS Certificate Manager
  • AWS Client VPN

 

~仕組みの流れ~

 

クライアントPCから、クライアントVPNエンドポイントに接続します。その際にACMに登録した証明書で認証し、ENIのIPアドレスをNATとして、疎通確認用EC2にアクセスします。アクセスログはCloudWatchログに記録されるようにします。

 

それでは、構築していきます。

 

■VPC作成

VPC作成は設定値と画像で流れだけ載せます。設定値は以下の通りです。

 

項目 設定値
作成するリソース VPCのみ
名前タグの自動生成 saitou-handson-VPC(任意)
IPv4 CIDR ブロック 198.19.0.0/16

 

 

次にサブネットを作成します。設定値は以下の通りです。

 

項目 設定値
VPC ID 作成したVPC
サブネット名1 saitou-handson-subnet1(任意)
アベイラビリティーゾーン ap-northeast-1a
IPv4 CIDR ブロック 198.19.1.0/24
サブネット名2 saitou-handson-subnet255(任意)
アベイラビリティーゾーン ap-northeast-1a
IPv4 CIDR ブロック 198.19.255.0/24

 

 

saitou-handson-clientvpn-subnet

saitou-handson-clientvpn-subnet

saitou-handson-clientvpn-subnet

 

 

■EC2作成

EC2インスタンスは疎通確認用です。EC2作成は設定値と画像で作成の流れだけ載せます。

 

設定値は以下の通りです。

 

項目 設定値
名前 saitou-handson-EC2-server(任意)
AMI Amazon Linux 2
アーキテクチャ 64ビットx86
インスタンスタイプ t2.micro
キーペア 任意
VPC 作成したVPC
サブネット handson-subnet1(198.19.1.0/24)
パブリック IP の自動割り当て 無効化
ファイアウォール セキュリティグループを作成する
セキュリティグループ名 saitou-handson-SG
セキュリティグループ名 saitou-handson-SG
インバウンドルール
タイプ すべてのICMP-IPv4
ソース 198.19.0.0/16

 

 

saitou-handson-clientvpn-EC2

saitou-handson-clientvpn-EC2

saitou-handson-clientvpn-EC2

 

「起動」をクリックし、EC2インスタンスの準備が完了です。

 

 

■CloudWatchロググループ作成

VPN接続をしたクライアントのアクセス情報を、CloudWatchログに保管します。設定値は以下の通りです。

 

項目 設定値
ロググループ名 /saitou-aws/vpn(任意)
ログストリーム名 connection-log

 

 

CloudWatchのコンソール画面で、「ロググループ」をクリックし、「ロググループを作成」を押してください。

 

saitou-handson-clientvpn-CloudWatch

 

↓入力が完了したら、「作成」をクリックしてください。

 

saitou-handson-clientvpn-CloudWatch

 

 

作成したロググループ“/saitou-aws/vpn”を押し、詳細画面に行きます。

 

saitou-handson-clientvpn-CloudWatch

 

↓「ログストリーム」から「ログストリームを作成」を押してください。

 

saitou-handson-clientvpn-CloudWatch

 

↓ログストリーム名を入力し、「Create」をクリックします。

 

saitou-handson-clientvpn-CloudWatch

 

ロググループ作成の作成は以上です。

 

 

■証明書の準備

VPN接続をする際に必要な証明書を作成し、ACMにインポートします。

 

証明書を作成する方法はいくつかありますが、今回はCloudShellを使い、証明書とキーを作成していきます。

 

 

AWSサービス検索画面で「CloudShell」と調べ、クリックしてください。※CloudShellは利用できるリージョンが限られています。サポート対象リージョンはこちら

 

saitou-handson-clientvpn-cloudshell

 

↓CloudShellに関する簡単な説明が表示されます。「Close」をクリックしてください。

 

saitou-handson-clientvpn-cloudshell

 

↓起動まで数分かかります。

 

saitou-handson-clientvpn-cloudshell

 

 

CloudShellが起動しましたら、まずはOpenSSLをインストールします。以下のコマンドを実行してください。

 

sudo yum -y install openssl

 

ここからの手順は公式ドキュメントに“相互認証”に関しての手順がありますので、公式の手順に則って作業していきます。詳しい手順はこちら

 
1.OpenVPN easy-rsaリポジトリのクローンをローカルコンピュータに作成して、easy-rsa/easyrsa3フォルダに移動します。

git clone https://github.com/OpenVPN/easy-rsa.git

 

cd easy-rsa/easyrsa3

 
2.新しいPKI環境を初期化します。

./easyrsa init-pki

 
3.新しい認証局 (CA) を構築するには、このコマンドを実行し、プロンプトに従います。

./easyrsa build-ca nopass

 
4.サーバー証明書とキーを生成します。「Confirm request details:」はyesと入力してください。

./easyrsa build-server-full server nopass

 
5.クライアント証明書とキーを生成します。「Confirm request details:」はyesと入力してください。

./easyrsa build-client-full client1.domain.tld nopass

 
6.サーバー証明書とキー、およびクライアント証明書とキーをカスタムフォルダにコピーしてから、カスタムフォルダに移動します。証明書とキーをコピーする前に、mkdir コマンドを使用してカスタムフォルダを作成します。次の例では、ホームディレクトリにカスタムフォルダを作成します。

mkdir ~/custom_folder/
cp pki/ca.crt ~/custom_folder/
cp pki/issued/server.crt ~/custom_folder/
cp pki/private/server.key ~/custom_folder/
cp pki/issued/client1.domain.tld.crt ~/custom_folder
cp pki/private/client1.domain.tld.key ~/custom_folder/
cd ~/custom_folder/

 

 

↓5つのファイルをコピーしました。上から順に、認証局の証明書、クライアント用の証明書、クライアント用の秘密鍵、サーバ用の証明書、サーバ用の秘密鍵です。

 

[cloudshell-user@ip-10-0-60-4 custom_folder]$ ls -l
total 28
-rw------- 1 cloudshell-user cloudshell-user 1172 Nov 28 05:17 ca.crt
-rw------- 1 cloudshell-user cloudshell-user 4460 Nov 28 05:17 client1.domain.tld.crt
-rw------- 1 cloudshell-user cloudshell-user 1704 Nov 28 05:17 client1.domain.tld.key
-rw------- 1 cloudshell-user cloudshell-user 4552 Nov 28 05:17 server.crt
-rw------- 1 cloudshell-user cloudshell-user 1704 Nov 28 05:17 server.key
[cloudshell-user@ip-10-0-60-4 custom_folder]$ 

 

 

最後に証明書やキーをACMにアップロードします。

 
7.サーバー証明書とキー、およびクライアント証明書とキーをACMにアップロードします。必ずクライアントVPNエンドポイントを作成する予定のリージョンと同じリージョンにアップロードしてください

aws acm import-certificate --certificate fileb://server.crt --private-key fileb://server.key --certificate-chain fileb://ca.crt

 

aws acm import-certificate --certificate fileb://client1.domain.tld.crt --private-key fileb://client1.domain.tld.key --certificate-chain fileb://ca.crt

 

 

マネコンでACMのコンソール画面に行き、ACMに証明書がインポートされているか確認してみましょう。

 

saitou-handson-clientvpn-acm

 

 

次にVPN接続ツールを設定するときにクライアント証明書とキーを使いますので、作成したファイルをダウンロードしておきます。ダウンロードするファイルは、“client1.domain.tld.crt”と“client1.domain.tld.key”です。

 

 

まずはCloudShell画面に戻り、右上の「Actions」からファイルをダウンロードしましょう。

 

saitou-handson-clientvpn-cloudshell

 

↓「Download file」をクリックします。

 

saitou-handson-clientvpn-cloudshell

 

↓一つ目のファイルの“client1.domain.tld.crt”をダウンロードします。以下のパスを入力し、「Download」をクリックしください。

 

~/custom_folder/client1.domain.tld.crt

 

saitou-handson-clientvpn-cloudshell

 

↓次に、“client1.domain.tld.key”をダウンロードします。以下のパスを入力し、「Download」をクリックしください。

 

~/custom_folder/client1.domain.tld.key

 

saitou-handson-clientvpn-cloudshell

 

 

自身のPCにファイルがダウンロードされているか、確認してみましょう。

 

saitou-handson-clientvpn-file

 

ファイルを確認することができました。証明書の準備は以上です。

 

 

■VPNエンドポイント作成

クライアントVPNエンドポイントを作成します。設定値は以下の通りです。

 

項目 設定値
名前タグ saitou-handson-VPN(任意)
クライアントIPv4CIDR 100.64.0.0/22
サーバー証明書 ARN server
認証オプション 相互認証を使用
クライアント接続のログの詳細を有効化
CloudWatchLogsのロググループ名: /saitou-aws/vpn
CloudWatchLogsのログストリーム名 connection-log
スプリットトンネルを有効化

 

 

スプリットトンネルを有効にしましょう。ネットワークアクセスがVPN経由になるため、インターネットに抜ける設定をしていない場合、マネコンの操作やサイト閲覧ができなくなります。

 

 

VPCコンソール画面の左ペインから「クライアントVPNエンドポイント」をクリックしてください。

 

saitou-handson-clientvpn-cvpn

saitou-handson-clientvpn-cvpn

saitou-handson-clientvpn-cvpn

saitou-handson-clientvpn-cvpn

saitou-handson-clientvpn-cvpn

 

↓入力が完了したら、「クライアントVPNエンドポイントを作成」を押してください。

 

saitou-handson-clientvpn-cvpn

 

 

作成したクライアントVPNエンドポイントの「ターゲットネットワークの関連付け」タブから、「ターゲットネットワークを関連付ける」をクリックします。

 

saitou-handson-clientvpn-cvpn

 

↓VPCは作成したVPC、サブネットは“subnet255”を選択し、「ターゲットネットワークを関連付ける」を押してください。

 

saitou-handson-clientvpn-cvpn

 

 

次に“承認ルール”を設定します。VPNに接続した後、どのネットワークに接続するかです。

 

「承認ルール」タブから「認証ルールを追加」をクリックします。設定値は以下の通りです。

 

項目 設定値
アクセスを有効にする送信先ネットワーク 0.0.0.0/0
アクセス権を以下に付与する アクセス権をすべてのユーザーに許可する

 

 

saitou-handson-clientvpn-cvpn

saitou-handson-clientvpn-cvpn

 

 

さいごに、「クライアント設定をダウンロード」から設定ファイルをダウンロードしましょう。AWS Client VPNソフトウェアを利用する際に使うテンプレートファイルです。

 

saitou-handson-clientvpn-cvpn

saitou-handson-clientvpn-cvpn

 

クライアントVPNエンドポイントの作成は以上です。

 

 

■VPN接続ツール設定

構築の最後の工程です。VPN接続ツールをインストールし、実際にVPN接続をします。

 

接続ツールを以下のURLからダウンロードしましょう。

 

https://aws.amazon.com/jp/vpn/client-vpn-download/

 

saitou-handson-clientvpn-tool

saitou-handson-clientvpn-tool

saitou-handson-clientvpn-tool

saitou-handson-clientvpn-tool

 

 

インストールが完了しましたら、接続ツールに追加するファイルを編集します。ここまでの作業で以下の3つのファイルをダウンロードしているかと思います。

 

  • client1.domain.tld.crt(証明書作成時)
  • client1.domain.tld.key(証明書作成時)
  • downloaded-client-config.ovpn(エンドポイント作成時)

 

 

テキストエディタで上記3つのファイルを開き、「downloaded-client-config.ovpn」の一番下の行に以下の記述を追記します。

<cert>
</cert>

 

saitou-handson-clientvpn-tool

 

↓つぎに「client1.domain.tld.crt」ファイルから、

 

-----BEGIN CERTIFICATE-----
省略
-----END CERTIFICATE-----

 

の部分をコピーし、「downloaded-client-config.ovpn」ファイルの

 

<cert>
</cert>

 

の間の行にペーストします。

 

saitou-handson-clientvpn-tool

 

さらに、以下の記述を「downloaded-client-config.ovpn」ファイルの</cert>の下の行に追記します。

 

<key>
</key>

 

saitou-handson-clientvpn-tool

 

「client1.domain.tld.key」ファイルから、

 

-----BEGIN CERTIFICATE-----
省略
-----END CERTIFICATE-----

 

の部分をコピーし、<key></key>の間の行にペーストします。

 

saitou-handson-clientvpn-tool

 

貼り付けが完了しましたら、上書き保存します。

 

 

それでは、接続ツールを使ってVPN接続してみましょう。AWS VPN Clientアプリを起動し、「ファイル」⇒「プロファイルの管理」を押します。

 

saitou-handson-clientvpn-tool

saitou-handson-clientvpn-tool

saitou-handson-clientvpn-tool

 

↓「プロファイルを追加」を押します。

 

saitou-handson-clientvpn-tool

 

↓「downloaded-client-config.ovpn」を選択します。

 

saitou-handson-clientvpn-tool

 

↓表示名はsaitou-handson-vpn(任意)、VPN設定ファイルはdownloaded-client-config.ovpnと設定します。

 

saitou-handson-clientvpn-tool

 

↓接続状況を詳しく見るため、「詳細を表示」を有効化しておきましょう。

 

saitou-handson-clientvpn-tool

saitou-handson-clientvpn-tool

 

↓「接続」ボタンを押すと、“接続済み”と表示されたかと思います。

 

saitou-handson-clientvpn-tool

saitou-handson-clientvpn-tool

saitou-handson-clientvpn-tool

 

VPN接続ツールで接続ができました。構築は以上です。

 

 

■接続確認

saitou-handson-clientvpn-test1

 

接続・疎通確認を行います。自身のPCからVPC内のEC2にpingを打ってみます。

 

PowerShellを起動し、EC2のプライベートIPv4アドレスにpingを打ってみましょう。

 

ping EC2プライベートIPv4アドレス

 

saitou-handson-clientvpn-test

 

PCがVPNエンドポイントに対しVPNを張ることができ、EC2に対し接続が可能になっていることがわかります。

 

マネコンでも接続状況を確認してみます。クライアントVPNエンドポイントの詳細画面で、接続タブから確認できます。

 

saitou-handson-clientvpn-test

 

↓ステータスがActiveになっていますね。

 

saitou-handson-clientvpn-test

 

 

CloudWatchログで接続ログも確認してみましょう。※最初のログが確認できるまでに20分くらいかかりました。

 

saitou-handson-clientvpn-test

saitou-handson-clientvpn-test

 

接続ログでは接続が成功しているかや、クライアントCIDR、デバイスがwindowsだったり、接続ポート番号などが確認できます。

 

VPCへのアクセスのテストは以上です。

 

 

まとめ:AWS Client VPNを利用して、リモート接続環境を構築してみる

社内ネットワークのセキュリティ強化や在宅勤務への移行でVPNサービスを導入したい場合、選択肢がたくさんあります。

 

“AWS Client VPN(クライアントVPN)”は、AWSリソースやオンプレミスネットワーク内のリソースに安全にアクセスでき、かつ利用量に応じて請求料金が変化する従量課金型のサービスです。

 

テレワークの検討やネットワークのセキュリティ強化のためにVPNサービスを試してみたい方には、“AWS Client VPN(クライアントVPN)”がぴったりかもしれませんね。

 

もしAWSへの移行に関してお悩みでしたら、ぜひ一度協栄情報にご相談ください。くわしくはこちら

 

 

参考リンク:AWS Hands-on for Beginners
 

 

↓ほかの協栄情報メンバーもAWS Client VPNに関する記事を公開しています。ぜひ参考にしてみてください。

 

■AWS Client VPN で VPC を経由してインターネットへアクセスしてみました。(小林 剛)
https://cloud5.jp/internet-access-aws-client-vpn/

 

■AWS ClientVpnの構築手順(小林 剛)
https://cloud5.jp/aws-client-vpn/

 

Last modified: 2022-12-02

Author