Amazon Web Services ブログ
Amazon S3 のプライベート DNS サポートのご紹介
このブログは 2023 年 6 月 16 日に Sumiran Tandon(Senior Product Manager)と、Rohit Aswani(Senior Specialist Solutions Architect)、Shubham Singh(Senior Network Specialist Solutions Architect)によって執筆された内容を日本語化したものです。原文はこちらを参照してください。
オンプレミスで利用しているアプリケーションがクラウドのストレージを使用する場合、コンプライアンス要件によりプライベート接続が義務付けられることがよくあります。これらの要件を満たすため、お客様は AWS Direct Connect や、AWS Site-to-Site VPN 接続経由で AWS PrivateLink を使用して、Amazon S3(S3) へのプライベート接続を構成します。その結果、AWS 間とデータが直接送信され、パブリックインターネットは経由しません。AWS PrivateLink を使用すると、Amazon Virtual Private Cloud(VPC)にインターフェイスエンドポイントをプロビジョニングして、プライベート IP アドレスを S3 に割り当てます。AWS PrivateLink は、これらのプライベート IP に対してグローバルで一意のパブリック DNS 名を自動的にプロビジョニングします。アプリケーションはこのパブリック DNS 名を使用して S3 にアクセスできます。S3 のリージョナル名(s3.<Region>.amazonaws.com)を使用する際に、オンプレミスのクライアントがこれらのプライベート IP アドレスを指すように、オンプレミスでカスタム DNS エントリを作成できますが、オペレーションのオーバーヘッドが増え管理が困難になるため、この方法はお勧めできません。
プライベート接続の DNS 設定を簡素化するために、S3 インターフェイス VPC エンドポイントでプライベート DNS オプションをサポートしました。S3 のプライベート DNS を使用することで、オンプレミスのアプリケーションからは AWS PrivateLink を使用してインターフェイス VPC エンドポイント経由で S3 にアクセスができ、VPC 内のアプリケーションからのリクエストについてはゲートウェイ VPC エンドポイントを使用して S3 にアクセスできます。このようにリクエストをルーティングすることで、コードの作成やクライアントの設定を変更しなくても低コストでプライベートネットワーク接続を活用できます。
この記事では、AWS PrivateLink を使用してプライベート DNS で S3 にアクセスする方法を説明します。また、さまざまなシナリオの設定オプションについて検討し、クライアントがゲートウェイ VPC エンドポイントとインターフェイス VPC エンドポイントを経由して S3 に接続していることを確認する方法について説明します。
S3 VPC エンドポイント
VPC から S3 への接続に使用できる VPC エンドポイントには、ゲートウェイエンドポイントとインターフェイスエンドポイントの 2 種類があります。
ゲートウェイ VPC エンドポイントは、インターネットゲートウェイや VPC の NAT デバイスを必要とせずに、S3 または Amazon DynamoDB への信頼性の高い接続を提供します。ゲートウェイ VPC エンドポイントは AWS マネジメントコンソールで数回クリックするだけで設定でき、VPC ルートテーブルを使用して VPC 内のクライアントからのリクエストを AWS ネットワーク経由で S3 または Amazon DynamoDB のパブリック IP にルーティングできます。ゲートウェイ VPC エンドポイントには追加料金がかからず、ゲートウェイエンドポイントが作成された各 VPC のローカルリソースからの接続のみがサポートされます。
インターフェイス VPC エンドポイントは、AWS PrivateLink を使用して 140 を超える AWS サービスとサードパーティ SaaS アプリケーションにプライベート接続を提供します。インターフェイス VPC エンドポイントは、VPC サブネットにプライベート IP アドレスを持つ Elastic Network Interface(ENI)を作成します。インターフェイス VPC エンドポイントは、AWS Direct Connect または AWS Site-to-Site VPN を介したオンプレミスからの接続をサポートします。インターフェイス VPC エンドポイントを設定すると、VPC 内とオンプレミスの両方から名前解決が可能な AWS PrivateLink が提供するエンドポイントのパブリック DNS 名が作成できます。インターフェイス VPC エンドポイントには 2 つの料金があります。1 つは各アベイラビリティーゾーンでプロビジョニングされる各 VPC エンドポイントの時間単位の料金で、もう 1 つは GB 単位のデータ処理料金です。料金の詳細については、AWS PrivateLink の料金ページをご覧ください。
S3 にアクセスする最もコスト効率の高い方法は、可能であれば ゲートウェイ VPC エンドポイントを使用(例:リージョンの Amazon EC2 インスタンスからの接続)し、オンプレミスなど他の場所からの接続の場合は インターフェイス VPC エンドポイントを使用することです。
プライベート DNS 名で S3 インターフェイスエンドポイントにアクセス
図 1 は、AWS Direct Connect または AWS Site-to-Site VPN を介してオンプレミスから接続するハイブリッドネットワーク設定を示しています。このセットアップでは、Amazon Route 53 インバウンド Resolver エンドポイントを設定し、オンプレミスの DNS リゾルバーで条件付きフォワードを設定して DNS クエリをインバウンド Resolver エンドポイントのプライベート IP アドレスに転送します。次に、S3 のインターフェイス VPC エンドポイントを作成すると、プライベート DNS 名を有効にするオプションが表示されます。
図 1: AWS Direct Connectまたは AWS Site-to-Site VPN 経由でオンプレミスから接続する構成
S3 インターフェイス VPC エンドポイントのプライベート DNS を有効にすると、AWS はプライベートホストゾーンを作成し、VPC に関連付けます。このホストゾーンには、以下の S3 DNS 名のプライベート IP を持つインターフェイス VPC エンドポイントのリソースレコードが含まれます。
- リージョナルバケット(例:s3.<Region>.amazonaws.com)
- コントロール(例:s3-control.<Region>.amazonaws.com)
- アクセスポイント(例:s3-accesspoint.<Region>.amazonaws.com)
サービスのリージョナルや、コントロール、アクセスポイントのエンドポイントにリクエストをすることで、S3 への AWS の プライベートネットワーク接続が使用できます。詳細については「Amazon S3 用の AWS PrivateLink」のドキュメントを参照してください。
図 1 のウォークスルー
- オンプレミスのクライアントより、リージョナル S3 バケットをターゲットにした DNS クエリを実施します。
- オンプレミスの DNS サーバーは、AWS Site-to-Site VPN または AWS Direct Connect 接続を介して、S3 インターフェイス VPC エンドポイントを持つ同じ VPC に関連付けられている各 Route 53 インバウンド Resolver エンドポイントにクエリを転送します。
- Route 53 インバウンド Resolver エンドポイントは、クエリを AWS が管理する Route 53 ホストゾーンに転送し、DNS 応答で S3 インターフェイス VPC エンドポイントの IP アドレスを返します。
- オンプレミスのクライアントは、S3 インターフェイス VPC エンドポイントへ接続します。
- S3 インターフェイスエンドポイントは、クライアントのクエリを AWS PrivateLink 経由で指定された S3 バケットに転送します。
New:インバウンドエンドポイントのみプライベート DNS を有効にする
多くのお客様は、オンプレミスと AWS リージョンでアプリケーションを所有しており、どちらも同じ VPC の S3 にデータが格納されています。これらのお客様から、オンプレミスからのトラフィックをインターフェイスエンドポイント経由でルーティングし、AWS 内からのトラフィックをゲートウェイエンドポイント経由で簡単にルーティングする方法が欲しいと言われていました。この課題を解決するために、「インバウンドエンドポイントのみプライベート DNS を有効にする(Enable private DNS only for inbound endpoint)」オプションを導入しました。S3 インターフェイスエンドポイントの「DNS 名を有効化」を有効にすると、「インバウンドエンドポイントのみプライベート DNS を有効にする(Enable private DNS only for inbound endpoint)」オプションがデフォルトで有効になります。この場合、オンプレミスから S3 への DNS クエリについては S3 インターフェイスエンドポイントのプライベート IP アドレスに名前解決され、 同じ VPC 内のリソースから S3 への DNS クエリについては引き続きゲートウェイ VPC エンドポイントを使用して S3 のパブリック IP アドレスに名前解決されます。この設定が機能するためには、VPC にゲートウェイエンドポイントが構成されている必要があります。VPC にゲートウェイエンドポイントが構成されていない場合にこの設定を有効にしようとすると、AWS マネジメントコンソールに以下のエラーが表示されます(図 2)。
「To set PrivateDnsOnlyForInboundResolverEndpoint to true, the VPC <vpce_id> must have a Gateway endpoint for the service.」
これを解決するには、VPC にゲートウェイエンドポイントを作成してください。または「インバウンドエンドポイントのみプライベート DNS を有効にする(Enable private DNS only for inbound endpoint)」を無効にして、すべてのトラフィックをインターフェイスエンドポイント経由でルーティングすることもできます。
図 2: PrivateDNSonlyForInboundEndpoint が有効かつゲートウェインエンドポイント未構成時のエラー
前提条件
まず、以下の前提条件が満たされていることを確認してください。
- VPC エンドポイント経由で接続したい S3 バケットと同じリージョンに VPC を作成します。EnableDNShostNames と EnableDNSSupport の属性が true に設定されていることを確認してください。
- プライベート仮想インターフェイス(VIF)を使用した AWS Direct Connect 接続もしくは AWS Site-to-Site VPN 接続を作成して、データセンターとの接続を確立してください。
- 手順 1 で作成した VPC に S3 のゲートウェイ VPC エンドポイントを作成し、「インバウンドエンドポイントのみプライベート DNS を有効にする(Enable private DNS only for inbound endpoint)」を有効にしてください。
S3 インターフェイス VPC エンドポイント作成とプライベート DNS オプション有効化
- S3 インターフェイス VPC エンドポイントを作成するために、VPC コンソールに移動し「エンドポイント」を選択し、「エンドポイントを作成」をクリックしてください。
- 「サービスカテゴリ」で「AWS のサービス」を選択します。次に、検索ボックスに「S3」を入力してサービス名をフィルタリングします。「サービス名」のサービスが「S3」となっており、「タイプ」が「Interface」と表示されていることを確認してください(図 3a)。
図 3a: S3 インターフェイスエンドポイント作成
- VPC とアベイラビリティーゾーン、サブネットをそれぞれ選択し、適切なセキュリティグループを選択します。セキュリティグループには、オンプレミスネットワークからのポート 443 のインンバウンドトラフィックを許可するよう構成してください。
- 「追加設定」 で、インターフェイスエンドポイントの「DNS 名を有効化」を選択します。デフォルトで「インバウンドエンドポイントのみプライベート DNS を有効にする(Enable private DNS only for inbound endpoint)」は選択されており、VPC 内部からのトラフィックはゲートウェイ VPC エンドポイントを経由し、オンプレミスからのトラフィックはインターフェイス VPC エンドポイントを経由します。
- 「エンドポイントを作成」 を選択します。以下のスクリーンショット(図 3b)を参照してください。
図 3b: プライベート DNS オプションの有効化
エンドポイントはさまざまなステータスを経て作成されるため少々時間がかかります。インターフェイスエンドポイントのステータスが「使用可能」になったら、「詳細」を選択して設定を表示できます(図 4a)。「DNS 名」フィールドに、サービスへのアクセスに使用される DNS 名が表示されます。プライベート DNS を有効にすると、デフォルトの S3 リージョン DNS 名も表示されます。
図 4a: インターフェイス VPC エンドポイントの詳細
「サブネット」を選択すると、インターフェイスエンドポイントの場所や、各サブネットのエンドポイントネットワークインターフェイス ID が表示されます。以下のスクリーンショット(図 4b)では、VPC のエンドポイントネットワークインターフェイスのプライベート IP アドレスは 10.0.4.122 と 10.0.23.155 となっています。
図 4b: インターフェイス VPC エンドポイントのサブネット情報
プライベート DNS オプションのシナリオ
S3 ゲートウェイとインターフェイス VPC エンドポイントを使用して、VPC とオンプレミスでホストされているアプリケーションから S3 へのクライアント接続に影響を与える DNS オプションのさまざまな組み合わせについて理解しましょう。
シナリオ 1:プライベート DNS 無効
この構成では、ゲートウェイエンドポイントが作成された VPC 内のクライアントからのトラフィックは S3 リージョナルエンドポイントに接続できます。VPC 外のクライアント(オンプレミスまたは相互接続された別の VPC)からは、エンドポイント固有の DNS 名を使用するか、このブログで説明しているオプションを使用して S3 に接続できます。プライベート DNS が false に設定されている場合、「インバウンドエンドポイントのみプライベート DNS を有効にする(Enable private DNS only for inbound endpoint)」は設定できません。
このオプションは、独自のプライベートホストゾーンでプライベート DNS 名を柔軟に管理したい場合に便利です。
ゲートウェイエンドポイントを使用する VPC 内のクライアント
エンドポイント固有の DNS 名を使用する VPC またはオンプレミスのクライアント
上記の出力結果では、VPC 内のクライアントが S3 サービスエンドポイントのパブリック IP アドレスに名前解決されているのに対して、データセンターのクライアントは S3 の VPC エンドポイント ENI IP アドレスに名前解決されていることを示しています。
シナリオ 2:プライベート DNS 有効
この構成では、VPC 内トラフィックとオンプレミストラフィックの両方が S3 インターフェイス VPC エンドポイントを経由して流れます。このオプションは DNS の管理を簡素化するので、1 種類のエンドポイントのみを使用するようにアーキテクチャをシンプルにしたい場合に便利です。ただし、VPC のリソースから S3 へのトラフィックに対して、S3 インターフェイス VPC エンドポイントのデータ転送料金も発生するため、コスト効率の高いソリューションではありません。図 5 に示すように、緑と青の色は VPC とオンプレミス環境内の EC2 インスタンスから S3 インターフェイス VPC エンドポイントを経由してトラフィックが流れていることを示しています。
図 5: 「プライベート DNS」を有効、「インバウンドエンドポイントのみプライベート DNS を有効にする」を無効
図 5 のウォークスルー
手順 1 ~ 5 はすべて図 1 で説明した内容と同じです。ただし、 「プライベート DNS」が有効になっているため、VPC 内およびオンプレミスのクライアントのみが S3 インターフェイス VPC エンドポイント経由で S3 に接続します。
VPC 内のクライアント
オンプレミスアプリケーションのクライアント
上記の出力結果は、VPC 内のクライアントとオンプレミスのクライアントの両方が S3 VPC エンドポイント ENI IP アドレスに解決されていることを示しています。
シナリオ 3:インバウンド Resolver エンドポイントのみにプライベート DNS を使用する
この構成では、VPC 内のアプリケーションからのトラフィックはゲートウェイ VPC エンドポイントを経由し、オンプレミスからのトラフィックは S3 インターフェイス VPC エンドポイントを経由します。このオプションでは、VPC およびオンプレミスアプリケーション内から S3 にアクセスする際に費用対効果の高いネットワーク設計を提供します。この構成を選択する際には、VPC 内のゲートウェイ VPC エンドポイントを維持する必要があります。これは、トラフィックが常に AWS プライベートネットワーク上に留まるようにするためです。ゲートウェイエンドポイントがない場合に、VPC 内のトラフィックが誤ってインターネットゲートウェイを経由したり、インターネットゲートウェイがない場合にドロップされる可能性を排除できます。このため、アプリケーションを実行している VPC にゲートウェイ VPC エンドポイントが存在しない場合は「インバウンドエンドポイントのみプライベート DNS を有効にする(Enable private DNS only for inbound endpoint)」オプションが選択できなくなります。既存のインターフェイスエンドポイントを「インバウンドエンドポイントのみプライベート DNS を有効にする(Enable private DNS only for inbound endpoint)」に更新したい場合は、VPC に S3 ゲートウェイ VPC エンドポイントが構成されていることを確認する必要があります。ゲートウェイ VPC エンドポイントとプライベート DNS 名の管理の詳細については、AWS PrivateLink ガイドの「ゲートウェイエンドポイント」と「VPC エンドポイントサービスの DNS 名を管理する」をそれぞれ参照してください。
図 6 では、青いパスはゲートウェイ VPC エンドポイントを経由する VPC 内の Amazon EC2 インスタンスからのトラフィック示しており、緑のパスはインターフェイス VPC エンドポイントを使用するオンプレミスから S3 へのトラフィックフローを示しています。
図 6: 「プライベート DNS」を有効、「インバウンドエンドポイントのみプライベート DNS を有効にする」を有効
図 6 のウォークスルー
手順 1 ~ 5 はすべて図 1 説明した内容と同じです。ただし、「プライベート DNS」と「インバウンドエンドポイントのみプライベート DNS を有効にする(Enable private DNS only for inbound endpoint)」の両方が有効になっているため、VPC 内のクライアントは S3 のゲートウェイ VPC エンドポイント経由で S3 に接続し、オンプレミスのクライアントは S3 のインターフェイス VPC エンドポイント経由で S3 に接続します。
ゲートウェイエンドポイントを使用する VPC 内のクライアント
インターフェイスエンドポイントを使用するオンプレミスのクライアント
「プライベート DNS」と「インバウンドエンドポイントのみプライベート DNS を有効にする(Enable private DNS only for inbound endpoint)」 の両方が有効になっている場合は、ゲートウェイ VPC エンドポイントを削除できません。削除しようとすると、以下のエラーが出力されます。
「Gateway endpoint cannot be deleted while Interface endpoint for the service has PrivateDnsOnlyForInboundResolverEndpoint set to true.」
上記が発生した場合にゲートウェイ VPC エンドポイントを削除するには、インターフェイス VPC エンドポイントを変更し「インバウンドエンドポイントのみプライベート DNS を有効にする(Enable private DNS only for inbound endpoint)」 オプションの選択を解除する必要があります。
まとめ
この記事では、S3 インターフェイス VPC エンドポイントにプライベート DNS を使用して、オンプレミスアプリケーションを変更せずに S3 にアクセスする方法について説明しました。S3 へのネットワーク接続を最適化するために「インバウンドエンドポイントのみプライベート DNS を有効にする(Enable private DNS only for inbound endpoint)」オプションを使用する方法について説明しました。これらのオプションを使用すると、コードの作成やクライアントに設定変更をしなくても、低コストのプライベートネットワーク接続が活用できます。S3 用の AWS PrivateLink の使用を開始するには、このページにアクセスしてください。
S3 用の AWS PrivateLink の詳細については、以下のブログを参照してください。
- Secure hybrid access to Amazon S3 using AWS PrivateLink
- Choosing Your VPC Endpoint Strategy for Amazon S3
- AWS Partners use AWS PrivateLink to connect privately to Amazon S3
翻訳はプロフェッショナルサービス本部の葉山が担当しました。