【AWS】クライアントVPNエンドポイントを作成し、VPN接続する手順

AWS

「AWS上で、クライアントVPNエンドポイントを作成し、VPN接続する手順が知りたい」

このような疑問に対し、筆者がハンズオンで検証した手順をご紹介します。

※本記事は、AWS上で、クライアントVPNエンドポイントを作成し、VPN接続する手順の第二回目記事として作成しましたが、先日筆者が自己学習のために入会した AWS CloudTechという技術コミュニティの課題カリキュラムに沿ってリライトしております。

カリキュラムなどにご興味のあるかたは、以下リンクより公式ページにリンクできますので、内容をご覧になってみてはいかがでしょうか。
>> AWS CloudTech

なお、第一回では準備編として、AWS上でEC2のインスタンスをたてる手順をご紹介いたしました。
>> 【第1回】VPNエンドポイント構築方法/【AWS】EC2インスタンス開始方法/EC2の立て方

この記事で分かること

  • 本構成の要件、ゴール、構成図、投稿の背景、参考手順
  • AWSでEC2インスタンスをたてる方法(第1回の記事でご紹介)
  • AWS上にVPNクライアントエンドポイントを構築し、VPN接続する方法(本記事でご紹介)

関連記事

>> 【AWS】EC2インスタンス開始方法/EC2の立て方(第1回記事)
>> 【AWS】クライアントVPNエンドポイントを作成し、VPN接続する手順(本記事)

目指す構成

前回第一回の記事で作成した構成


今回の第二回で目指す構成

上記のように、同一EC2と同一のサブネットにVPNエンドポイントを設置し、ローカルPCにVPN Clientをインストールして、双方でVPN通信を実現します。

※構成に関する注意点
本来は、EC2を外部公開しないプライベートサブネットに配置するのがセオリーですが、本記事では、VPNエンドポイント構築を主眼にしておりますので、外部公開可能なパブリックサブネットにEC2を配置して検証しました。

筆者の環境

ローカル開発環境 Windows10からブラウザよりAWSマネジメントコンソールに接続して作業
EC2のOS Amazon Linux 2
SQLエンジン MySQL
SSH通信 TeraTermを利用
作図 dwarioのAWS19アイコンを利用

手順2 VPN接続するための手順

  • C2で認証局(CA)を構築し、サーバー証明書・キー、クライアント証明書・キーを発行
  • VPNエンドポイントを作成
  • クライアントPCでクライアントVPNをインストールし、EC2で生成したクライアント証明書・キーを用いで設定情報を作成
  • クライアントPCからAWSにVPN接続
  • ローカルIPを用いて、Terminal通信ソフトでEC2にログイン

EC2で認証局(CA)を構築し、サーバーとクライアントの証明書とキーを生成する。


EC2にgitをインストール

・下記コマンドを実行してyumを最新の状態にする
$ sudo yum update

・つづいて、下記コマンドを実行してgitのインストールを確認する。
$ sudo yum install git

※以下は「y」を押下

Is this ok [y/d/N]: y

・つづいて、gitのversionを確認
$ git version

OpenVPN easy-rsa リポジトリのクローンをローカルコンピュータに作成する

・下記コマンドを実行してgitのパッケージをインストールする。
$ git clone https://github.com/OpenVPN/easy-rsa.git

新しい PKI 環境を初期化し、新しい認証機関(CA)を構築

・以下のディレクトリに移動
※移動先:/home/ec2-user/easy-rsa/easyrsa3

$ cd /home/ec2-user/easy-rsa/easyrsa3
$ pwd
/home/ec2-user/easy-rsa/easyrsa3

・新しい認証機関 (CA) を構築
>以下のコマンドを発行
$ ./easyrsa init-pki

※以下の返答が確認できればOK


init-pki complete; you may now create a CA or requests.
Your newly created PKI dir is: /home/ec2-user/easy-rsa/easyrsa3/pki

・画面の指示に従って、CA を構築
$ ./easyrsa build-ca nopass
※以下は「y」を押下
Common Name (eg: your user, host, or server name) [Easy-RSA CA]:y

・サーバー証明書とキーを生成

./easyrsa build-server-full server nopass

・クライアント証明書とキーを生成

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

CA情報、サーバー証明書・キー、クライアント証明書・キーをカスタムディレクトリに格納する

>以下の手順でホームディレクトリ配下に「client1」を作成
$ ll ~/
total 0
drwxrwxr-x 9 ec2-user ec2-user 323 Dec 27 02:45 easy-rsa

$ mkdir ~/client1
$ ll ~/
total 0
drwxrwxr-x 2 ec2-user ec2-user   6 Dec 27 02:57 client1
drwxrwxr-x 9 ec2-user ec2-user 323 Dec 27 02:45 easy-rsa

