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のエクスプローラーへドラックアンドドロップすることで簡単に開くことが可能です。

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

sそそーそーsそーすそーすtそーすtrそーすtそーすそーそ

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 | OpenVPN

This is primarily a maintenance release with bugfixes and improvements. The Windows installers (I601) have several improvements compared to the previous release: New tap-windows6 driver (9.24.2) which fixes some suspend and resume issues Latest OpenVPN-GUI Considerable performance boost due to new compiler optimization flags A summary of the changes is available in Changes.rst, and a full list of changes is available here.

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

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

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

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

Windows用OpenVPN GUIからVPN接続

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

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

次の手順は、Windows ベースの VPN クライアントを使用して VPN 接続を確立する方法を示しています。 開始する前に、クライアント VPN 管理者が クライアント VPN エンドポイントを作成し、 クライアント VPN エンドポイント設定ファイル を提供済みであることを確認します。 トラブルシューティング情報については、「 Windows のトラブルシューティング 」を参照してください。 Windows 証明書システムストアの証明書と秘密キーを使用するように OpenVPN クライアントを設定できます。このオプションは、クライアント VPN 接続の一部としてスマートカードを使用する場合に便利です。OpenVPN クライアント cryptoapicert オプションの詳細については、OpenVPN のウェブサイトの「 Reference Manual for OpenVPN 」をご参照ください。 証明書はローカルコンピュータに保存する必要があります。 OpenVPN で cryptoapicert オプションを使用するには クライアント証明書と秘密キーを含む .pfx ファイルを作成します。 .pfx ファイルをローカルコンピュータの個人証明書ストアにインポートします。詳細については、Microsoft のウェブサイトの「 方法: MMC スナップインを使用して証明書を表示する 」をご参照ください。

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

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

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

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

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

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

※この記事は2020/6/18時点のものです。現時点の料金については AWSオフィシャルの料金 をご確認ください。 コロナショックの影響で急遽テレワークを導入している会社でセキュリティ担保に苦慮されている会社は多いのではないでしょうか。 幸い、私が関わっているシステムではAWSを利用しており、Direct …

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

最後に僕が普段AWS学習する上で参考にしている本を紹介します!

AWS認定資格 ソリューションアーキテクトアソシエイトの教科書: 合格へ導く虎の巻
こちらの書籍はKindle限定ですが、私も書籍執筆に携わらせていただいているAWS SAA(ソリューションアーキテクトアソシエイト)の合格を目指すための教科書です。各サービスを網羅的に解説しておりますので是非ご覧ください!

しかも0円です!

もう一つはAWS知識地図
こちらはAWS CLIを使ってAWSの基本構成をCLIコマンドを使ってハンズオン形式で進めていく書籍となっております。CLIコマンドの使い方はもちろんですが、各サービスに関する詳細説明が初心者にもわかりやすく解説されているのでおすすめです!

コメントを残す

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