AWS Client VPNとAzure P2S 機能比較 02~AWS Client VPN クライアントPC設定編~

# AWS Client VPNとAzure P2Sを比較してみた
[前回の記事](https://qiita.com/hidekko/items/5dc7de8f3cde645959b2)からの続きです。
AWS Client VPNでオンプレミスのPCをAWSのVPCに接続し、その際にインターネットに出るIPアドレスをAWSの固定IPアドレスにする、という構成です。
ネットワークの用語でいうと**フルトンネル**(フルトンネリング)という構成です。
NAT GatewayにElastic IPアドレスを設定し、AWS Client VPNでインターネットに出る際、IPアドレスをElastic IPアドレスに固定する(固定IPアドレスにする)というシナリオです。
今回はAWS Client VPNのクライアントPC側の設定です。
Azure P2Sは証明書インストールとP2Sのエージェントインストールのみなので大した作業ではないのですが、AWS Client VPNは運用観点も絡めるとまぁまぁ面倒な設定があるので比較のためにも記事にしました。

## AWS Client VPNの構成図と本記事の作業箇所
普段AzureのP2Sを構築していて当然構成図も書いたことがあるのですが、AWSの構成図は初めて書きます。
お作法も分からないので間違っていればご指摘ください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643392/0e493807-629b-0c90-3c66-74ffeeb04ef7.png)
このような構成図になります。
前回と同じですね。
今回の記事では赤枠部分の設定です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643392/c9bddc13-cab0-71e1-b4e2-bf8b7f8bc594.png)

# 1. AWS Client VPN設定ファイルのダウンロード
[前回の記事](https://qiita.com/drafts/5dc7de8f3cde645959b2)で作成したクライアント VPN エンドポイントの設定画面で赤枠内の**クライアント設定をダウンロード**をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643392/d8ba9032-c694-06ba-774d-3f8a061767d1.png)
downloded-client-config.ovpn
というファイルがダウンロードされます。
もう証明書もクライアント VPN エンドポイントも削除してしまっているのでセキュリティ的に問題が無いので、この.ovpnファイルの中身も晒してしまいます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643392/b7bd3bf9-85a2-8a85-d3fa-97657fee0701.png)
このような中身になっています。
**remote**の項目がAWS Clinet VPN接続先になります。
ちゃんとポートが[前回の記事](https://qiita.com/drafts/5dc7de8f3cde645959b2)の設定どおり443になっていますね。
なんとこの設定ファイルに**追記する**必要があります。
追記方法は2種類ありますが、**追記する、という作業は必須です。**
<font color="Red">いや、AWS側の設定もめちゃくちゃ面倒やったのに、クライアントPC側でも手間かけさせるの？
マジで？めっちゃ面倒やん。</font>
ってのが正直な感想です。
比較記事なので、この辺はまとめの比較部分で感想じゃなくてちゃんと比較した結果で記載します。
肝心の追記項目ですが、結果からいうと以下の赤枠ようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643392/3da00cf2-46fe-b237-f2a3-8a58e0752529.png)
はい、前回の記事の[クライアント証明書のダウンロード](https://qiita.com/hidekko/items/5dc7de8f3cde645959b2#2-%E3%82%AF%E3%83%A9%E3%82%A4%E3%82%A2%E3%83%B3%E3%83%88%E8%A8%BC%E6%98%8E%E6%9B%B8%E3%81%AE%E3%83%80%E3%82%A6%E3%83%B3%E3%83%AD%E3%83%BC%E3%83%89)でダウンロードした<font color="Red">**クライアント証明書とクライアントキーのクライアントPC側での格納先(ファイルパス)を.ovpnファイルに直接書き込みます。**</font>
ファイルパスじゃなくて、.crtファイルと.keyファイルをテキストで出力した結果を直接書き込む方式もありますが、ファイル内容を直接書き込んでしまうとこの.ovpnファイルが漏えいしたらインターネット上に公開されているAWS Clinet VPNのエージェントが手に入ったらVPC内に自由に出入りできてしまいます。
これはかなり危険な状態です。
私はファイルパス記載を推奨します。
<font color="Red">**.ovpnファイルの漏えいのリスクを考慮すると、この.ovpnファイルはあくまで設定ファイルまでの記述に留め、実際の認証や通信の復号化に使われる.crtファイルと.keyファイルはファイルパスでの記載とし、別管理とした方がセキュリティレベルが上がる、と考えるからです。**</font>
.ovpnファイルにユーザが追記する、という仕組みは非常に面倒ですが、こういった部分に考慮の余地があるのはエンジニアの腕の見せ所かなと思います。
お付き合いのSIerさんにこの辺突っ込んで聞いてもらうと、そのSIerさんがどこまで何を考慮してるか透けて見えると思います。
まぁドメイン認証にしてもらった方がより細かな制御が可能ですが、それは今回の比較記事とは別企画で進めようと思います。

:::note notice
注意
ファイルパスの記載ですが、Windowsの場合￥ではなく、￥￥と￥が2回続けて記載しなければなりません。
:::


# 2. AWS Clinet VPNエージェントのダウンロードとインストール
こちらからダウンロードしてインストールしてください。
https://docs.aws.amazon.com/ja_jp/vpn/latest/clientvpn-user/client-vpn-connect-windows.html
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643392/f7d02b14-6843-e077-6945-9105964b86dc.png)