・認証局情報、サーバー証明書・キー、クライアント証明書・キーの計5ファイルの存在を確認

$ ll ./pki/ca.crt
-rw------- 1 ec2-user ec2-user 1131 Dec 27 02:51 ./pki/ca.crt

$ ll ./pki/issued/server.crt
-rw------- 1 ec2-user ec2-user 4503 Dec 27 02:54 ./pki/issued/server.crt

$ ll ./pki/issued/client1.domain.tld.crt
-rw------- 1 ec2-user ec2-user 4416 Dec 27 02:55 ./pki/issued/client1.domain.tld.crt

$ ll ./pki/private/server.key
-rw------- 1 ec2-user ec2-user 1708 Dec 27 02:54 ./pki/private/server.key

$ ll ./pki/private/client1.domain.tld.key
-rw------- 1 ec2-user ec2-user 1704 Dec 27 02:55 ./pki/private/client1.domain.tld.key

・上記で確認した認証局情報、サーバー証明書・キー、クライアント証明書・キーの5ファイルをclient1フォルダに移動
※「/home/ec2-user/easy-rsa/easyrsa3」で実行すること

$ pwd
/home/ec2-user/easy-rsa/easyrsa3
$ cp ./pki/ca.crt ~/client1/
$ cp ./pki/issued/server.crt ~/client1/
$ cp ./pki/private/server.key ~/client1/
$ cp ./pki/issued/client1.domain.tld.crt ~/client1/
$ cp ./pki/private/client1.domain.tld.key ~/client1/

・「client1」ディレクトリに移動し、ファイルが問題なく保存されたことを確認

$ cd ~/client1
$ pwd
/home/ec2-user/client1
$ ll
total 28
-rw------- 1 ec2-user ec2-user 1131 Dec 27 03:08 ca.crt
-rw------- 1 ec2-user ec2-user 4416 Dec 27 03:09 client1.domain.tld.crt
-rw------- 1 ec2-user ec2-user 1704 Dec 27 03:09 client1.domain.tld.key
-rw------- 1 ec2-user ec2-user 4503 Dec 27 03:08 server.crt
-rw------- 1 ec2-user ec2-user 1708 Dec 27 03:08 server.key

サーバー証明書とキー、およびクライアント証明書とキーを ACM にアップロードする


AWS CLI を使用する準備

※アクセスキーIDその他、以下の情報が必要です。
AWS Access Key ID [None]:
AWS Secret Access Key [None]:
Default region name [None]:
Default output format [None]:


・アクセスキーIDの情報取得

> Amazonマネジメントコンソール
> IAM
> ユーザー
> アクセスキーの作成

アクセスキーを作成する際の注意点

・ユーザーがいない場合は、IAMでユーザーを作成する必要があります。
・IAMユーザー作成時、アクセスの種類はプログラムを選択します。
・IAMユーザー作成時はadministratorグループにアタッチします。
・アクセスキーはCSVでダウンロードします。
・アクセスキーは大事に扱いましょう。

・aws configureの実施
>IAMでアクセスキーを取得したら、以下を実行します。
$ aws configure
AWS Access Key ID :IAMで確認したアクセスキーIDを入力
AWS Secret Access Key :IAMで確認したアクセスキーを入力
Default region name :リージョンを入力 入力例 ap-northeast-1
Default output format :json と入力

サーバー証明書・キー情報、クライアント証明書・キーのアップロード

・サーバー証明書・キーをアップロード
>以下のコマンドを発行し、Arnが表示されればOK
$ aws acm import-certificate --certificate fileb://server.crt --private-key fileb://server.key --certificate-chain fileb://ca.crt --region ap-northeast-1
{
    "CertificateArn": "arn:aws:acm:ap-northeast-1:*****"
}
$
・クライアント証明書・キーをアップロード
>以下のコマンドを発行し、Arnが表示されればOK
※例 client1

$ 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
{
    "CertificateArn": "arn:aws:acm:ap-northeast-1:*****"
}

ここまでの手順でEC局構築、サーバー証明書・キー、クライアント証明書・キーの取得とACMへのアップロードが完了しました。次の手順ではいよいよVPNエンドポイントを作成し、サーバー証明書・キー、クライアント証明書・キーを関連付けしていきます。

VPNエンドポイントを作成する

> Amazonマネジメントコンソール
> VPC
> クライアント VPNエンドポイント
> クライアント VPNエンドポイントの作成
> 表01のように記入
> 「クライアント VPNエンドポイントの作成」をクリック

表01

