こんにちは、ひろかずです
表に出せないDNSレコードを、社外からこっそり引きたい。でもDNSサーバーは管理したくない。という声が聞こえてきたので、一筆書きます
tl;dr的な何か
- Route 53 Private Hosted Zone + Route 53 Resolver + AWS Client VPN で実現できます
- Netskopeが動いていても、AWS Client VPNをSplit tunnelで構成して、Netskope側でAWS上のEC2に紐付けたFQDNをExceptiopnすれば動作します
ざっくり構成
前提条件
- 管理者として操作可能なAWSアカウントを所有していること
- 当該AWSアカウントには、VPCと2つ以上のAvailability Zoneが異なるサブネット、および当該サブネット上に動作確認に使えるEC2が構成されていること
- (オプション)管理者として操作可能なNetskopeテナントを所有していること
参考ドキュメント
- プライベートホストゾーンの使用
- プライベートホストゾーンを使用する場合の考慮事項
- クライアント VPN エンドポイント
- クライアント VPN の開始方法
- VPC とネットワークの間における DNS クエリの解決
- Route 53 Resolver の使用開始
工程
- Security Groupの作成
- プライベートホストゾーンを構成する
- Route 53 Resolver Endpointを構成する
- AWS Client VPNを構成する
- NetskopeでExceptionする(オプション)
- 動作確認
1. Security Groupの作成
- プライベートホストゾーンとRoute 53 Resolver Endpoints、AWS Client VPN Endpointを配置するVPCに以下のSecurity Groupを作成する
1-1. Route 53 Resolver エンドポイント用のSecurity Groupの作成
- インバウンドルールは、以下のように設定する
- アウトバウンドルールは、以下のように設定する
1-2. AWS Client VPN エンドポイント用のSecurity Groupの作成
- インバウンドルールは作成しない
- アウトバウンドルールは、以下のように設定する
2. プライベートホストゾーンを構成する
- AWS管理コンソールからRoute 53管理画面を開いて、ナビゲーションペインの[ホストゾーン]を選択
- [ホストゾーンの作成]を選択
- ドメイン名を入力して、[プライベートホストゾーン]を選択
- 今回は、fnifni.netというドメイン名を設定します
- 既にパブリックホストゾーンとしてfnifni.netを構成していますが、プライベートホストゾーンとして同名のドメイン名を登録可能です
- プライベートホストゾーンを紐付けるVPCとリージョンを指定
- [ホストゾーンの作成]を選択
- 作成したホストゾーン(プライベート)を選択して、DNSレコードを登録
- 今回は、
internal.fnifni.net
というレコード名でAレコードとTXTレコードを登録しました internal.fnifni.net
のAレコードには、動作確認用EC2のプライベートIPアドレスを設定しています
- 今回は、
3. Route 53 Resolver Endpointを構成する
- AWS管理コンソールからRoute 53 Resplverの管理画面を開いて、[エンドポイントの設定]を選択
- プライベートホストゾーンを設定したリージョンが選択されていることを確認
- 今回のユースケースでは、DNSクエリの方向を[インバウンドのみ]を選択して、[次へ]を選択
- エンドポイント名を入力して、プライベートホストゾーンを紐付けたVPCを選択
- 事前に作成した、Route 53 Resolver Endpoint用のSecurity Groupを設定
- IPアドレス#1のアベイラビリティゾーンを選択し、Endpointを配置するサブネットを選択
- IPアドレス#2のアベイラビリティゾーンを選択し、Endpointを配置するサブネットを選択
- 画像は省略
- [次へ]を選択し、[送信]を選択
Route 53 Resolver EndpointのIPアドレスを確認
- AWS管理コンソールからEC2管理画面を開いて、ナビゲーションペインの[ネットワークインタフェース]を選択
- 検索窓で
route
と入力し、表示されたネットワークインタフェースのIPアドレスを控えておく
4. AWS Client VPNを構成する
- 手順は、 [クライアント VPN の開始方法] を参照
- 設定のポイント
- その他のオプションパラメータの項で、DNSサーバー[1,2]IPアドレスとして、控えておいたRoute 53 Resolver EndpointのネットワークインタフェースのIPアドレスを設定
- その他のオプションパラメータの項で、[スプリットトンネルを有効にする]のチェックボックスを有効に設定
5. NetskopeでExceptionする(オプション)
- Netskopeが動作している場合は、AWS環境のEC2のFQDNをExceptionします
- Netskope管理画面から、[Settings] > [Security Cloud Platform] > [Steering Configration] > 対象のSteering Configrationを選択 > [Exceptions] > [NEW EXCEPTION]を選択して、AWS環境のEC2のドメイン
名internal.fnifni.net
を登録
6. 動作確認
- まずは、AWS Client VPNを接続せずに、
internal.fnifni.net
を引いてみます- 引けませんね
- ローカルのDNSを参照してますね
- 次に、AWS Client VPNを接続して、
internal.fnifni.net
を引いてみます- 引けましたね
- Route 53 Resolverのエンドポイントを参照してますね
- そのまま、TXTレコードも引いてみます
- 引けましたね
- Route 53 Resolverのエンドポイントを参照してますね
internal.fnifni.net
にcurlで接続もできます
Netskopeが動作している環境でも、問題なくPrivate Hosted ZoneのDNSレコードが引け、EC2にWebアクセスすることができました。
今日はここまでです