「インターネットに出ないでAWSサービスを使いたい!」を叶える、VPCエンドポイントのDNSマジックを解き明かす
こんにちは!クラウドインフラの深淵を覗くエンジニアの皆さん。今日は、AWSネットワークの中でも特に「え、なんでそんな動きをするの?」と初心者がつまずきやすい、VPCエンドポイントとDNSの裏側についてお話しします。
「インターネットに繋がっていないサーバーから、どうやってS3やDynamoDBにアクセスするの?」
「なぜデフォルトのURLにアクセスするだけで、勝手にプライベートIPに繋がるの?」
そんな疑問を抱えたことはありませんか?実はこれ、裏側でDNSがかなり「気を利かせた」仕事をしているからなんです。今回は、郵便配達の仕組みに例えて、この不思議な挙動を紐解いていきましょう。
—
1. そもそも「VPCエンドポイント」って何者?
普段、私たちがS3などのAWSサービスにアクセスする際、インターネットという大きな公道を通って、AWSという大きな「本社ビル」まで郵便(リクエスト)を出しています。
しかし、セキュリティ要件が厳しいシステムでは、インターネットへの出口を塞がなければなりません。そこで登場するのが「VPCエンドポイント(Interface型)」です。これは、あなたの家のすぐ隣に「AWSサービス専用の直通郵便局」を建てるようなもの。公道に出ることなく、安全にAWSサービスとやり取りができるようになります。
—
2. なぜURLを変えなくても「直通郵便局」に届くのか?
ここが本題です。本来、s3.ap-northeast-1.amazonaws.com という住所(ホスト名)を入力すると、インターネット上の「公的な住所録(パブリックDNS)」は、パブリックIPアドレスを教えてくれます。
しかし、VPCエンドポイントを作ると、AWSはあなたのVPC専用の「秘密の住所録(プライベートホストゾーン)」をこっそり作成してくれます。
郵便配達で例えるなら…
1. 通常: 「S3に送りたいんだけど」と聞くと、郵便局員が「公道を通って、遠くのS3ビル(パブリックIP)へ行ってください」と案内する。
2. エンドポイント作成後: あなたの家のポストに「S3宛の郵便物は、家の隣にできた専用郵便局(VPCエンドポイントのIP)へ出しなさい」というメモが貼られる。
結果、あなたは宛先(URL)を一切変更することなく、魔法のように「直通郵便局」へ向かうことになるのです。これが、プライベートDNS名による名前解決の正体です。
—
3. 実践:VPCエンドポイントの設定を確認する
実際にAWS CLIでエンドポイントを作成する際、どのようにこの魔法が設定されているか見てみましょう。
# S3用のInterfaceエンドポイントを作成するコマンド例です
aws ec2 create-vpc-endpoint \
--vpc-id vpc-0123456789abcdef0 \
--vpc-endpoint-type Interface \
--service-name com.amazonaws.ap-northeast-1.s3 \
--subnet-ids subnet-0123456789abcdef0 \
--security-group-ids sg-0123456789abcdef0 \
--private-dns-enabled # ← ここが「魔法」のスイッチです!
この --private-dns-enabled オプションこそが、AWSに「このVPC内のDNSクエリを監視して、S3への問い合わせがあったら、パブリックIPではなくエンドポイントのIPを返して!」と命令する重要なスイッチなのです。
—
4. トラブルシューティングの勘所
現場でよくあるのが、「エンドポイントを作ったのに、なぜかパブリックIPに繋がろうとしてタイムアウトする!」というケースです。
もしそんな状況に陥ったら、以下の3点を確認してみてください。
enableDnsHostnamesとenableDnsSupportはTrueか?- VPC自体の設定でDNS機能がOFFになっていては、そもそも魔法が使えません。
private-dns-enabledはONになっているか?- CLIやコンソールで、このフラグが有効か確認してください。
- カスタムDNSサーバーを使っていないか?
- もし社内ネットワークのDNSサーバーを別途使っている場合、AWSの「秘密の住所録」を見に行けていない可能性があります。この場合、Amazon Provided DNS(IPアドレス:VPCのネットワーク範囲の先頭+2)を経由させるよう設計を見直す必要があります。
—
まとめ:DNSは「親切な案内係」
VPCエンドポイントのDNSの仕組みは、一見すると少し難解に見えますが、「目的地(サービス名)はそのままに、案内図(DNSの返答)だけを書き換える」という、非常にシンプルで賢い仕組みで動いています。
私たちが意識せずともAWSがよしなにやってくれる便利な機能ですが、裏側で何が起きているかを知っているだけで、トラブル発生時の「なぜ繋がらないのか?」というパズルが驚くほど早く解けるようになります。
インフラの世界は、一歩ずつ紐解けば必ず理解できるはず。ぜひ皆さんも、自分の環境で dig コマンドを叩いて、どのようなIPが返ってくるか覗いてみてください。その瞬間に、パケットの行き先が見えてくるはずですよ!
それでは、良いクラウドライフを!
コメント