Windows AWS ClientVPNを使用

windows-client-vpnendpoint

WindowsのOpenVPNを使用したAWS ClientVPNでVPCへの接続設定を行います。

前提として、WindowsでAWS ClientVPNを使用するにはOpenVPN、Git、VScodeを使用します。

OpenVPNの使用方法とGitからGit cloneの実施方法についてはこちらの記事で解説しますが、VScodeについてはすでにインストールされている前提で話を進めていきます。

AWS ClientVPNを設定する環境について

項目詳細
OSWindows10 pro 64bit
プロセッサIntel(R) Core(TM) i7-7600U CPU @ 2.80GHz 2.90 GHz
バージョン22H2
メモリ16GB

AWS ClientVPN接続する際の環境は上記の通りです。

PrivateSubnetに配置した開発用サーバ(EC2)へClient VPN Endpoint経由でクライアント端末から接続できるところまでを実践します。

Git(Windows用)のインストール

ユーザー配下にgitのフォルダを作成します。

C:\Users\ユーザー名\git

Git

Git is easy to learn and has a tiny footprint with lightning fast performance. It outclasses SCM tools like Subversion, CVS, Perforce, and ClearCase with features like cheap local branching, convenient staging areas, and multiple workflows.

Gitがインストールされていない方は上記サイトからGitのインストールをします。

Git等で検索するとすぐにGitのサイトが出てきますので、Gitサイト画面右から「Download for Windows」からGitをダウンロードし、インストールをします。

Gitのインストールが完了後、VScodeを起動し、先ほどユーザー配下に作成したgitフォルダをVScodeで開きます。

VScodeで指定のフォルダを開く際は、WindowsのフォルダアイコンをVScodeのエクスプローラーへドラックアンドドロップすることで簡単に開くことが可能です。

その後、ソースツリーのアイコンをクリックし、リポジトリの初期化をします。

GitBashを開いて、gitフォルダへ移動します。

$ cd \git

OpenVPN easy-rsaインストール

gitフォルダへ移動後、以下コマンドでOpenVPN easy-rsaをインストールします。

$ git clone https://github.com/OpenVPN/easy-rsa.git

PKI基盤 (公開鍵証明書の運用に必要な認証局、証明書等のセット)を初期化します。

PKI基盤(Public Key Infrastructure: 公開鍵認証基盤)とは、公開鍵暗号方式と電子証明書と呼ばれるものを使用して通信の安全性を高める仕組みです。

公開鍵暗号方式と電子証明書についてはここでお話するとそれだけで一つの記事が出来上がりそうなので、一旦ここでは割愛します。

$ cd easy-rsa/easyrsa3
$ ./easyrsa init-pki

Notice
------
'init-pki' complete; you may now create a CA or requests.

Your newly created PKI dir is:
* /c/Users/user/git/easy-rsa/easyrsa3/pki

* Using Easy-RSA configuration:

* IMPORTANT: Easy-RSA 'vars' template file has been created in your new PKI.
             Edit this 'vars' file to customise the settings for your PKI.

* Using x509-types directory: /c/Users/ユーザー/git/easy-rsa/easyrsa3/x509-types

ClientVPN 証明書キー発行

以下コマンドで認証局 (CA)を構築
-> Common Name (eg: your user, host, or server name) [Easy-RSA CA]:の部分で
認証機関の名前を聞かれますが、基本はデフォルトの「Easy-RSA CA」としておく

$ ./easyrsa build-ca nopass
* Using SSL: /usr/bin/openssl OpenSSL 1.1.1q  5 Jul 2022

* Using Easy-RSA configuration: /c/Users/ユーザー/git/easy-rsa/easyrsa3/pki/vars

............................+++++
..............................................................................................+++++
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Common Name (eg: your user, host, or server name) [Easy-RSA CA]:Easy-RSA CA

Notice
------
CA creation complete and you may now import and sign cert requests.
Your new CA certificate file for publishing is at:
/c/Users/ユーザー/git/easy-rsa/easyrsa3/pki/ca.crt

以下コマンドでサーバー証明書とキーを生成

$./easyrsa build-server-full server nopass

成功すれば以下のように表示されます。

* Using SSL: /usr/bin/openssl OpenSSL 1.1.1q  5 Jul 2022

* Using Easy-RSA configuration: /c/Users/ユーザー/git/easy-rsa/easyrsa3/pki/vars

