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の魔法」を使いこなしてみてくださいね。
次回の記事では、このエンドポイントを守る「セキュリティグループの泥臭い運用術」について深掘りしていこうと思います。それでは、良きクラウドライフを!
コメント