AWS Client VPN やってみた

AWS Client VPN やってみた

Clock Icon2025.02.13

こんにちはくろすけです。
先日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 の各種コンポーネントについては、下記がとてもわかりやすかったです。
https://dev.classmethod.jp/articles/aws-client-vpn-perfect-understand/#toc-3

やってみた

今回はこちらの記事をベースにやってみました。

事前準備

下記については、事前準備ということで説明は割愛しております。

  1. VPCおよびEC2のセットアップ
  2. AWS Client VPN アプリのダウンロード

サーバーおよびクライアント証明書とキーの生成

  1. OpenVPN easy-rsa リポジトリをクローンし、easy-rsa/easyrsa3フォルダへ移動
    git clone https://github.com/OpenVPN/easy-rsa.git
    cd easy-rsa/easyrsa3
    
  2. 新しいPKI環境を初期化
    ./easyrsa init-pki
    
  3. 新しい認証局(CA)を構築(Common Name (eg: your user, host, or server name) [Easy-RSA CA]:`は未入力で構いません。)
    ./easyrsa build-ca nopass
    
  4. サーバー証明書およびキーを発行
    ./easyrsa --san=DNS:server build-server-full server nopass
    
  5. クライアント証明書およびキーを発行
    ./easyrsa build-client-full client1.domain.tld nopass
    
  6. 各種証明書およびキーをカスタムフォルダにまとめる
    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/
    
  7. 各種証明書およびキーを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
    
  8. AWS ACMに各種証明書が登録されていることを確認
    スクリーンショット 2025-02-10 18.03.53

クライアント VPN エンドポイントの作成

  1. クライアント VPN エンドポイントのコンソールから、クライアント VPN エンドポイントを作成`を選択
    image-1739178483025
  2. 下記画像の項目を記入し、クライアント VPN エンドポイントを作成を選択
    image-1739179170019
  3. 作成したエンドポイントのIDを選択し、ターゲットネットワークを関連付けるを選択
    CleanShot 2025-02-13 at 15.22.01@2x-2.png
  4. 下記画像の項目を選択し、ターゲットネットワークを関連付けるを選択
    CleanShot 2025-02-13 at 15.43.07@2x-1.png
  5. 再度作成したエンドポイントのIDを選択し、承認ルール > 承認ルールを作成を選択
    CleanShot 2025-02-13 at 15.49.02@2x-5.png
  6. 下記画像の項目を記入し、承認ルールを追加を選択 (今回の送信先ネットワークは、接続先のVPCのCIDRにしました)
    CleanShot 2025-02-13 at 16.48.46@2x.png
  7. クライアント VPN エンドポイントに使用しているセキュリティグループIDを確認
    CleanShot 2025-02-13 at 17.00.13@2x.png
  8. pingテストを行う対象のEC2のセキュリティグループのインバウンドルールに、手順7で取得したセキュリティグループIDを追加
    CleanShot 2025-02-13 at 17.02.05@2x.png
  9. クライアント VPN エンドポイントの詳細を表示し、クライアント設定をダウンロードを選択
    CleanShot 2025-02-13 at 17.05.26@2x.png
  10. 手順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
    ...
    
  11. AWS Client VPN アプリを開く
  12. ファイル > プロファイル管理を選択
    CleanShot 2025-02-13 at 17.36.57.png
  13. プロファイルの追加を選択
    CleanShot 2025-02-13 at 17.39.00.png
  14. 表示名(任意)とVPN設定ファイル(手順10で編集したファイル)のパスを入力し、プロファイルを追加を選択。設定を閉じる
    CleanShot 2025-02-13 at 17.39.44.png
  15. AWS Client VPN アプリにて、手順14で設定したプロファイルに対して接続を選択
    CleanShot 2025-02-13 at 17.45.11.png
  16. ターミナルからEC2のプライベートIPにpingテストを実施して...疎通が確認できました!(ファイヤフォールなどセキュリティ関連アプリなどの影響で接続できない場合があるので注意)
    CleanShot 2025-02-13 at 18.12.07.png

あとがき

今回はAWS Client VPNについて記事にしてみました。
実は検証中にCloudflare WARPに干渉されていることがわからず、結構悩みました...
少しでも同じような方の助けになれば幸いです。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.