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