# 3. AWS Client VPNエージェント設定
AWS Clinet VPNのインストールが完了したら、AWS Clinet VPNを開いてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643392/9b613d22-0d6f-b092-a4e3-6baa1b826761.png)
このような画面が起動しますので、言うとおりに[ファイル]から[プロファイルの管理]を開きましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643392/d58ce13f-7318-2d8d-69ab-7cbc09198297.png)
プロファイルを追加をクリックし、[この項目通りに](https://qiita.com/drafts/c7e65dbd5985ec260c9f/edit#1-aws-client-vpn%E8%A8%AD%E5%AE%9A%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E3%83%80%E3%82%A6%E3%83%B3%E3%83%AD%E3%83%BC%E3%83%89)変更済みの.ovpnファイルを指定しましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643392/33415a20-e029-07e5-c4c9-b1af502fd792.png)
プロファイル名を付けて保存するとプロファイルが出てきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643392/c5ac26d3-e801-f9fa-d4cc-c4067f509503.png)
.ovpnファイルに設定不良がある(例えば.crtファイルと.keyファイルの記載がない)と怒られますので、この画面まで出たら安心してください。

# 3. AWS Clinet VPNを接続する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643392/5628ded4-b81c-4639-5cd6-7607d5484ac2.png)
接続！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643392/f26dd5c3-ebb4-5cc0-83e9-c4f60193dc3d.png)
[前の記事](https://qiita.com/hidekko/items/5dc7de8f3cde645959b2#3-6-vpn-gateway%E3%81%AE%E4%BD%9C%E6%88%90)で設定したログインバナーの文字がちゃんと出力されました！
[確認くん](https://www.ugtop.com/spill.shtml)などでグローバルIPアドレスを確認してください。
こちらも当然ですが[前の記事](https://qiita.com/hidekko/items/5dc7de8f3cde645959b2#3-10-aws-clinet-vpn%E6%8E%A5%E7%B6%9A%E5%BE%8C%E3%81%AE%E3%82%B0%E3%83%AD%E3%83%BC%E3%83%90%E3%83%ABip%E3%82%A2%E3%83%89%E3%83%AC%E3%82%B9%E7%A2%BA%E8%AA%8D)で確認したグローバルIPアドレスになっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643392/d23891e1-a421-3db0-81c4-01eaa8962ee0.png)
ゲートウェイの名前もバッチリAWSだということがわかる構成になっていますね。
これでAWS Clinet VPNでフルルート、固定IPアドレス化を行う、という当初の目標は達成できました！

# 4. AWS Clinet VPN経由でVPC内のEC2にアクセスする
これ、微妙にハマったので記載しておきます。
結局この構成だと、クライアントPCに割り当てられるのはどのIPアドレスなの？
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643392/70aaf7ba-ba8e-a196-0334-8f46db80e8b7.png)
どこのリソースにアクセスする際にどのIPアドレスになっているの？
というのがわからなくなったので整理しました。

# 4-1. AWS Clinet VPNのクライアントPCに割当たるIPアドレス
AWS Clinet VPN接続時には[この設定項目](https://qiita.com/hidekko/items/5dc7de8f3cde645959b2#3-6-vpn-gateway%E3%81%AE%E4%BD%9C%E6%88%90)で設定した、**10.255.0.0/22**のIPアドレスが割当たります。
構成図でいうとこんな感じ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643392/e8a57426-9579-cd7a-40ca-de6197036085.png)
赤字の部分ですね。
<font color="Red">**なので、このIPアドレス、10.255.0.0/22をPublic SubnetにあるEC2に割当たっているセキュリティグループで許可しても該当のEC2にアクセスできない・・・
・・・マジか・・・
・・・めんどいわぁ～**</font>
って感じです。
でもよくよく考えてみると、VPN Gateway経由でPublic SubnetのEC2にアクセスする時点でVPN Gatewayの存在している<font color="Red">Private SubnetのIPアドレスにNATされてる</font>んですよね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643392/336838db-bdb4-96bd-46c9-eb3ab6453a5f.png)
この赤字の太字、<font color="Red">**172.16.101.0/24**</font>に<font color="Red">10.255.0.0/22</font>が**NAT**されてるんです。
で、恐らくこのNATを行っているパラメータが[前の記事のここ](https://qiita.com/hidekko/items/5dc7de8f3cde645959b2#3-9-%E3%82%AF%E3%83%A9%E3%82%A4%E3%82%A2%E3%83%B3%E3%83%88-vpn-%E3%82%A8%E3%83%B3%E3%83%89%E3%83%9D%E3%82%A4%E3%83%B3%E3%83%88%E3%81%AE%E3%83%AB%E3%83%BC%E3%83%88%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%E8%A8%AD%E5%AE%9A)
再度画像を掲載すると
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643392/03e421bb-73c8-1163-374c-59ebf9363ffd.png)
ここですね。
よくみるとこのルートテーブルの設定、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643392/3ae6b0ab-7264-6f13-16ae-f56310dc3f14.png)
追加で赤枠で囲った<font color="Red">**タイプ**</font>のとこが<font color="Red">**NAT**</font>になってるんですよね。
きっとAWSを普段から使ってるエンジニアはこの辺りも抜かりなく理解されてるんでしょうね。
素晴らしいですね。
これらの結果をまとめると、EC2に割り当てているセキュリティグループの設定値はこのようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643392/8944e79b-e5a0-b405-8856-c81c0aa37c7f.png)
この例ではICMPv4しか許可していませんが、RDPやSSHなど、必要なサービスを許可してください。

<font color="Red">**AWS Clinet VPN、正直便利です。
でもね、いや、ホント、マジでめんどくさかったです。**</font>

Azure P2Sは普段やり慣れてるのもあるかもしれませんが、設定はもっと簡単です。
まだまだこの企画は続きますので、良ければお付き合いください。

本日はここまで。