RDSの固定IP化!NLBを使用した静的IPアドレス化とDBのセキュアな他社公開の方法を解説

AWSのRDSを運用する中で、特殊な課題に直面したことはありませんか?
通常、RDSはエンドポイント名を使用して接続するため、IPアドレスが動的に変更されても、DNSの名前解決によってユーザーは接続を継続できます。
しかし、外部の関連会社やグループ会社にRDSを公開する際、特定の状況下でこの方法が通用しないケースがあります。

例えば以下のような状況です。

  • セキュリティポリシーの制約により、DNSの名前解決を他社に連携できない環境
  • ファイアウォールの設定で、特定のIPアドレスのみを許可しており通信の穴あけに時間がかかる環境
  • レガシーシステムや特殊なアプリケーションで、固定IPアドレスでの接続が要求される環境

このような状況下では、RDSの動的IPアドレス変更が大きな課題となります。
接続元の設定変更に追われ、サービスが利用できない時間や運用の負担増大は発生してしまうのです。

今回は、この特殊な課題に対する効果的な解決策をご紹介します。
その鍵となるのが、Network Load Balancer(NLB)の静的IPアドレス機能です。
NLBを活用することで、変化するRDSのIPアドレスに左右されることなく、固定のIPアドレスでRDSに接続できる環境を構築できるのです。

構成

作成したRDSをターゲットグループとしてNLBをフロントに作成しています。
NLBには静的IPアドレスを設定する機能があるので、IPアドレスを固定化することが可能です。

接続元想定のクライアントはEC2として、VPCPeeringでつないでおりますが、RDSのエンドポイントへの名前解決は不可としています。
なので、NLBにつけた静的IPアドレス宛てにDBクライアントソフトから接続を行うことができるような構成としています。
NLBの静的IPアドレスまでネットワーク経路がつながればよいので、クライアントはオンプレミスのDirectConnect経由やTransit Gateway、Site-to-Site VPN経由等でも接続できます。


※RDSとNLBは別サブネットとしてもOKです。

作業前提

  • 今回の接続先のRDSエンジンはPostgreSQLで検証しています。(他のDBエンジンとしては、以前、SQLServerでも同様に検証して接続確認はできています。)
  • RDSは作成済みとしてNLBの作成部分から検証を開始します。
  • RDSのIPアドレスが変更された際には、手動でNLBのターゲットグループを変更する必要がある構成です。

機能検証

NLBの作成

①現在のRDSのIPアドレスをnslookupの名前解決で確認しておきます。


②NLBの作成画面で名前を適当に入れつつ、スキームは「内部」にします。

③サブネットの選択画面でIPアドレスを指定します。
NLBはここで設定したIPアドレスに固定されます。


④その他の設定はデフォルトで進めつつ、ターゲットグループを作成します。
ターゲットタイプは「IPアドレス」でポートはTCPの5432(Postgreのデフォルトポート)を指定します。


⑤IPアドレスの設定画面で、①で確認したIPアドレスを入力します。


⑥作成したターゲットグループをNLBに設定します。これでNLBの作成を開始します。


⑦ロードバランサ属性の設定画面から「クロスゾーン負荷分散を有効にする」にチェックを入れておきましょう。

クライアントアクセス

①クライアントサーバのpsqlクライアントから接続してみます。
コマンドは以下で接続可能です。
psql -h <NLBの静的IPアドレス(どちらのAZのものでも可)> -p 5432 -U postgres -d postgres

RDSのIPアドレス変更時

実際にRDSのIPアドレスを変更してみます。
手動でターゲットグループの更新はいりますが、クライアントから接続するIPアドレスは変更せずに使い続けることが可能です。

①RDSの再起動にてフェイルオーバーを実行します。


②現在のRDSのIPアドレスをnslookupの名前解決で確認しておきます。


③NLBのターゲットグループのターゲットを登録で②で確認したIPアドレスを登録します。



④前回のIPアドレスをターゲットグループから登録解除します。


⑤変更後のIPアドレスのみが登録済みターゲットとなったことを確認します。

⑥クライアントからサイド接続してみます。
接続に利用するコマンドは前回の接続時とまったく同じものを使用します。
psql -h <NLBの静的IPアドレス(どちらのAZのものでも可)> -p 5432 -U postgres -d postgres

補足事項(2025/03/03)

RDSのIPアドレスが変わるために手動でNLBのターゲットグループを変更するのは面倒です。
なので、Lambdaを使用して自動的にIPアドレスを最新のものに再登録してくれる機能を構築しました。

RDS+NLBの構成を取る場合は、一緒に実装することをお勧めします。

まとめ

無事にRDSを固定IP化することができました。
エンドポイントから接続できる環境であれば気にすることはないかもしれませんが、システム構築を行っていると予想しない構成を要求されることもあります。

自社ゾーンの名前解決ができない、他社関係会社にRDSを使わせたいなどと言われてしまうとIPアドレスで接続してもらうか、PrivateLinkを使う等の方法を検討するかとなります。
PrivaetLink案も有力ですが、今回は簡単にNLBを使って固定IP化してみました。こちらであれば、NW的に経路が何とかつながれば使用開始できるので容易に展開ができるためです。
また、NLBが使えるという今回の検証結果があるからこそ、NLBによる他社AWSアカウントを介したPrivateLink方式も案に入れることができるということもあって、こちらを試してみました。

あまり多用する構成ではないと思いますが、RDSとNLBを組み合わせた固定IP化構成が必要となった際には是非参考にしてください。