AWS VPC+RDS~クローズドネットワーク環境からVPN経由でRDSに接続できない?

先日、AWS VPCとRDSを組み合わせた案件でハマったことがありました。

ネットワーク構成は下図のとおり。

AWS VPC+RDSネットワーク構成1


 

VPC内にWebサーバー(Windows Server)をEC2で、DBサーバーをRDS(SQL Server)で用意するのは一般的な構成ですね。
今回は、クローズドな(=インターネットに繋がらない)お客様社内環境とVPN接続し、お客様社内にあるWindows PC上のクライアントアプリから、DBサーバーに接続する必要がありました。

ところが、クライアントアプリのDB接続先として、RDSのエンドポイント xxx.ap-northeast-1.rds.amazonaws.com を指定しても、DB接続エラーとなります。
クローズドネットワーク環境ではのDNSキャッシュサーバーが用意されておらず、エンドポイントからIPアドレスの解決ができないため、アクセスできないのです。

なお、VPCを作成した場合、デフォルトでは、VPC ネットワークの範囲に2をプラスしたIPアドレス(今回のケースでは 172.16.0.2)でDNSキャッシュサーバーが用意されています。
ですが、このDNSキャッシュサーバーはEC2インスタンスが使用するために用意されており、外部(今回のケースのお客様社内ネットワークなど)からはアクセスできません。

(参考)
AWS Documentation – VPCでのDNSの使用
http://docs.aws.amazon.com/ja_jp/AmazonVPC/latest/UserGuide/vpc-dns.html

そのため、今回は、VPC内にEC2でbindによるDNSキャッシュサーバーを新たに用意することで対応しました。
ネットワーク構成は下図のとおり。

AWS VPC+RDSネットワーク構成2


 

このDNSキャッシュサーバーをお客様社内PCのDNSサーバーとして指定したところ、エンドポイントからIPアドレス 172.16.1.x が引けるようになり、無事DBに接続できました。
DNSキャッシュサーバーは、冗長化のため2台用意しました。
料金については、EC2のインスタンスタイプはt2.microで、1台あたり2,000円弱/月、2台でも4,000円弱/月程度です。

※Webサーバー上でDNSキャッシュサービスを立ててもよいのですが、今回はサーバーごとに機能を明確に分けるため、DNSキャッシュサーバー専用のEC2インスタンスを用意することにしました。

クローズドなネットワーク環境からVPN経由で、RDSのようなエンドポイントにアクセスする際は要注意、ということで。

Follow me!