名前タグ VPN-EndPoint
クライアント IPv4 CIDR 10.0.0.0/20
※他で使用しているローカルIPアドレスと重複しないようにすること
※サブネットマスクは制限があるので、/20で設定すること
サーバー証明書 ARN 前の手順でACMにアップロードした証明書のARNを記載
クライアント証明書 ARN 前の手順でACMにアップロードした証明書のARNを記載
VPC ID 本手順でアクセスするEC2が所属するVPCを記載
クライアント証明書 ARN 前の手順でACMにアップロードした証明書のARNを記載
セキュリティID VPNで許容するポートを記載したセキュリティグループを記載
※今回はwebap-sg

つづいて、
> クライアント VPNエンドポイント作成後に、表02の3カ所を設定する

表02

関連付け ・VPC:VPCエンドポイントを設置するVPN
・関連付けるサブネットの選択*:VPCエンドポイントを設置するサブネット
※複数のサブネットを関連付けて冗長化することは可能だが、
料金が発生するので注意
セキュリティグループ ・セキュリティグループの適用:
VPNで許容したいポートを含んだセキュリティグループを選択
認証ルールの追加 ・アクセスを有効にする送信先ネット
0.0.0.0/0

以上で、AWS作業は完了です。以降の手順では、クライアント側のPCで作業をしていきましょう。


クライアントPCでOpne VPNをインストールし、EC2で生成したクライアント証明書・キーを用いで設定情報を作成する

【参考情報】
>> 【公式】OpenVPN GUI
>> 【公式】クライアント VPN エンドポイント

クライアントPCで設定する際の注意点

クライアントPCでOpneVPNをダウンロードし、設定ファイルを編集する手順は、基本的にWindowsでもMACでも変わりませんが、WindowsとMACでは、若干ファイル名や設定ファイルの格納先が変わりますので、そのあたりはうまく読み替えていただけると幸いです。

本記事では、Windowsでの設定を前提に手順をご紹介しています。


OpneVPNのダウンロード

> OpenVPNのダウンロードページに遷移する

>> 【公式】OpenVPNのダウンロード先

> 図01インストーラーをダウンロードし、クライアントPCにインストールする
図01

※上記インストーラーはWindowsの例


> OpneVPNのクライアント設定ファイルをダウンロードする。

>> 【公式】Configファイルのサンプルをダウンロードする>> クライアント設定ファイルをエクスポートして設定する

つづいて、
> OpneVPNのクライアント設定ファイルを、クライアントPCの以下に格納する
格納先 「C:\Program Files\OpenVPN\configC:\Program Files\OpenVPN\config」
※上記格納先はWindowsの例
※ファイル名は自由 例:client1.ovpn
※拡張子は***.ovpn

表02とCODE01を参考に、OpneVPNのクライアント設定ファイルを開き、4カ所編集する

remote名 ・VPNエンドポイントのDNS名を記載
CA ・EC2サーバーの以下ファイルをcatで参照
/home/ec2-user/client1/ca.crt
cert ・EC2サーバーの以下ファイルをcatで参照
/home/ec2-user/client1/client1.domain.tld.crt
key ・EC2サーバーの以下ファイルをcatで参照
/home/ec2-user/client1/client1.domain.tld.key

CODE01 ovpnファイルで編集する箇所


client
dev tun
proto udp
remote [VPNエンドポイントのDNS名を記載] 443
remote-random-hostname
resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
cipher AES-256-GCM
verb 3


[/home/ec2-user/client1/ca.crt]の内容を記載



[/home/ec2-user/client1/client1.domain.tld.crt]の内容を記載



[/home/ec2-user/client1/client1.domain.tld.key]の内容を記載


reneg-sec 0

クライアントPCからAWSにVPN接続する

> クライアントPC
> タスクバー
> OpneVPNのアイコンを右クリック
> 接続をクリック
> AWSに接続されたことを確認

ローカルIPを用いてTerminal通信ソフトでEC2にログインする

> クライアントPCでTeraTermを起動
※MACの場合は、「Terminal.app」でももちろん大丈夫です。

> EC2のローカルIPにSSHで接続
> 接続されたことを確認


まとめ

この記事でご紹介したこと

  • 本構成の要件、ゴール、構成図、投稿の背景、参考手順
  • AWSでEC2インスタンスをたてる方法(第1回の記事でご紹介)
  • AWS上にVPNクライアントエンドポイントを構築し、VPN接続する方法(本記事でご紹介)

おわりに

この記事はAWS初学者を導く体系的な動画学習サービス「AWS CloudTech」の課題カリキュラムで作成しました。
AWSについて、基本からしっかり学びたい方にはオススメです!

https://aws-cloud-tech.com/


関連記事

>> 【第1回】VPNエンドポイント構築方法/【AWS】EC2インスタンス開始方法/EC2の立て方
>> 【第2回】VPNエンドポイント構築方法/【AWS】クライアントVPNエンドポイントを作成し、VPN接続する手順(本記事)

本記事がお役にたてると幸いです。