AWS ClientVpnの構築手順


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

前提

・VPCが作成済みであること
・検証用EC2が作成済みであること(SSH接続試験、各種証明書発行を行う)
・AWSの管理者ユーザで検証しています。
・AWS Client VPNアプリをインストールできるPCの準備する
・VPNの認証には「相互認証(証明書認証)」を利用
・VPN接続元のPCのセグメントと接続先EC2のセグメントを別セグメントにしておく

構成図

file

構築手順

1.検証用EC2で各種証明書発行を行う

#EC2にSSH接続して、rootに切替
$ sudo su root
#git コマンドが使えるようにインストール
$ yum -y install git
#git からEASY-RSA をインストール
$ git clone https://github.com/OpenVPN/easy-rsa.git
$ cd easy-rsa/easyrsa3
$ ./easyrsa init-pki
# Type the word 'yes' to continue

#CA(中間証明書)作成
$ ./easyrsa build-ca nopass
$ Common Name (eg: your user, host, or server name) [Easy-RSA CA]:kobayashi.com
$ "kobayashi.com"の部分は任意の名前に変えてもらってOKです

証明書の確認
$ ls pki/ca.crt 
$ ls pki/private/ca.key

サーバ証明書 (CNは、各環境・設定に合わせて)
$ ./easyrsa build-server-full server nopass
# Type the word 'yes' to continue
証明書の確認
$ ls pki/issued/server.crt
$ ls pki/private/server.key

クライアント証明書
$ ./easyrsa build-client-full client1.domain.tld nopass
$ Type the word 'yes' to continue

証明書の確認
$ ls pki/issued/client1.domain.tld.crt
$ ls pki/private/client1.domain.tld.key

#作成したサーバ証明書、クライアント証明書、キーを「tmp/sample-key」というディレクトリを作り、そこに集約
$ pwd
$ mkdir /tmp/sample-key/
$ cp pki/ca.crt /tmp/sample-key/
$ cp pki/issued/client1.domain.tld.crt /tmp/sample-key/
$ cp pki/private/client1.domain.tld.key /tmp/sample-key/
$ cp pki/issued/server.crt /tmp/sample-key/
$ cp pki/private/server.key /tmp/sample-key/
# /tmp/sample-keyへディレクトリ移動
$ cd /tmp/sample-key/
# コピーされているか確認
$ ls -l

#コマンド実行して、以下画面のような表示であればOKです。
[root@ip-10-30-101-27 easyrsa3]# cd /tmp/sample-key/
[root@ip-10-30-101-27 sample-key]# ls -l
total 28
-rw-------. 1 root root 1212 Sep 25 09:33 ca.crt
-rw-------. 1 root root 4529 Sep 25 09:33 client1.domain.tld.crt
-rw-------. 1 root root 1704 Sep 25 09:33 client1.domain.tld.key
-rw-------. 1 root root 4620 Sep 25 09:34 server.crt
-rw-------. 1 root root 1704 Sep 25 09:34 server.key
[root@ip-10-30-101-27 sample-key]#

[root@ip-10-30-101-27 /]# cd /
[root@ip-10-30-101-27 /]# pwd
/
[root@ip-10-30-101-27 /]# chmod -R 775 /tmp/sample-key/
[root@ip-10-30-101-27 /]# ls -l /tmp/sample-key/
total 28
-rwxrwxr-x. 1 root root 1212 Sep 25 09:33 ca.crt
-rwxrwxr-x. 1 root root 4529 Sep 25 09:33 client1.domain.tld.crt
-rwxrwxr-x. 1 root root 1704 Sep 25 09:33 client1.domain.tld.key
-rwxrwxr-x. 1 root root 4620 Sep 25 09:34 server.crt
-rwxrwxr-x. 1 root root 1704 Sep 25 09:34 server.key
[root@ip-10-30-101-27 /]#

2.EC2から発行したサーバ証明書ACMへインポートする

WinSCPを使ってEC2から発行したクライアント証明書をダウンロードする
WinSCPでEC2に接続してみました。を参照

サーバー証明書とクライアント証明書をそれぞれ登録します。

file

AWS Certificate Managerの証明書一覧を開き、「インポート」をクリックします。
file

下記の画面に内容を入力し、「次へ」をクリックします。その後、「次へ」「インポート」をクリックします。
※画像はサーバー証明書の例です。クライアント証明書の場合、証明書名を読み替えてください。
file

インポートされていることを確認します。(サーバー証明書とクライアント証明書を確認します。)

