目次
はじめに
こんにちは、半田(@handy)です。
検証をしているとちょっとだけPrivate Subnet上のEC2にアクセスして設定内容を確認したいケース等がたまに出てくることがあります。
プライベートなEC2にアクセスする方法としては以下の3つがよく挙げられるのではないかと思います。
- 踏み台サーバ
- Session Manager
- AWS Client VPN
鍵の管理などを考えると、通常であればSession Managerを利用するのが最適だとは思いますが、Session Managerが事前にセットアップされているか分からない環境だと以下のような確認をする必要があり、手早く確認したいときには少し手間がかかってしまいます。
- SSMエージェントがインストールされているか
- EC2にIAMロールがアタッチされているか
- SSMエンドポイントが作成されているか
...
かといって、わざわざPublic Subnetに踏み台サーバを構築するのも手間的にもセキュリティ的にもやりたくありません。
そんなときにDockerとAWS認証情報があればてっとり早くAWS Client VPNを既存環境に構築することができるTerraformテンプレートを作成しましたので、紹介したいと思います。
テンプレート
テンプレートはGitHubで公開しています。
WSL(ubuntu)とPowerShellでコマンド実行できるところまでは確認しています。
構築構成
テンプレートを利用すると以下の構成が構築されます。
※VPCとPrivate Subnetは既存リソースを利用します
構築方法
構築方法としてはGitHubのREADMEに記載しているコマンドを実行するだけで良いのですが、実行時の構成としてはDockerコンテナ上でTerraformコマンドが実行されるようにしました。
自分はローカルの別フォルダーでもTerraformコードを使用しているのですが、そちらはtfenvでバージョン管理をしており、実行フォルダを変更する度にローカルのTerraformバージョンを切り替えるのが面倒というのが主な理由です。
また、DevContainerを利用する方法も考えましたが、DevContainerが使用できない環境でもデプロイできるようにしたいのもあり、このような構成にしました。
ポイント
今回はAWS Client VPNの認証に証明書による相互認証を使用したのですが、その場合はローカルでの各種証明書の作成を行う必要があります。
また、VPNエンドポイント作成後は「クライアント VPN エンドポイント設定ファイル」をダウンロード・一部修正を実施して、VPNクライアントツールに設定する必要があります。
そのため、VPNクライアントツールの設定以外の部分はBashスクリプトを作成して、極力自動化するようにしました。
このBashスクリプトもDockerコンテナ上で実行されるため、コマンド実行がWSLでもPowerShellでも挙動が変わらないように工夫しています。
おわりに
元々は自分用にカスタマイズしたAWS Client VPN構築用Terraformコードを実装していたのですが、社内のメンバーから共有してほしい要望をいただいたので、せっかくなので汎用的になるように作り直してみました。
この記事の内容がどなたかの参考になれば幸いです。
- カテゴリー