Generating a RSA private key
....+++++
...............................................................+++++
writing new private key to '/c/Users/ユーザー/git/easy-rsa/easyrsa3/pki/14b21a0f/temp.eb6fc0e7'
-----

Notice
------
Keypair and certificate request completed. Your files are:
req: /c/Users/ユーザー/git/easy-rsa/easyrsa3/pki/reqs/server.req
key: /c/Users/ユーザー/git/easy-rsa/easyrsa3/pki/private/server.key


You are about to sign the following certificate.
Please check over the details shown below for accuracy. Note that this request
has not been cryptographically verified. Please be sure it came from a trusted
source or that you have verified the request checksum with the sender.

Request subject, to be signed as a server certificate for 825 days:

subject=
    commonName                = server


Type the word 'yes' to continue, or any other input to abort.
  Confirm request details: yes

Using configuration from /c/Users/ユーザー/git/easy-rsa/easyrsa3/pki/14b21a0f/temp.6b583409
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName            :ASN.1 12:'server'
Certificate is to be certified until Feb  9 13:27:27 2025 GMT (825 days)

Write out database with 1 new entries
Data Base Updated

Notice
------
Certificate created at: /c/Users/ユーザー/git/easy-rsa/easyrsa3/pki/issued/server.crt

失敗すると最後のNotice以降が以下のように表示されます。

Aborting without confirmation.

確認せず中止します、といわれて中止されてしまいますが、

途中、Type the word ‘yes’ to continue, or any other input to abort. の部分でyesと入力するところを余計な文字が入っていたりすると、うまくいきません。再度試してみましょう。

作成したClientVPN証明書キーを一つのフォルダへまとめる

ユーザー配下に適当にフォルダを作成します。僕は.awsvpnというフォルダを作成しました。

GitBashで作成した.awsvpnフォルダへ移動します。

#移動先のフォルダ
C:\Users\ユーザー\.awsvpn

Git Bashで対象のディレクトリへ移動します。

 $ cd /c/Users/ユーザー/git/easy-rsa/easyrsa3/pki/

サーバー証明書、クライアント証明書を/c/Users/ユーザー/.awsvpnへコピーします。

$ cp pki/issued/server.crt /c/Users/ユーザー/.awsvpn
$ cp pki/private/server.key /c/Users/ユーザー/.awsvpn
$ cp pki/issued/client1.domain.tld.crt /c/Users/ユーザー/.awsvpn
$ cp pki/private/client1.domain.tld.key /c/Users/ユーザー/.awsvpn

AWS Certificate Managerへ認証キーアップロード

作成したサーバー証明書およびクライアント証明書をACM(AWS Certificate Manager)へアップロードします。

ACMとはHTTPS通信をするために必要なSSL(Secure Sockets Layer)証明書をAWS自身が認証局となって発行するサービスです。

SSL/TLS(Transport Layer Security)により、データ通信を暗号化するため、データの改ざん、なりすまし等を防ぐことができるようになり、安全に通信を行うことが可能です。

ACMでは先ほど作成した証明書をインポートし管理することができます。

SSL/TLS証明書にては有効期限がありますが、期限が切れると当然その証明書を使用してHTTPS通信ができなくなります。
でもその証明書の有効期限が3年後とか数年後になると、期限管理するのが大変です。
そこで、Amazon CloudWatch を使用して、インポートした証明書の有効期限切れが近づいたときに通知を送信等を設定することで、このタスクを簡素化できます。これについては別途改めて作成したいと思います。

マネジメントコンソールの検索窓でACMで検索し、Certificate Managerを選択

Certificate Managerの画面からインポートを選択し、サーバー証明書をインポートします。

インポート方法はClientVPN 証明書キー発行の項で作成した「server.crt」「server.key」「 ca.crt」です。

以下の画像のようにキー情報を転記します。

サーバー証明書のインポートが完了したら、同様にクライアント証明書のインポートを実施します。

クライアント証明書は「client1.domain.tld.crt」「client1.domain.tld.key」「 ca.crt」の3つです。

クライアント証明書においてもインポート方法は同様で、「BEGIN CERTIFICATE」「BEGINPRIVATE KEY」のような記述があるので以降の部分を転記します。

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

ACMにサーバー証明書とクライアント証明書のアップロードが完了したら、クライアント側からVPCの開発環境にセキュアにアクセスできるようにします。

