AWS クライアントVPNを試してみた
はじめに
- 本記事は、とりあえず一度試してみよう、という方向けに手順を書いています。AWS Client VPNについての情報、リンク等は最後にまとめています。
 - Windows 10 Pro バージョン 20H2 で実施しました。
 - 本記事の手順で作成する証明書(CA証明書、クライアント証明書、サーバ証明書)はいずれも有効期限が作成から10年となるようです。
 - 結構がっつりハンズオンみたいな資料になってしまいました😋
 
構成図

手順
前提
AWSアカウントは作成済とします
必要なソフトの準備
OpenVPN クライアントと、vpnux PKI Managerの2つのソフトを準備します。
ダウンロード元ページは → こちら
OpenVPN クライアント
- 
上記のページから「Windowsインストーラ(64ビット版)」をダウンロードする
 - 
ダウンロードしたmsiファイルをダブルクリックして実行する
 - 
「Install Now」を選択する

※ユーザーアカウント制御のダイアログが出たら、「はい」を選択する - 
インストールが完了したら、「Close」を選択する

 - 
プロファイルが無いよ、というダイアログが出るが、気にせず「OK」を選択する

 
vpnux PKI Manager
.NET Framework 3.5が入っているか確認する
- 
Windowsキー + 「R」キーを押下して、「ファイル名を指定して実行」を表示させる
 - 
「appwiz.cpl」と入力し、Enterキーを押下する

 - 
「Windowsの機能の有効化または無効化」を選択する

 - 
.NET Framework 3.5のところが有効になっているか確認する

 
インストール
- 
上記のページから「vpnux PKI Manager」をダウンロード
 - 
ダウンロードしたzipファイルを解凍し、任意のフォルダに置く
 
相互認証用の証明書の作成
プライベートCAの構築
- 
vpnux PKI Manager(vpnuxPKI.exe)を実行する
 - 
新規CA構築のダイアログにて、「OK」を選択する

 - 
「CAの新規作成」を選択する

 - 
確認ダイアログが開くので、「はい」を選択する

 - 
任意のフォルダを選択し、「OK」を選択する

 - 
確認ダイアログが開くので、フォルダの中身を確認した後に「はい」を選択する

 - 
適宜証明書基本情報を入力し、「CA証明書作成」を選択する(ここではデフォルトのままにしている)

 - 
しばらく時間がかかるので、待機する
 - 
CA構築が完了したら、ダイアログが表示されるので、「OK」を選択する

 - 
証明書等が入ったフォルダが表示される

 
サーバ証明書の作成
- 
vpnux PKI Managerにて、「サーバー用 秘密鍵/証明書」を選択する

 - 
適宜証明書情報を入力し、「証明書作成」を選択する(ここでは
server.client-vpc-handson-20210725-sakainako.comとした)
ドメインとして認識されるような名前をつけておく。デフォルトの「server_1」ではACMへの登録時にドメインが認識されなかった

 - 
サーバ証明書作成が完了したら、ダイアログが表示されるので、「OK」を選択する

 - 
サーバ証明書が作成されていることを確認する

 
クライアント証明書の作成
- 
vpnux PKI Managerにて、「クライアント用 秘密鍵/証明書」を選択する

 - 
適宜証明書情報を入力し、「証明書作成」を選択する(ここでは
client.client-vpc-handson-20210725-sakainako.comとした)

 - 
クライアント証明書作成が完了したら、ダイアログが表示されるので、「OK」を選択する

 - 
クライアント証明書が作成されていることを確認する

 
相互認証用の証明書をACM(Amazon Certificate Manager)へ登録
- AWSコンソールの「サービス」から「Certificate Manager」を選択する
 
サーバ証明書のACMへの登録
- 
一度もACMを使用したことがない場合、以下の画面が表示される。左側の「証明書のプロビジョニング」の下の「今すぐ始める」を選択する

 - 
上の方に表示されている「証明書のインポート」を選択する

 
※ACMを使用したことがある場合は、証明書の画面から「証明書のインポート」を選択する

