社内リソースにアクセスできるセキュアなリモートワーク環境を構築してみた

2023-11-01
デベロッパーのためのクラウド活用方法

Author : 嶋田 朱里

こんにちは。ソリューションアーキテクトの嶋田です。

ここ数年で、在宅勤務やワーケーションといった言葉が一般的になり、従業員がこのような働き方をできるように対応したいと考えている企業の方も多いのではないでしょうか。オフィス以外の場所から社内のリソースにアクセスすることを考えると、通信の安全性を確保する必要があります。また、既に利用しているクライアントアプリケーションによっては、特定のプライベートなドメイン名で アクセスしたいといった要望もあるかもしれません。

家や出先などから社内へのリソースに安全にアクセスするには VPN 接続を利用します。AWS では AWS Client VPN (以降、Client VPN) を使うことで、個々のデバイスからの VPN 接続を行うことができます。また、プライベートなカスタム DNS ドメイン名でリソースにアクセスする際は、 Amazon Route 53 プライベートホストゾーン (以降、プライベートホストゾーン) が利用できます。

この記事では、これら 2 つのサービスを使って、AWS クラウド上のプライベートサブネット内にある EC2 インスタンスに対して、デバイスから VPN 接続をし、あらかじめ定めたプライベートなカスタム DNS ドメイン名でインスタンスにアクセスする方法とその実装手順を紹介します。

関連記事として「Client VPN を使用してプライベートホストゾーンのリソースレコードを解決する方法を教えてください。」がありますが、こちらは一部の設定項目しか記載されていません。そこで今回は AWS 上に Amazon Elastic Compute Cloud (以降、EC2) を用意してから、Client VPN を経由して、カスタム DNS ドメイン名でアクセスするまでの一連の流れを紹介します。このような構成を検討していらっしゃる方は、是非この記事を読みながら実装の流れを把握していただければと思います。

ちなみに、ホットなニュースとして、2023 年 10 月 16 日より Client VPN が大阪リージョンでもご利用いただけるようになりました ! 今回の実装では東京リージョンを使用しますが、利用可能なリージョンが増えた Client VPN はこれからも注目です !

ご注意

本記事で紹介する AWS サービスを起動する際には、料金がかかります。builders.flash メールメンバー特典の、クラウドレシピ向けクレジットコードプレゼントの入手をお勧めします。

*ハンズオン記事およびソースコードにおける免責事項 »

このクラウドレシピ (ハンズオン記事) を無料でお試しいただけます »

毎月提供されるクラウドレシピのアップデート情報とともに、クレジットコードを受け取ることができます。 


1. アーキテクチャ解説

実装するアーキテクチャは図 1 のようになっています。