クライアントVPNと記載をしておりますが、外部からClient VPN Endpointを経由してPrivateSubnetのEC2環境に接続できることを目的としています。

Client VPN Endpointを作成することで、我々が普段使いしているPC(クライアント端末)とVPCの間にVPNを張ることで、セキュアに通信することが可能ということです。

また、Client VPN Endpointの設定時にクライアントにIPアドレスレンジをCIDR形式で指定する必要があります。

後述するOpenVPNを使用することでVPN接続が確立されると、クライアント端末はVPCのネットワークの配下に位置することになりプライベートIPが割り当てられます。

前提条件としてWindowsではOpenVPNをサイトからダウンロードして、GUIで操作してVPN接続を行います。

クライアントVPNエンドポントはVPCの画面から、クライアントVPNエンドポントを選択します。

クライアントVPNエンドポントの画面右上からクライアントVPNエンドポントを作成を選択します。

詳細

認証情報

サーバー証明書 ARN: ACMにインポートしたサーバー証明書のARNを選択します。

クライアント証明書ARN: ACMにインポートしたクライアント証明書のARNを選択します。

認証オプションについては相互認証を使用にチェックを入れます。

その他パラメータ – オプションについてはデフォルト状態のままクライアントVPN作成をします。

ここまでで、外部からVPN接続するための入り口を作ることができました、がVPC内部のPrivateSubnetに配置している開発用サーバ、PublicSubnetに配置しているプロキシサーバへVPN通信からのSSH接続をするには、VPNエンドポイントからの通信を許可が必要になるため、意図的にクライアントVPN用のセキュリティグループを作成し、

開発用サーバ、プロキシサーバへインバンド許可をしてやる必要があります。

クライアントVPNエンドポントのセキュリティグループの作成

クライアントVPNエンドポイントのセキュリティグループはVPCの紐づけ先の設定以外はデフォルトのまま設定し作成します。

※タグについては任意でつけて問題ありません。

ここでは詳細は省きますが、上記で作成したセキュリティグループを開発サーバおよびプロキシサーバに紐づけているセキュリティグループにインバウンドルールに追加します。

Windows用OpenVPNのインストール

Windows用OpenVPNのインストールは以下サイトから行います。

自身のOSの対象インストーラをダウンロードしてください。

Community Downloads – Open Source VPN | OpenVPN

The OpenVPN community shares the open source OpenVPN. Download the latest version of the open source VPN release OpenVPN 2.6.3 for a secure network.

クライアントVPNエンドポイント設定ファイルのダウンロード

AWS側のクライアントVPNエンドポイントとクライアント側のVPN接続を確立させるため、クライアントエンドポイントVPNエンドポントの設定ファイルをダウンロードします。

ダウンロードをするとdownloaded-client-config.ovpnというファイルがダウンロードされます。

この.ovpnのファイルをOpenVPNクライアントに設定ファイルとしてインポートを行います。

Windows用OpenVPN GUIからVPN接続

Windows用のOpenVPN GUIからのVPN接続についてはAWS公式サイトに従って行います。

Windows クライアントアプリケーションを使用して接続する

Windows ベースの VPN クライアントを使用してクライアント VPN エンドポイントに接続する方法について説明します。

OpenVPNを起動すると以下のようにアイコンが表示されるので、右クリックします。

右クリックすると「Import」が表示されるので、ファイルのインポートでクライアントVPNエンドポイントの設定ファイルでダウンロードした.ovpnをインポートします。

インポートが完了したら、再度右クリックでOpenVPNのプロパティを開いて、対象のインポートしたファイルを選択し、接続することでVPN接続することができます。

最終的にクライアントVPNエンドポイントは特に使用しない場合は削除しておきましょう。

料金については以下のサイトが参考になるかと思いますが、放置しておくとなかなかの料金を請求されることになりますので、注意しましょう。

AWS Client VPNって簡単に使えるけど実際どのくらい費用が発生するの? | Office INTI

※この記事は2020/6/18時点のものです。現時点の料金についてはAWSオフィシャルの料金をご確認ください。

以上でWindowsのOpenVPNを使用したAWS ClientVPNでVPCへの接続は終了します。

現在AWS初学者~中級者へ向けたオンライン学習サービスCloudTechのお得なクーポンを配信しております。

興味がある方は以下のリンクから確認してみてください。

【いまなら最大4,000円引き】AWS学習 CloudTech

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です