メインコンテンツに移動
デベロッパーのためのクラウド活用方法

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

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 はこれからも注目です !


X ポスト » | Facebook シェア » | はてブ »

ご注意

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

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

builders.flash メールメンバー登録

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

1. アーキテクチャ解説

Architecture diagram showing integration of AWS Client VPN with Amazon Route 53 Private Hosted Zone in a VPC environment. The diagram includes components such as VPN client, client VPN endpoint, Amazon Route 53 resolver, multiple subnets across availability zones, EC2 instance, and integrations with ACM certificate management and CloudWatch for log management. Some labels are in Japanese.

実装するアーキテクチャは図 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 (クリックすると拡大します)

Architecture diagram in Japanese showing AWS Client VPN integration with Amazon Route 53 and a VPC. Illustrates VPN client access, endpoint, subnets, Route 53 Private Hosted Zone, resolver, EC2 server, and supporting services such as ACM and CloudWatch.

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

This architecture diagram illustrates the setup and components of AWS Client VPN, including client VPN endpoints, subnets, Route 53, CloudWatch, and ACM, with labels and annotations in Japanese.

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

Architecture diagram showing the AWS Client VPN setup, including VPN client, endpoint, VPC, subnets, Amazon Route 53, EC2 instance, ACM, and CloudWatch, with all labels in Japanese.

図 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

Architecture diagram demonstrating the integration of AWS Client VPN, Amazon Route 53, Virtual Private Cloud (VPC), subnets, and EC2 instance connectivity, including endpoints, resolvers, ACM certificate management, and CloudWatch logging. Labels include both English and Japanese.

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

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

Architecture diagram depicting an AWS Client VPN setup integrated with Amazon Route 53 Private Hosted Zone. The architecture includes a VPN client, a client VPN endpoint, subnets across multiple availability zones, Amazon Route 53 Resolver, EC2 instance, and supporting services like ACM and CloudWatch for certificate and log management.

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

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

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

Screenshot of the AWS Route 53 console in Japanese, showing the interface for creating a hosted zone.

ホストゾーンの作成

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

  • ドメイン名 : example.com

  • タイプ : プライベートホストゾーン

  • ホストゾーンに関連づける VPC

    • リージョン : 東京

    • VPC ID : 作成した VPC (cvpn-hands-on

    • リージョン : 東京

    • VPC ID : 作成した VPC (cvpn-hands-on

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

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

Screenshot showing the Japanese interface for creating a private hosted zone in AWS Route 53, with example domain, private zone selection, and VPC region details highlighted.

確認

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

Screenshot of the Amazon Route 53 console showing the hosted zone for example.com with Japanese user interface. The interface displays confirmation that the hosted zone was created successfully and lists NS and SOA records in the DNS configuration.

レコードの登録

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

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

Screenshot of the AWS Route 53 console in Japanese, showing the details for the hosted zone 'example.com' and the process to create a new DNS record.

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

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

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

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

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

Architecture diagram showing the integration of AWS Client VPN, Amazon Route 53 Private Hosted Zone, and associated components such as subnets, EC2, ENIs, ACM, and CloudWatch logging. The flow describes a VPN client connection to internal resources and DNS resolution within a VPC.

利用中の VPC を選択

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

Screenshot of the AWS VPC (Virtual Private Cloud) dashboard interface in Japanese, showing a list of VPCs with their statuses, IDs, and CIDR blocks.

VPC の設定を編集

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

Screenshot of the AWS Management Console in Japanese, showing the Virtual Private Cloud (VPC) settings edit screen for the 'cvpn-hands-on' VPC. The interface displays VPC details and highlights the action to edit VPC settings.

DNS 設定

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

AWSマネジメントコンソールのAmazon VPC設定画面におけるDNS設定編集(日本語インターフェース)のスクリーンショット。DNS解決とDNSホスト名の有効化オプションが選択されている様子が表示されています。

確認

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

Screenshot of the AWS VPC dashboard in Japanese showing the successful settings update for the 'cvpn-hands-on' VPC. The interface displays VPC details, status as Available, and session navigation in Japanese.

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 となります。

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

クライアント VPN エンドポイントを変更

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

Screenshot of the AWS Management Console in Japanese showing the Client VPN Endpoint management section, highlighting options for endpoint selection and actions such as creating and changing VPN endpoints.

設定

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

Screenshot of the AWS Client VPN endpoint options configuration page in Japanese, showing settings for DNS server, VPC ID, security group ID, VPN port, and session timeout.

確認

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

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

Screenshot of the AWS Management Console in Japanese showing the successful rename of a VPC Client VPN endpoint. The notification at the top confirms that the endpoint 'cvpn-endpoint-057f2ad6af5333252 / cvpn-hands-on' was changed successfully. The interface displays VPN endpoint details, including endpoint ID and CIDR.

3. 疎通確認

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

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

ping コマンドを実行

コマンド

bash
% 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 コマンドのレスポンスがない場合

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

Screenshot of the AWS EC2 console showing security group settings for an instance named 'Server1'. The interface and security group rules are displayed in Japanese, highlighting inbound rules and instance details.

4. まとめ

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

筆者プロフィール

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

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

A person standing and smiling on a mountain summit next to a large white stone sculpture with a circular opening, with scenic mountains and sky in the background.