- 
以下の値を設定
- 証明書本文
- サーバ証明書ファイル(上記手順では
server.client-vpc-handson-20210725-sakainako.com.crt)をテキストエディタで開き、中身をすべてコピーして貼り付ける 
 - サーバ証明書ファイル(上記手順では
 - 証明書のプライベートキー
- サーバ秘密鍵ファイル(上記手順では
server.client-vpc-handson-20210725-sakainako.com.key)をテキストエディタで開き、中身をすべてコピーして貼り付ける 
 - サーバ秘密鍵ファイル(上記手順では
 - 証明書チェーン
- CA証明書ファイル(上記手順では
ca.crt)をテキストエディタで開き、中身をすべてコピーして貼り付ける 
 - CA証明書ファイル(上記手順では
 

 - 証明書本文
 - 
「次へ」ボタンを選択する

 - 
タグは任意で設定し、「レビューとインポート」を選択する

 - 
内容を確認し、「インポート」を選択する
「ドメイン」に値が入っていることを確認しておく。ドメインが「-」となっていた場合、後の手順(クライアントVPNエンドポイントの作成)にてエラーが発生した。


 - 
サーバ証明書がACMに登録されたことを確認する

 - 
クライアントVPNエンドポイントの作成時に必要となるため、サーバ証明書のARNをメモしておく

 
クライアント証明書のACMへの登録
- 本記事の手順で相互認証用の証明書を作成した場合、サーバ証明書とクライアント証明書の発行元認証機関(CA)が同じになる。この場合は、クライアント証明書のACMへの登録は必要ない。 → AWSドキュメントに記載がある
 - クライアント証明書の登録が必要な場合、手順はサーバ証明書と同じだが、以下の値を設定する
- 証明書本文
- クライアント証明書ファイル(上記手順では
client.client-vpc-handson-20210725-sakainako.com.crt)をテキストエディタで開き、中身をすべてコピーして貼り付ける 
 - クライアント証明書ファイル(上記手順では
 - 証明書のプライベートキー
- クライアント秘密鍵ファイル(上記手順では
client.client-vpc-handson-20210725-sakainako.com.key)をテキストエディタで開き、中身をすべてコピーして貼り付ける 
 - クライアント秘密鍵ファイル(上記手順では
 - 証明書チェーン
- CA証明書ファイル(上記手順では
ca.crt)をテキストエディタで開き、中身をすべてコピーして貼り付ける 
 - CA証明書ファイル(上記手順では
 
 - 証明書本文
 
VPCとサブネットの作成
VPCの作成
- 
「サービス」から「VPC」を選択する

 - 
左のカラムから「VPC」を選択する

 - 
「VPCを作成」ボタンを選択する

 - 
以下の値を設定
- 名前タグ:任意
 - IPv4 CIDR ブロック:172.16.0.0/16
 - 他はデフォルト
 
 - 
「VPCを作成」ボタンを選択する

 - 
VPCが作成されたことを確認する

 
サブネットの作成
- 
左のカラムから「サブネット」を選択する

 - 
「サブネットを作成」ボタンを選択する

 - 
以下の値を設定する
- VPC
- VPC ID:先程作成したVPC
 
 - サブネットの設定
- サブネット名:任意
 - アベイラビリティーゾーン:任意
 - IPv4 CIDR ブロック:172.16.0.0/24
 - 他はデフォルト

 
 
 - VPC
 - 
「サブネットを作成」ボタンを選択する

 - 
サブネットが作成されたことを確認する

 
クライアントVPN エンドポイントの作成
- 
「クライアント VPN エンドポイント」を選択する

 - 
「クライアント VPN エンドポイントの作成」ボタンを選択する

 - 
以下の値を設定する
- 名前タグ:任意
 - 説明:任意
 - クライアント IPv4 CIDR:10.0.0.0/16
 - サーバ証明書 ARN:サーバ証明書をACMに登録する時に控えておいた、サーバ証明書のARNを設定する
 - 認証オプション:相互認証の使用
 - クライアント証明書 ARN:本記事の手順の場合、サーバ証明書 ARNと同じ値を設定する
 - 接続ログ記録:「いいえ」を設定する
 - スプリットトンネルを有効にする:チェックをつける
 - 他はデフォルト

 
 - 
「クライアント VPN エンドポイントの作成」ボタンを選択する

 - 
作成に成功したら、以下の表示が出るので、「閉じる」ボタンを選択する

 - 
エンドポイントが作成されていることを確認する

 
サブネットをクライアントVPN エンドポイントに関連付ける
- 
「関連付け」タブ → 「関連付け」ボタン の順に選択する

 - 
上記手順で作成したVPCとサブネットを設定する

 - 
「関連付け」ボタンを選択する

 - 
作成に成功したら、以下の表示が出るので、「閉じる」ボタンを選択する

 - 
しばらく時間がかかるので、適宜更新ボタンで更新しつつ、待機する。状態が「使用可能」、「関連付け済み」となれば使用可能

 
クライアントVPNエンドポイントに承認ルールを追加する
- 
「認証」タブ → 「受信の承認」ボタン の順に選択する

 - 
以下の値を設定する
- アクセスを有効にする送信先ネット:172.16.0.0/16 ※VPCのCIDR
 - アクセスを付与する対象:すべてのユーザーにアクセスを許可する
 - 説明:任意
 
 - 
「認証ルールの追加」ボタンを選択する

 - 
追加に成功したら、以下の表示が出るので、「閉じる」ボタンを選択する

 
クライアント設定のダウンロード
- 
「クライアント設定のダウンロード」ボタンを選択する

 - 
確認のウィンドウが表示されるので、「ダウンロード」ボタンを選択する

 
ダウンロードしたクライアント設定の編集
- 
ダウンロードしたクライアント設定ファイルをテキストエディタで開く
 - 
以下の2行を追加する
cert {クライアント証明書ファイルのパス}key {クライアント秘密鍵ファイルのパス}
※Windowsのパスに含まれる
\(バックスラッシュ・円マーク)は\\としてエスケープする必要がある- 編集例↓
 
 - 
クライアント設定ファイルを保存して閉じる
 
OpenVPNクライアントで接続
- 
OpenVPNクライアントを起動し、タスクトレイにあるアイコンを右クリック → 「Import file」を選択する

 - 
上記で編集済のクライアント設定ファイルを選択し、「開く」ボタンを選択する

 - 
インポートに成功したら、以下のウィンドウが表示されるので、「OK」を選択する

 - 
タスクトレイにあるアイコンを右クリック → 「接続」を選択する

 - 
接続に成功すると、以下の通知が出る

 
EC2をプライベートサブネットに立てて、アクセスしてみる
EC2インスタンスの起動
- 
「サービス」から「EC2」を選択する

 - 
左のカラムから「インスタンス」を選択する

 - 
「インスタンスを起動」ボタンを選択する

 - 
AMIは、Windows Server 2019 Base を選択

 - 
インスタンスタイプは、「t2.small」を選択し、「次のステップ:インスタンスの詳細の設定」ボタンを選択する

 - 
以下の値を設定し、「次のステップ:ストレージの追加」ボタンを選択する
- インスタンス数:1
 - ネットワーク:上記で作成したVPC
 - サブネット:上記で作成したサブネット
 - 他はデフォルト

 
 - 
設定はデフォルトのままで、「次のステップ:タグの追加」ボタンを選択する

 - 
設定はデフォルトのままで、「次のステップ:セキュリティグループの設定」ボタンを選択する

 - 
以下の値を設定し、「確認と作成」ボタンを選択する
- セキュリティグループの割り当て:既存のセキュリティグループを選択する
 - セキュリティグループID:VPCのデフォルトセキュリティグループ
 
 - 
「起動」ボタンを選択する

 - 
以下の値を設定し、「キーペアのダウンロード」ボタンを選択する
- 新しいキーペアの作成 を選択
 - キーペア名:任意の名前
 
 - 
キーペアがダウンロードできたら、「インスタンスの作成」ボタンを選択する

 - 
インスタンスの作成中画面が出たら、「インスタンスの表示」ボタンを選択する

 
EC2インスタンスへの接続
- 
ステータスチェックが終わって起動したら、作成したインスタンスを選択して、「接続」を選択する

 - 
「RDPクライアント」→「パスワードを取得」の順に選択する

 - 
「Brouse」ボタンを選択する

 - 
上記でダウンロードしたキーペアを選択し、「開く」ボタンを選択する

 - 
「パスワードを復号化」ボタンを選択する

 - 
パスワードが表示されるので、コピーボタンを押してコピーしておく

 - 
Windowsキー + 「R」キーを押下して、「ファイル名を指定して実行」を表示させる
 - 
「mstsc」と入力し、Enterキーを押下する

 - 
リモートデスクトップ接続のウィンドウが開くので、先程立ち上げたインスタンスのプライベートIPアドレスを入力し、「接続」を選択する

 - 
ユーザー名に「Administrator」、パスワードに、上記でコピーしたパスワードを入力し、「OK」を選択する

 - 
警告のウィンドウが出るが、気にせず「はい」を選択する

 - 
接続できました!

 
VPNを切断すると・・・

もちろん接続が切れます!

お片付け
EC2インスタンスの終了
- 
AWSコンソールのEC2 → インスタンスから、今回作成したインスタンスを選択し、「インスタンスの状態」 → 「インスタンスを終了」を選択する

 - 
終了確認のウィンドウにて、「終了」を選択する

 
キーペアの削除
- 
AWSコンソールのEC2 → キーペアから、今回作成したキーペアを選択し、「アクション」 → 「削除」を選択する

 - 
削除確認のウィンドウにて、「削除」と入力し、「削除」ボタンを選択する

 
クライアントVPNエンドポイントの関連付けの解除
- 
AWSコンソールのVPC → クライアントVPNエンドポイントから、今回作成したクライアントVPNエンドポイントを選択し、「関連付け」タブ → 「関連付けの解除」ボタンを選択する

 - 
解除確認のウィンドウにて、「はい、関連付けを解除する」ボタンを選択する

 - 
しばらく時間がかかるので、適宜更新ボタンで更新しつつ、待機する。関連付けが消えれば完了

 
クライアントVPNエンドポイントの削除
- 
AWSコンソールのVPC → クライアントVPNエンドポイントから、今回作成したクライアントVPNエンドポイントを選択し、「アクション」から「クライアントVPNエンドポイントの削除」を選択する

 - 
削除確認のウィンドウにて、「はい、削除する」を選択する

 - 
クライアントVPNエンドポイントが消えれば、削除完了

 
VPCの削除
- 
AWSコンソールのVPCから、今回作成したVPCを選択し、「アクション」 → 「VPCの削除」を選択する

 - 
削除確認のウィンドウにて、「削除」と入力し、「削除」ボタンを選択する

 - 
VPCが消えれば、削除完了

 
ACMから相互認証用の証明書を削除
- 
AWSコンソールのACMから、今回作成した証明書を選択し、「アクション」 → 「削除」を選択する

 - 
削除確認のウィンドウにて、「削除」ボタンを選択する

 
OpenVPNクライアントの終了とアンインストール
- 
タスクトレイにあるアイコンを右クリックし、「終了」を選択する

 - 
Windowsキー + 「R」キーを押下して、「ファイル名を指定して実行」を表示させる
 - 
「appwiz.cpl」と入力し、Enterキーを押下する

 - 
「OpenVPN」 → 「アンインストール」の順に選択する

 - 
確認のウィンドウが表示された場合、「はい」を選択する

※ユーザーアカウント制御のダイアログが出たら、「はい」を選択する - 
C:\Users\ユーザー名のフォルダにある「OpenVPN」フォルダを削除する

 
vpnux PKI Managerの終了とファイル削除
- 
vpnux PKI Managerのメニューから、「ファイル」 → 「終了」を選択する

 - 
証明書作成の際に作ったフォルダを削除する

 - 
ダウンロードして解凍したvpnux PKI Managerのフォルダを削除する

 
参考にしたサイト
- 
AWSのドキュメント
 - 
おなじみDevolopersIOさん(下記の他にも大量の情報が・・・お世話になってます)
 
Discussion