今回は、AWS Client VPN を使用して VPN 接続をした上で、 プライベートサブネット内に配置した EC2 インスタンス (Server#1) に server1.example.com というカスタム DNS ドメイン名でアクセスできるようにします。

Client VPN は、OpenVPN ベースの VPN クライアントをインストールしたパソコンなどのデバイスから、AWS リソースやオンプレミスネットワーク内のリソースに VPN 接続するためのサービスです。画像の下の方に AWS Certificate Manager がありますが、これは Client VPN の相互認証用の証明書の管理を行います。

カスタム DNS ドメイン名でのアクセスを可能にするためには、プライベートホストゾーンを使用します。プライベートホストゾーンは、VPC 内の DNS ドメインレコードを管理するコンテナです。Amazon Route 53 Resolver (以降、Route 53 Resolver) という VPC に標準で備わる DNS サーバーに対して DNS クエリを投げると、 Route 53 Resolver はプライベートホストゾーンの内容を参照に名前解決を行います。

次に実際に EC2 インスタンスにアクセスする際の流れを説明します。

まず、クライアントから AWS クラウドへのアクセスは、設定した VPN 接続を介して、クライアント VPN エンドポイントに到達します。クライアント VPN エンドポイントは、VPC 内のサブネット (図では Subnet 254 Subnet 255) に関連づけられています。
クライアントが EC2 インスタンスにアクセスするために、そのインスタンスのカスタム DNS ドメイン名を指定している場合、そのリクエストは VPN エンドポイントに関連づけられたサブネットを介して Route 53 Resolver に名前解決要求を行います。Route 53 Resolver は、プライベートホストゾーンの内容をもとに名前解決を行い (図2)、EC2 インスタンスのプライベート IP アドレスをクライアントに返します (図3)。クライアントはその IP アドレスを利用して、目的の EC2 インスタンスにアクセスします (図4)。

図 1 (クリックすると拡大します)

図 3 (クリックすると拡大します)

図 2 (クリックすると拡大します)

図 4 (クリックすると拡大します)


2. 実装手順

大まかな実装の流れは以下の3ステップです。

  • ステップ 1 . 実行環境の作成と Client VPN の設定
  • ステップ 2. プライベートホストゾーンの作成とレコードの登録
  • ステップ 3. DNS に関するの設定項目の変更


なお、このサンプルは東京リージョンを使用して行っています。

2-1. ステップ 1. 実行環境の作成と Client VPN の設定

まずは EC2 や VPC などの実行環境と Client VPN の設定を行います。この手順については、「AWS Client VPN Basic ハンズオン」に詳しく書かれています。そのため、こちらの資料の「03. ハンズオン」の「共通設定」から「パターン 1 相互認証 (証明書ベース) 」までを参考に、Client VPN の設定を行なってください。

ここまでで、図5 の赤枠で囲われた部分のリソースが作成され、Client VPN で VPN 接続をしながら、 プライベート IP アドレスによる EC2 へのアクセスが可能になりました。

図 5

2-2. ステップ 2. プライベートホストゾーンの作成とレコードの登録

続いて、カスタム DNS ドメイン名で名前解決を行うために、プライベートホストゾーンを作成し、そこへレコードを登録します。このステップにより、図 6 の赤枠部分のプライベートホストゾーンが作成されます。

図 6

プライベートホストゾーンの作成

まずはプライベートホストゾーンを作成します。

1. Route 53 の管理コンソールで、左側の選択肢から「ホストゾーン」を選択し、「ホストゾーンの作成」というボタンをクリックします。

クリックすると拡大します

2. 以下の内容を設定し、「ホストゾーンの作成」をクリックします。

  • ドメイン名 : example.com
  • タイプ : プライベートホストゾーン
  • ホストゾーンに関連づける VPC
    • リージョン : 東京
    • VPC ID : 作成した VPC (cvpn-hands-on

クリックすると拡大します

ホストゾーンに関連づける VPC」の欄で VPC を指定することで、指定した VPC の Route 53 Resolver が、作成するホストゾーンを利用できるようになります。

3. ホストゾーンが正常に作成されたことを確認します。

クリックすると拡大します

レコードの登録

続いて、作成したホストゾーンに、レコードを登録します。

レコードを作成」をクリックします。

クリックすると拡大します

以下の内容を設定し、「レコードを作成」をクリックします。

  • レコード名 : server1
  • 値 : 「AWS Client VPN Basic ハンズオン」で作成した EC2 のプライベート IP アドレス (EC2 の管理コンソールに戻って確認してください) 

クリックすると拡大します

6. レコードが正常に登録されたことを確認します。

クリックすると拡大します

以上でカスタム DNS ドメイン名を管理するプライベートホストゾーンの作成ができました。

2-3. ステップ 3. DNS に関するの設定項目の変更

いよいよ最後のステップです。Route 53 Resolver で名前解決ができるよう、DNS に関する設定の変更を行います。変更する項目は以下の 2 点です。

  • VPC の「DNS 解決」と「DNS ホスト名」の有効化
  • Client VPN エンドポイントに DNS サーバーの IP アドレスを登録

これにより、Client VPN エンドポイントに来た名前解決要求は Route 53 Resolver に渡され、名前解決されるようになります (図7)。

図 7

VPC の「 DNS 解決 」と「DNS ホスト名 」の有効化

プライベートホストゾーンに登録したカスタム DNS ドメイン名で名前解決を行う場合、VPC の設定項目である「DNS 解決」と「DNS ホスト名」を有効にする必要があるため、この設定変更を行います。

手順は以下の通りです。

1. VPC の管理コンソールで左側の選択肢から「お使いの VPC」を選択します。

クリックすると拡大します

作成した VPC 名 (cvpn-hands-on) の左側のチェックボックスにチェックを入れ、右上の「アクション」をクリックし、「VPC の設定を編集」を選択します。

クリックすると拡大します

3. 「DNS 設定」の「DNS 解決を有効化」と「DNS ホスト名を有効化」の両方にチェックを入れて、「保存」をクリックします。

クリックすると拡大します

正常に変更されたことを確認します。

クリックすると拡大します

Client VPN エンドポイントに DNS サーバーの IP アドレスを登録

現状の設定だと、クライアントから発行された DNS クエリは Client VPN エンドポイントに到達しますが、Client VPN エンドポイントはそのクエリの転送先となる DNS サーバーがどこにあるのかわからない状態です。そのため、Client VPN エンドポイントの設定から、DNS サーバーの IP アドレスを登録します。

今回、使用する DNS サーバーは VPC にデフォルトで備わっている Route 53 Resolver です。この IP アドレスはデフォルトで VPC IPv4 ネットワーク範囲 + 2 に設定される という特徴があります。
このことより、今回 Client VPN エンドポイントで登録する DNS サーバーの IP アドレスは、VPC のネットワーク範囲 (198.19.0.0/16) に 2 を足した 198.19.0.2 となります。

それでは設定していきます。

1. VPN の管理コンソールで左側の選択肢から「クライアント VPN エンドポイント」をクリックします。作成した VPC (cvpn-hands-on) を選択し、右上の「アクション」から「クライアント VPN エンドポイントを変更」を選択します。

クリックすると拡大します

2. 「その他のパラメータ - オプション」のセクションで「DNS サーバーを有効化」をオンにし、「DNS サーバー 1 IP アドレス」の欄に 198.19.0.2 と入力します。その後「クライアント VPN エンドポイントを変更」をクリックします。

クリックすると拡大します

3. 正常に変更されたことを確認します。

クリックすると拡大します

以上で設定は全て完了です!お疲れ様でした。


3. 疎通確認

それでは実際にカスタム DNS ドメイン名でアクセスできるのかテストしてみましょう。

AWS Client VPN Basic ハンズオンの「03. ハンズオン / パターン 1 相互認証 (証明書ベース) / VPN 接続」を参考に VPN 接続した状態で ping server1.example.com を実行します。正常にレスポンスが返って来れば成功です!

% ping server1.example.com
PING server1.example.com (198.19.1.53): 56 data bytes
64 bytes from 198.19.1.53: icmp_seq=0 ttl=126 time=13.429 ms
64 bytes from 198.19.1.53: icmp_seq=1 ttl=126 time=12.508 ms
64 bytes from 198.19.1.53: icmp_seq=2 ttl=126 time=13.851 ms

もし、 ping コマンドのレスポンスがない場合、 EC2 のセキュリティグループで、インバウンドルールにカスタム ICMP - IPv4:エコー要求が許可されているか確認してみてください。

クリックすると拡大します


4. まとめ

今回は、Client VPN とプライベートホストゾーンを利用して、VPN 接続しながらカスタム DNS ドメイン名でアクセスする方法を実装しました。 AWS を利用する際、1 つ 1 つのサービスについては理解していても、複数のサービスを組み合わせるとなると「どんな手順を踏んだらいいんだろう ?」と迷うことも多いかと思います。この記事で Client VPN とプライベートホストゾーンの組み合わせの実装方法をマスターしていただき、みなさんの開発に役立てていただけると幸いです。


builders.flash メールメンバーへ登録することで
AWS のベストプラクティスを毎月無料でお試しいただけます

筆者プロフィール

嶋田 朱里 (しまだ あかり)
アマゾン ウェブ サービス ジャパン合同会社 ソリューションアーキテクト

2023 年 4 月入社のソリューションアーキテクト。お客様のビジネスの成長を技術面からサポートできるソリューションアーキテクトを目指して、日々勉強中。深夜ラジオとラグビー観戦が大好きです。

AWS を無料でお試しいただけます

AWS 無料利用枠の詳細はこちら ≫
5 ステップでアカウント作成できます
無料サインアップ ≫
ご不明な点がおありですか?
日本担当チームへ相談する