AWS×GCPマルチクラウド環境でのプライベートDNS名前解決を実現する
株式会社ナレッジワークのSREのtomです。
AWSとGCPのマルチクラウド環境でシステムを構築する際、異なるクラウド間での名前解決は重要な課題になります。特にVPC内部でのみ有効なプライベートDNSを、相互に解決できる仕組みを構築する必要があります。
本記事では、AWSとGCPをVPN接続した上で、クラウド間のプライベートDNS名前解決を行う構成について紹介します。
なお、AWSとGCPのVPN接続については、以下のドキュメントを参考にVPC間でプライベートネットワークを相互に疎通しています(ここでは詳細を割愛します)。
背景と課題
AWSとGCPの各クラウドでは、それぞれ以下のように内部専用のDNSゾーンが用意されていると仮定します。
- AWS:
aws.internal
- GCP:
gcp.internal
これらのゾーンは通常、それぞれのクラウド内VPCからしか解決できません。しかし、マルチクラウド環境でサービス間通信を行う際には、相手クラウドのプライベートホスト名を解決できる必要があります(AWS ALBなどは作成後でもIPアドレスが変更されるため)。
そこで、Route 53(AWS)とCloud DNS(GCP)を組み合わせて、双方向の名前解決を可能にする仕組みを構築しました。
GCPからAWSへの名前解決
まずは、GCPからAWS Route53のPrivateホストゾーンaws.internal
の名前解決について説明します。
AWS側の対応
Route53のResolver Inbound Endpointを作成します。
作成するとIPアドレスが設定されるので、こちらをGCP側の対応で使用します。
GCP側の対応
Cloud DNSのサーバーポリシーとゾーン(フォワーダールール)を作成します。ゾーンでは、aws.internal
ドメインの問い合わせをAWS Route 53のResolver Inbound Endpointに転送するよう設定します(転送先DNSサーバーのロケーションをAWS Route 53のResolver Inbound EndpointのIPで設定)。
公式ドキュメント「転送ゾーンの作成」の転送先ネットワークを確認すると、以下の要件があります。
Cloud DNS は、すべてのお客様に 35.199.192.0/19 ソース範囲を使用します。この範囲には、 Google Cloud VPC ネットワークから、または VPC ネットワークに接続されたオンプレミス ネットワークからのみアクセスできます。
GCPがDNSクエリを転送する際は35.199.192.0/19
のIPが使用されるため、AWS側がこのグローバルIP宛にレスポンスする際に、VPNを経由させる必要があります。
今回、VPN接続のルーティングはBGPを利用したので、Cloud Routerの「アドバタイズされた IP範囲」のカスタムIP範囲に35.199.192.0/19
を設定します。
これにより、GCPから*.aws.internal
のFQDNを解決できるようになります。
AWSからGCPへの名前解決
次にAWSからGCP Cloud DNSのPrivateゾーンgcp.internal
の名前解決について説明します。
GCP側の対応
Cloud DNSでサーバーポリシーの受信クエリ転送を有効化し、gcp.internal
のプライベートゾーンを作成します。
Cloud Firewallにて、AWS VPC範囲からのDNSトラフィックを許可します。
AWS側の対応
Route 53のResolver Outbound Endpointを作成します。
ルールにてgcp.internal
への問い合わせをGCPCloud DNSのサーバーポリシー「受信クエリ転送 IP」を設定します(ターゲットIPアドレスに設定)。
これにより、AWSから*.gcp.internal
のFQDNを解決できるようになります。
まとめ
AWSとGCPのDNSサービスを活用することで、異なるクラウド間での名前解決ができました。
この構成により、アプリケーションから相手クラウドの内部FQDNを解決できるため、マルチクラウド環境におけるサービス連携が実現できます。
Cloud DNSのIP範囲によるルーティングの設定がやや難解ではありますが、マネージドサービスであるため設定自体は簡単にできます。
本記事がAWSとGCPのマルチクラウド環境構築の参考になれば幸いです。
Discussion