サーバー証明書
証明書本文:server.crt
証明書のプライベートキ:server.key
証明書チェーン:ca.crt

クライアント証明書
証明書本文:client1.domain.tld.crt
証明書のプライベートキ:client1.domain.tld.key
証明書チェーン:ca.crt

file

3.クライアントVPNエンドポイントを作成し、有効化する

VPCのコンソール画面の「クライアントVPN エンドポイント」を選択し、「クライアント VPN エンドポイントを作成」をクリックします。

file

file

file

file

ステータスが「Pending-associate」になったら、「関連付」でVPN接続で接続可能にするサブネットを設定していきます。

file

file

file

設定が完了したら、ステータスが「使用可能(Available)」になるのを待つ
file

数分後、ステータスが「使用可能(Available)」になることを確認します。
file

4.承認ルールを作成して、ネットワークにアクセスできるクライアントを指定します。

VPCへクライアントアクセスをさせるためには、「承認」を作成します。どのユーザーが、どのVPCセグメントに接続できるかを設定します。 今回は、VPCのCIDRに対して全ユーザーがアクセスできるような設定を入れました。

「承認ルール」タブから設定を追加します。
file

VPC IPv4 CIDR 「10.30.0.0/16」を指定して「認証ルールを追加」をクリックします。
file

待つます。
file

数分後、ステータスが「Active」になることを確認します。
file

5.クライアントに配布するクライアント VPN エンドポイント設定ファイルをダウンロードして準備します。

downloaded-client-config.ovpnをダウンロードします。
一覧画面で対象クライアント VPN エンドポイントを選択し、「クライアント設定をダウンロード」をクリックします。
file

確認画面で「クライアント設定をダウンロード」をクリックします。
file

6.PCにAWS Client VPNアプリをインストールし、プロファイルを設定する

AWS Clinet VPNアプリをダウンロードします。
DLページ:AWS Client VPN download

「downloaded-client-config.ovpn」をPCの所定場所格納します。(ここでは「C:\tmp」に格納します。)

「2.EC2から発行したサーバ証明書ACMへインポートする」手順でダウンロードした証明書・秘密鍵をPCの所定場所格納します。(ここでは「C:\tmp」に格納します。)
file

downloaded-client-config.ovpnの最後に以下を追記します。

cert /"ファイルを格納しているフォルダ"/client1.domain.tld.crt
key /"ファイルを格納しているフォルダ"/client1.domain.tld.key

例)Cドライブ直下にtmpフォルダを作成して、そこにclient1.domain.tld.crtを置く場合は
  c:/tmp/client1.domain.tld.crt
或いは
(フォルダの区切りである¥は2つ続けて記載する場合でもOK)
file

★プロファイルを追加しようとして、エラーが出る場合、パスの記述を確認してください。★
"¥"が含まれていたり、パスが間違っていないか確認してください。
downloaded-client-config.ovpn とclient1.domain.tld.crtおよびclient1.domain.tld.keyは同じフォルダに格納しておいた方が分かりやすくて良いと思います。

PCにダウンロードしたアプリ(AWS VPN Client)をウィザードを沿ってインストールします。

アプリ(AWS VPN Client)を起動し、プロファイル設定をします。

file

file

接続の確認1(Windows10のIP確認)
file

接続の確認2(EC2のプライベート IPv4 アドレスへの接続確認)
file

接続の確認3(クライアント VPN エンドポイント画面で「接続」タブの確認)
file

注意点

1.最新情報を必ず確認の上、利用、設計するようにしましょう。

AWS クライアント VPN クォータ

2.サブネットを関連付けしたタイミングで課金が発生するので注意してください

 必要なくなったら、関連付けを解除するか、エンドポイントごと削除しましょう!

まとめ

今回はテレワークの促進で注目のAWSサービスの1つのであるAWS Clinet VPNをお試し構築してみました。

認証タイプは下記のように複数ありますが、今回「相互認証」を使っています。

証明書ベース
    相互認証
ユーザーベース
    Active Directory 認証
    統合(フェデレーション)認証

以上です。
皆さんのお役に立てれば幸いです。

参考

AWS Client VPN とは?

AWS Client VPN の構築・設定(AWS公式VPNアプリ利用)

AWS Client VPN 構築で考えるべきだったこと(備忘録)

AWS Client VPN のリソースとパラメータを一枚絵にまとめつつ過去のエントリもまとめてみた

クライアント VPN エンドポイント

Last modified: 2022-09-25

Author