ActiveDirectory環境でSSMをVPCエンドポイント経由で利用する際の注意点

AWS運用自動化サービス「Cloud Automator」

こんにちは、技術3課の城です。

今回はAWSでActiveDirectory(以降、AD)環境にてSSMを利用する上でハマったポイントがあったので、共有したいと思います。

最初にまとめの3行

長くなりそうなので、最初にまとめておきます。

  • SSMをVPCエンドポイント経由で利用するにはAmazonProvidedDNSでの名前解決が必要
  • AD環境での解決策は条件付きフォワーダーの設定
  • 名前解決した際に返されるIPアドレスはフォワーダー先のAmazonProvidedDNSのあるVPCのVPCエンドポイント

ハマったポイント

とある環境にてSSM自体が利用が出来なくなる事象が発生していました。
原因を確認したところ、VPCエンドポイントを構築しているにもかかわらず、外部のIPに対してアクセスしようとしていることが原因でした。
更に調べたところ、インターフェースVPCエンドポイントを利用するにはAmazonProvidedDNSを利用する必要があるようです。
一般的にADサーバーにDNSサーバーを同居させることが多いと思いますが、デフォルトのDNS設定(AmazonProvidedDNS)から向け先を変更したことが原因でした。

実際にssm.ap-northeast-1.amazonaws.comを名前解決してみると、グローバルIPアドレスが返されていました。

構成パターン図

AWS環境にDNS(AD)サーバーが存在する場合

AWS環境のサーバー群がAWS環境のDNS(AD)サーバーを参照します。

オンプレミス環境にDNS(AD)サーバーが存在する場合

AWS環境のサーバー群がオンプレミス環境のDNS(AD)サーバーを参照します。

AWS環境にDNS(AD)サーバーが存在する場合の対応方法

こちらはシンプルで、DNSサーバーの条件付きフォワーダーの設定にて対応可能です。
※そもそものフォワーダーをAmazonProvidedDNSを向けている場合は対応不要ですが、今回は別のDNSサーバーを向いている前提で進めます。
SSMの場合は設定が必要なドメインは下記となります。(東京リージョンの場合)

  • ssm.ap-northeast-1.amazonaws.com
  • ssmmessages.ap-northeast-1.amazonaws.com
  • ec2.ap-northeast-1.amazonaws.com
  • ec2messages.ap-northeast-1.amazonaws.com

条件付きフォワーダーの設定

1.DNS(AD)サーバーにRDPログインします。

2.[スタートメニュー]⇒[Windows 管理ツール]⇒[DNS]とクリックしDNS マネージャーを開きます。

3.[条件付フォワーダー]を右クリックし、[新規条件付きフォワーダー]をクリックします。

4.DNSドメインに上記の対象ドメイン、IPアドレスにAmazonProvidedDNSのIPアドレスを入力し、[OK]をクリックします。


例ではAmazonProvidedDNSのIPアドレスは10.0.0.2となっていますが、VPCのCIDRの第4オクテットに2を足したアドレスとなります。
詳細は下記ドキュメントに記載があります。
https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/VPC_DHCP_Options.html#AmazonDNS

5.項3及び4を登録するドメイン全てで実施します。

6.結果確認
ssm.ap-northeast-1.amazonaws.comを名前解決すると、プライベートIPアドレスが返されています。

オンプレミス環境にDNS(AD)サーバーが存在する場合の対応方法

こちらの場合は、AmazonProvidedDNSはVPC外からのDNSクエリを受け付けないという仕様があるため、Route53リゾルバーのインバウンドエンドポイントを条件付きフォワーダーの宛先として設定する必要があります。
https://docs.aws.amazon.com/ja_jp/Route53/latest/DeveloperGuide/resolver.html#resolver-overview-forward-network-to-vpc

Route53リゾルバー インバウンドエンドポイントの作成

VPCエンドポイントを作成したVPCにインバウンドエンドポイントを作成します。

1.Route53のダッシュボードにて[Inbound Endpoints]をクリックします。

2.[インバウンドエンドポイントの作成]をクリックします。

3.インバウンドエンドポイントの作成画面にて、必要項目を記載、選択していきます。

  • エンドポイント名
  • VPC
  • エンドポイントにアタッチするセキュリティグループ
  • IPアドレス
    • アベイラビリティゾーン
    • サブネット
    • IPアドレス指定 or 自動

※IPアドレスは2つ以上指定する必要があります。

項目の記載、選択が出来たら、[送信]をクリックします。

作成中・・・

出来ました!

5.IDをクリックすると詳細を見ることが出来ます。
赤枠がインバウンドエンドポイントのIPアドレスとなります。

条件付きフォワーダーの設定

オンプレミス環境のDNS(AD)サーバーに条件付きフォワーダーを設定します。
設定方法は前述と同様ですが、フォワード先にインバウンドエンドポイントのIPアドレスを設定すればOKです。

各VPCそれぞれのVPCエンドポイントを利用するには

今回紹介した構成では一つのVPCのエンドポイントを利用しています。
各VPCに作成した、それぞれのVPCエンドポイントを利用させたい場合は、下記の条件が必要なようです。

  • 各VPCにDNS(AD)サーバーを配置
  • 各VPCで異なる条件付きフォワーダーを設定(配置されたVPCのAmazonProvidedDNSを設定)
  • メンバーサーバーのDNSの向け先を各VPCに配置されたDNS(AD)サーバーを設定

終わりに

例えばRDSなどはパブリックの名前解決でプライベートIPアドレスを返してくれるなど、AWSでは上手い具合にやってくれるところも多いですが、やはり利用するサービス仕様をきちんと考慮して設計することが重要ですね。

どなたかの助けになれば幸いです。

AWS運用自動化サービス「Cloud Automator」