#2 AWS Hands-on for Beginners - Network編#3 クライアントVPNをつかって、リモート接続環境を構築しよう
目的
前回に続き、今回の主役は AWS Client VPN というサービスです。概要を説明すると、AWSのプライベートサブネット内のEC2にアクセスできるVPNです。クライアント側では、接続を期待するIPアドレスをクライアントCIDRで指定し、VPC側ではインターフェイスのサブネットを指定します。
本題
以下が、今回のハンズオンの全体像になります。
ネットワーク構成図
ルートテーブル一覧
※④はルートテーブルではなく、クライアントVPN エンドポイントの設定です。
セキュリティグループ一覧
※クライアントVPNエンドポイントのインバウンドはデフォルトの設定のままでした。ここで、ClassMethod 社が提供するDevelopersIO の関連記事によると、デフォルトのセキュリティグループではなく、インバウンドルールを設けないセキュリティグループを新規作成することで、予期せぬトラフィックを防ぐことが推奨されていました。詳細につきましては記事をご覧ください。
次に、大まかな手順について説明します。
- VPCを作成
- プライベートサブネットを2つ作成
- subnet1にはEC2を立て、セキュリティグループはpingに対応したプロトコルICMPを設定
- subnet255は Client VPN のインターフェイス用
- VPCへのアクセスログを出力するため、CloudWatch Logsでロググループとログストリームを作成
- VPN接続でクライアント承認(相互認証)をするため、公式の手順に従ってAWS CLI 上で証明書と秘密鍵を作成し、ACMにインポートする
- Client VPN Endpoint を設定し、subnet255に関連付ける ※1
- Client VPN Endpointで設定したクライアント設定ファイルをダウンロード
- AWS Client VPNソフトをクライアント側にダウンロード
- AWS Client VPN でクライアント設定を読み込む
- シェルからEC2にpingコマンドを打つ
- マネジメントコンソールの Client VPN Endpoint と、CloudWatchでアクセスログを確認
※1 VPCへのアクセスのみVPN接続の経由にするため、スプリットトンネルを必ず有効化する
無効の場合、クライアントのすべてのネットワークがVPN経由となり、インターネットにアクセスできなくなる。
まとめ
今回のハンズオンは再生時間こそ短いものの、セキュリティの視点で重要な内容だと感じました。前回はVPC外のサービス(SSM, S3)への接続を確認したが、あくまでAWS内で完結していました。しかし、今回はAWS外のクライアントが登場したことで、意図しないクライアントによる不正アクセスを防ぐため、よりルートテーブルやセキュリティグループの設定を意識する必要がありました。
ここで、先述したルートテーブル一覧の④の クライアント VPN エンドポイントの認証ルールについて補足します。今回は、全てのユーザーに対して、全てのネットワークへのアクセス権限を付与しています。例えば、「アクセスが有効な送信先」を198.19.1.0/24とし、「アクセスの付与対象」を192.168.0.6 とした場合、IPアドレスが192.168.0.6 のユーザーに対して、Private subnet1 へのアクセスに限定した権限を付与する設定になります。
その他
また、インターンの中では、上司が理解度を確認するための時間を設けてくださり、独学では身に付けられなかったアウトプットの重要性や、AWSへの理解を深めるための視点に気づかされました。非常に学びが多く励みになりました。特に、スプリットトンネルとフルトンネルの違いについて理解が深まりました。また、リモート開発ではVPNへの理解が必須となるので、確実に押さえておきたい内容だと思いました。
参考サイト
最後まで記事を読んでくださり、ありがとうございます。もし内容に誤りがございましたら、ご指摘いただけますと幸いです。