AWS Client VPN やってみた
こんにちはくろすけです。
先日AWS Client VPNを触る機会がありましたので、記事にしてみようと思います。
概要
AWS Client VPN は、AWS リソースとオンプレミスネットワーク内のリソースに安全にアクセスできるようにする、クライアントベースのマネージド VPN サービスです。クライアント VPN を使用すると、OpenVPN ベースの VPN クライアントを使用して、どこからでもリソースにアクセスできます。
とのこと。詳細はこちら。
ふと、AWS Site-to-Site VPN との違いも気になったので、少しだけ。
AWS Site-to-Site VPN の概要(詳細はこちら)は
デフォルトでは、Amazon VPC 内で起動したインスタンスは、独自の (リモート) ネットワークと通信できません。AWS サイト間 VPN (サイト間 VPN) 接続を作成し、その接続を介してトラフィックを渡すようにルーティングを設定することで、VPC からリモート ネットワークへのアクセスを有効にできます。
VPN 接続という用語は一般的な用語ですが、このドキュメントでは、VPN 接続は VPC と独自のオンプレミス ネットワーク間の接続を指します。サイト間 VPN は、インターネット プロトコル セキュリティ (IPsec) VPN 接続をサポートしています。
とのことで、
- AWS Client VPN:単一のPC(クライアント側)とAWSネットワークを接続
- AWS Site-to-Site VPN:ネットワーク間の接続
というところが最も大きな違いかと思います。
コンポーネントについて
AWS Client VPN の各種コンポーネントについては、下記がとてもわかりやすかったです。
やってみた
今回はこちらの記事をベースにやってみました。
事前準備
下記については、事前準備ということで説明は割愛しております。
- VPCおよびEC2のセットアップ
- AWS Client VPN アプリのダウンロード
サーバーおよびクライアント証明書とキーの生成
- OpenVPN easy-rsa リポジトリをクローンし、
easy-rsa/easyrsa3
フォルダへ移動git clone https://github.com/OpenVPN/easy-rsa.git cd easy-rsa/easyrsa3
- 新しいPKI環境を初期化
./easyrsa init-pki
- 新しい認証局(CA)を構築(Common Name (eg: your user, host, or server name) [Easy-RSA CA]:`は未入力で構いません。)
./easyrsa build-ca nopass
- サーバー証明書およびキーを発行
./easyrsa --san=DNS:server build-server-full server nopass
- クライアント証明書およびキーを発行
./easyrsa build-client-full client1.domain.tld nopass
- 各種証明書およびキーをカスタムフォルダにまとめる
mkdir ~/custom_folder/ cp pki/ca.crt ~/custom_folder/ cp pki/issued/server.crt ~/custom_folder/ cp pki/private/server.key ~/custom_folder/ cp pki/issued/client1.domain.tld.crt ~/custom_folder/ cp pki/private/client1.domain.tld.key ~/custom_folder/ cd ~/custom_folder/
- 各種証明書およびキーをACMにアップロード
aws acm import-certificate --certificate fileb://server.crt --private-key fileb://server.key --certificate-chain fileb://ca.crt aws acm import-certificate --certificate fileb://client1.domain.tld.crt --private-key fileb://client1.domain.tld.key --certificate-chain fileb://ca.crt
- AWS ACMに各種証明書が登録されていることを確認
クライアント VPN エンドポイントの作成
- クライアント VPN エンドポイント
のコンソールから、
クライアント VPN エンドポイントを作成`を選択
- 下記画像の項目を記入し、
クライアント VPN エンドポイントを作成
を選択
- 作成したエンドポイントのIDを選択し、
ターゲットネットワークを関連付ける
を選択
- 下記画像の項目を選択し、
ターゲットネットワークを関連付ける
を選択
- 再度作成したエンドポイントのIDを選択し、
承認ルール > 承認ルールを作成
を選択
- 下記画像の項目を記入し、
承認ルールを追加
を選択 (今回の送信先ネットワークは、接続先のVPCのCIDRにしました)
- クライアント VPN エンドポイントに使用しているセキュリティグループIDを確認
- pingテストを行う対象のEC2のセキュリティグループのインバウンドルールに、手順7で取得したセキュリティグループIDを追加
- クライアント VPN エンドポイントの詳細を表示し、
クライアント設定をダウンロード
を選択
- 手順9にて取得したファイルに、以下のように
~/custom_folder/client1.domain.tld.crt
と~/custom_folder/client1.domain.tld.key
を追記... </ca> <cert> -----BEGIN CERTIFICATE----- MIIDYTCCAk... -----END CERTIFICATE----- </cert> <key> -----BEGIN PRIVATE KEY----- MIIEvAIBAD... -----END PRIVATE KEY----- </key> reneg-sec 0 ...
- AWS Client VPN アプリを開く
ファイル > プロファイル管理
を選択
プロファイルの追加
を選択
表示名
(任意)とVPN設定ファイル
(手順10で編集したファイル)のパスを入力し、プロファイルを追加
を選択。設定を閉じる
- AWS Client VPN アプリにて、手順14で設定したプロファイルに対して
接続
を選択
- ターミナルからEC2のプライベートIPにpingテストを実施して...疎通が確認できました!(ファイヤフォールなどセキュリティ関連アプリなどの影響で接続できない場合があるので注意)
あとがき
今回はAWS Client VPNについて記事にしてみました。
実は検証中にCloudflare WARPに干渉されていることがわからず、結構悩みました...
少しでも同じような方の助けになれば幸いです。