「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をインストール
$ sudo yum update
$ sudo yum install git
※以下は「y」を押下
Is this ok [y/d/N]: y
$ git version
OpenVPN easy-rsa リポジトリのクローンをローカルコンピュータに作成する
$ 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
>以下のコマンドを発行
$ ./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
$ ./easyrsa build-ca nopass
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情報、サーバー証明書・キー、クライアント証明書・キーをカスタムディレクトリに格納する
$ 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
$ 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
※「/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/
$ 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]:
> Amazonマネジメントコンソール
> IAM
> ユーザー
> アクセスキーの作成
アクセスキーを作成する際の注意点
・IAMユーザー作成時、アクセスの種類はプログラムを選択します。
・IAMユーザー作成時はadministratorグループにアタッチします。
・アクセスキーはCSVでダウンロードします。
・アクセスキーは大事に扱いましょう。
>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エンドポイントを作成する
> 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のダウンロード
> 図01インストーラーをダウンロードし、クライアントPCにインストールする
図01
※上記インストーラーはWindowsの例
>> 【公式】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接続する
> タスクバー
> OpneVPNのアイコンを右クリック
> 接続をクリック
> AWSに接続されたことを確認
ローカルIPを用いてTerminal通信ソフトでEC2にログインする
> クライアントPCでTeraTermを起動
※MACの場合は、「Terminal.app」でももちろん大丈夫です。
> EC2のローカルIPにSSHで接続
> 接続されたことを確認
まとめ
この記事でご紹介したこと
- 本構成の要件、ゴール、構成図、投稿の背景、参考手順
- AWSでEC2インスタンスをたてる方法(第1回の記事でご紹介)
- AWS上にVPNクライアントエンドポイントを構築し、VPN接続する方法(本記事でご紹介)
おわりに
この記事はAWS初学者を導く体系的な動画学習サービス「AWS CloudTech」の課題カリキュラムで作成しました。
AWSについて、基本からしっかり学びたい方にはオススメです!
関連記事
>> 【第1回】VPNエンドポイント構築方法/【AWS】EC2インスタンス開始方法/EC2の立て方
>> 【第2回】VPNエンドポイント構築方法/【AWS】クライアントVPNエンドポイントを作成し、VPN接続する手順(本記事)
本記事がお役にたてると幸いです。