【入門編】 インターフェイス型VPCエンドポイント(AWS PrivateLink)のDNS名前解決の仕組み – クラウドインフラと仮想化ネットワーク実践ガイド

AWSの「裏口」を賢く使う!PrivateLinkとDNSの魔法を紐解く旅へ

こんにちは!クラウドインフラの深淵を日々旅しているSREです。

AWSを触り始めると、必ず一度は頭を悩ませるのが「ネットワーク」という広大な迷宮ですよね。「パブリックサブネット?プライベートサブネット?え、インターネットに出られないのになんでS3と通信できるの?」――そんな疑問、誰しも一度は抱くものです。

今回は、AWSのサービスをプライベートな空間から安全に、かつスマートに呼び出すための「AWS PrivateLink(インターフェイス型VPCエンドポイント)」のDNSの秘密を、専門用語の壁を崩しながら一緒に紐解いていきましょう。

—

郵便配達の仕組みで例えると?

まず、私たちが普段ネットでS3やDynamoDBにアクセスする時、それは「世界中の誰でも使える公道(インターネット)」を通って届け物をするようなものです。しかし、セキュリティが厳しい環境では「公道は使いたくない、専用の地下トンネルを通らせたい」というニーズが生まれます。

これが VPCエンドポイント の正体です。

本来なら s3.amazonaws.com という宛先は、インターネットという広大な世界の住所(パブリックIPアドレス)を指しています。でも、PrivateLinkを使うと、この宛先を「あなたのVPC内にある特定の郵便受け(プライベートIPアドレス)」にすり替えることができるんです。

この「宛先のすり替え」を裏で支えているのが、DNS名前解決の魔法です。

—

なぜDNSの「すり替え」が必要なのか?

AWSのサービスは、デフォルトではインターネット上のパブリックな住所を案内するように設定されています。でも、皆さんのアプリケーションから s3.amazonaws.com と送ったときに、わざわざ遠回りしてインターネットに出る必要はありませんよね。

そこで、Route 53の「プライベートホストゾーン」という仕組みを使います。

1. 通常: s3.amazonaws.com を問い合わせると、AWSから「世界共通のパブリックIP」が返ってくる。
2. PrivateLink導入後: あなたのVPCの中に「プライベートホストゾーン」という地図を置く。
3. 解決!: アプリが s3.amazonaws.com を探すと、Route 53が「あ、それならうちのVPC内にあるこのIPアドレス(エンドポイント)に行ってね!」と、内線番号を教えてくれる。

この仕組みのおかげで、アプリ側は「相手がインターネット上にいるのか、隣の部屋(VPC内)にいるのか」を意識することなく、ただ指示を出すだけで安全な通信が成立するのです。

—

手を動かしてみよう:PrivateLinkの設定

では、実際に現場でよく使う「プライベートDNS名」を有効化する設定を見てみましょう。TerraformなどのIaCツールでもおなじみの設定項目です。

1. VPCエンドポイントを作成する際の設定

VPCエンドポイントを作る際、private_dns_enabled という魔法のスイッチを true にします。これを忘れると、DNSのすり替えが自動で行われません。

# Terraformでの設定例
resource "aws_vpc_endpoint" "s3" {
  vpc_id              = aws_vpc.main.id
  service_name        = "com.amazonaws.ap-northeast-1.s3"
  vpc_endpoint_type   = "Interface" # インターフェイス型を選択
  
  # これをtrueにすることで、AWS側が勝手にRoute 53の設定を整えてくれます
  private_dns_enabled = true 
  
  subnet_ids          = [aws_subnet.private.id]
  security_group_ids  = [aws_security_group.endpoint_sg.id]
}

2. 確認コマンド(digやnslookup)

実際にDNSが正しく解決されているか、インスタンスの中から確認してみましょう。

# S3のエンドポイント名に対して名前解決を試みる
dig s3.ap-northeast-1.amazonaws.com

# 結果の中に、VPC内のプライベートIP(10.0.x.xなど)が表示されれば成功です!

もしここで「パブリックIP」が表示されたら、それはDNS設定がうまくいっていません。VPCのDNS設定(enableDnsSupport と enableDnsHostnames)が true になっているか、今一度確認してみてくださいね。

—

SREからのワンポイントアドバイス

現場でよくあるトラブルの一つが、「カスタムDNSを使っている場合に名前解決できない」というケースです。

AWSのプライベートホストゾーンは、AWS標準のDNSサーバー(VPC CIDR + 2 のアドレス)に対してのみ有効です。もし皆さんが 8.8.8.8 などの外部DNSを使っていたり、自前のDNSサーバーを構築している場合は、「Route 53 Resolver(Inbound/Outbound Endpoint)」を使って、DNSの問い合わせをAWSのインフラに転送してあげる工夫が必要です。

—

最後に

「DNSの名前解決」と聞くと難しく感じますが、要は「目的地までの最短ルートを教えてくれる案内係」だと捉えれば怖くありません。

PrivateLinkを使うことで、インターネットの荒波に出ることなく、AWSの強力なサービス群を安全に、そして高速に利用できます。皆さんのインフラ構築の現場で、ぜひこの「DNSの魔法」を使いこなしてみてくださいね。

次回の記事では、このエンドポイントを守る「セキュリティグループの泥臭い運用術」について深掘りしていこうと思います。それでは、良きクラウドライフを!

コメント

タイトルとURLをコピーしました