🔑

AWS Client VPN を試してみた!

に公開

はじめに

社内 PC から個人検証用に構築した VPC 内の Private Subnet に接続し、EC2 などサーバー管理をしたいと思い調べてみました。
通常は AWS Direct Connect 等で Private Subnet にアクセス可能ですが、出張など外出先でちょっと利用したい場合などに利用できるかなと思います。

参考記事

ほぼ下記参考記事に従って作業しています。
https://blog.serverworks.co.jp/aws-client-vpn-self-signed-certificate

事前準備

「自己証明書の作成」と「サーバー証明書をAWS Certificate Managerへのインポート」を行ってください。
参考記事では EC2 で行っていますが、CloudShell で実施しました。
( EC2 構築がめんどくさかった・・・)
https://docs.aws.amazon.com/ja_jp/cloudshell/latest/userguide/welcome.html

以下作業時のコマンドを列挙します。

  1. OpenVPN easy-rsaをインストール
# git clone https://github.com/OpenVPN/easy-rsa.git
  1. SSL用のTMPディレクトリを作成
# mkdir ssl
  1. PKI 環境を初期化
# cd easy-rsa/easyrsa3/
# ./easyrsa init-pki
  1. 新しい認証機関 (CA) を構築
# ./easyrsa build-ca nopass

※ Common Name (eg: your user, host, or server name) [Easy-RSA CA]: で CA を入力してください。
(参考記事では test-ca としています)

下記のコマンドで自分自身 (Subject) 及び認証局 (Issuer) を確認できます。

# openssl x509 -text -noout -in pki/ca.crt
  1. サーバーの証明書とキーを生成
# ./easyrsa --san=DNS:server build-server-full server nopass

※コマンド実行後、「yes」を入力しないと生成されません。
※「 --san=DNS:server 」を追加しないと AWS Client VPN 構築時に失敗しました。

  1. クライアントの証明書とキーを生成
# ./easyrsa build-client-full client123.domain.tld nopass

※コマンド実行後、「yes」を入力しないと生成されません。

  1. 作成した証明書を~/ssl/にコピー
# cp pki/ca.crt ~/ssl/
# cp pki/issued/server.crt ~/ssl/
# cp pki/private/server.key ~/ssl/
# cp pki/issued/client123.domain.tld.crt ~/ssl/
# cp pki/private/client123.domain.tld.key ~/ssl/
  1. 作業ディレクトリに移動
# cd ~/ssl/
  1. サーバー証明書をインポート
# aws acm import-certificate --certificate file://server.crt --private-key file://server.key --certificate-chain file://ca.crt --region ap-northeast-1
  1. クライアント証明書をインポート
# aws acm import-certificate --certificate file://client123.domain.tld.crt --private-key file://client123.domain.tld.key --certificate-chain file://ca.crt --region ap-northeast-1
  1. ACMインポートの確認
    AWS 管理コンソール [AWS Certificate Manager] から、参考記事の通りインポートできているか確認してください。

AWS Client VPN の作成

あとは記事の通り作業すれば無事に作成可能です。
接続方法も参考記事中にあるので、確認してみてください。

AWS Client VPN の料金

東京リージョンの場合

No 項目 金額
1 AWS Client VPN エンドポイントアソシエーション USD 0.15/時間
2 AWS Client VPN 接続 USD 0.05/時間

料金計算条件

  • 割り当てられているサブネット数:2
  • 1 日でサブネットに割り当てられている時間:24 時間 (常時)
  • アクティブなユーザー数:1
  • 1 日でアクティブな時間:12 時間
  • 1 ヶ月:30 日

例月のランニングコスト(2025年9月現在)

  1. AWS Client VPN エンドポイントアソシエーション
    0.15 [USD/時間] × 24 [時間] × 2 [サブネット数] × 30 [日] = 216 [USD]
  2. AWS Client VPN 接続
    0.05 [USD/時間] × 12 [時間] × 1 [ユーザー数] × 30 [日] = 18 [USD]

※ 1 [USD] = 150 円とした場合
( 216 [USD] + 18 [USD] ) × 150 円 = 35,100 円\textcolor{red}{(意外とするね💦)}

https://aws.amazon.com/jp/vpn/pricing/

CloudFormation で実現する

例月のランニングコストが結構かかるなと思ったので、必要な時にサクっと作って、使わなくなったら削除するように CloudFormation で実現したいと思ったら、先人の知恵がありました!
使い方や設定値は下記サイトを参照してください。
※上記事前準備は必要です。

https://github.com/noname-work/aws-cloudformation/tree/master/client-vpn

AWS Client VPN で勘違いしていたこと

  1. そもそも Public Subnet にしか接続できないと思っていました。
    Private Subnet にもアクセスできるので、閉域網でも利用可能!
  2. クライアント VPN エンドポイント → [クライアント IPv4 CIDR] は VPC の CIDR に合わせる必要はないです。
    例えば、VPC「10.0.0.0/16」、Private Subnet「10.0.0.0/19」だったとしても、「172.168.x.x/16」で問題なし!
  3. 承認ルール → [アクセスを有効にする送信先ネットワークアドレス] も、上記「172.168.x.x/16」で問題なし!
  4. VPN 接続時間だけが課金対象と思っていましたが、AWS Client VPN エンドポイントが作成された時間も課金対象となる事がわかりました。

まとめ

最初は設定が面倒だなとか、そもそも設定がわからず手こずったのですが、インフラエンジニアにアドバイスもらって、何とか実現することができました。
実際に試すことで理解が深まりました!
AWS Client VPN ですが、個人検証用だけでなく、利用用途はいろいろとありそうですね。
この記事が、誰かの役に立てば幸いです。

株式会社グローバルネットコア 有志コミュニティ(β)

Discussion