見出し画像

AWS:VPCエンドポイントの注意点と設計を考える

皆さん、こんばんは。ちゃみみです。

そろそろ夏の暑い温度も少しは収まりどころを見出してきたかという所ですが、本日はAWSのVPCエンドポイントの注意点や設計を考えるというところを中心に書いていきたいと思います。

具体的には、こちらのブログは私が問い合わせを受けたりPJを進めるうえで詰まった部分を備忘録的に紹介をしているわけなんですが、今回は前者のほうで確かにそうだよな、、、ということがあったので記録として残しておこうと思います。
このブログを中心に色々なところでご紹介、対応頂いている記事のプラットフォーム的な立ち位置で色々集約していければと思っています。(傲慢ではありますが私がつまるところは他の皆さんも同じく詰る可能性もあるわけでww)

早速ですが、AWS VPCエンドポイントですが、端的にVPC内のサービスがVPC外のサービスにアクセスをしようとするときに通常であればインターネットを経由してアクセスすることが前提となりますが、通信をセキュアにしたいなどという観点で直接VPC内⇔VPC外のサービスとアクセスさせちゃおうというものになります。

こうしてみるとVPCエンドポイントって結構いいもんじゃん!!ってなると思うんですよね。
だけど、メリットばかりだけじゃなくてしっかりデメリットもありまして、今からそれを書いていこうと思います。
メリットは、上記の点になりますが、デメリットは大きく分けて2点あると考えます。
1点目は、一つのAZには複数のサブネットが存在していも1つのインターフェイス型のエンドポイントに紐づけられるのは1つだけとなります。
※イメージはS3にアクセスしている様子ですが、S3は対象外となりますので他のサービスに置き換えて考えてください。

2点目がこれが痛くて、エンドポイントの設定にはプライベートDNSのON/OFFという設定があるのですが基本はONにしておかないとDNS解決ができないのでONにしておくのですが、これが上記のパターンでいうと、1つのエンドポイントでプライベートDNSをONにすると2つ目以降同じサービスでエンドポイントを構成しようとすると、仕様でエラーが出てしまうという。。。
←筆者は、これでCloudwathLogsとかにEC2などのメトリクスやログを送信するときにプライベートDNSを有効にできずにメトリクスなどが取れなかった経緯があり非常に厄介な問題だと認識しています。。

で、このプライベートDNSなんですが端的に名前解決できねぇじゃんって話なんですがもう少しブレークダウンして説明をすると、サービス固有のDNSホスト名は、プライベートサブネットにあるサービスが使おうとすると、この設定がOFFになっている利用不可となっている点です。
CloudwathLogs系でもエンドポイントの話ってどこにでもあると思うんですが、↑のサービス固有のDNSホスト名が名前解決できなかったためにメトリクスなどが送れなかった問題があったんだと今なら思えますが、じゃあ逆に他のDNSホスト名だったら行けたんじゃ、、、となるかもしれないが、その設定の仕方もわからんしというところなので気を付けましょうという感じです。(エンドポイントのURLを指定できないようなサービスは、この問題に間違いなく直面するので気を付けましょう)
参照URL:

一応、エンドポイントのURLが指定できるサービスの場合は、以下のような回避方法があるとのことでAWSサポートより回答を頂いているので参考までに掲載を。。。
===原文ママ===
ご認識のように、インターフェイスエンドポイントをプライベート DNS 名を無効として作成した場合、サービスのデフォルトの DNS 名(ec2.us-east-1.amazonaws.com等)を使用してアクセスすることはできません。 しかしながら、インターフェイスエンドポイントへアクセスするには複数の方法がございます。上記のような、プライベート DNS 名を有効としてサービスのデフォルトの DNS 名を使用する以外に、エンドポイント固有の DNS 名(vpce-XXXXXXX-XXXXX.ec2.us-east-1.vpce.amazonaws.com 等)を指定して使用する等の方法がございます [2]。プライベート DNS 名を無効として作成した インターフェイスエンドポイントを使用する場合は AWS CLI の --endpoint-url パラメータを指定して使用する等の必要があるとお考え頂けますでしょうか。詳細は以下のドキュメントをご参照頂けますでしょうか [2]。
アクセスの際に AWS CLI の --endpoint-url パラメータを指定して使用する等にてご利用頂くことが可能でございます。または、インスタンスやご利用の DNS サーバーにてデフォルトの DNS 名を対象の インターフェイスエンドのプライベートアドレスに解決するように設定する等も考えられるかと存じます。
[1]インターフェイスエンドポイントのプライベート DNS https://docs.aws.amazon.com/ja_jp/vpc/latest/privatelink/vpce-interface.html#vpce-private-dns
[2]インターフェイスエンドポイントを介したサービスへアクセスする https://docs.aws.amazon.com/ja_jp/vpc/latest/privatelink/vpce-interface.html#access-service-though-endpoint
===原文ママ===


アタシも一昔前までは、とりあえずプライベートサブネットは困ったらエンドポイントを作成しておけばいいんじゃね?と気軽に考えていた時期もあったのですが、こういった名前解決ができない≒(↑の例でいえばメトリクスが行えないなど)サービス疎通に支障が出る 場合には、サブネットの構成含めてしっかりと検討する必要があるのでNWレベルでしっかりと設計を考えていきましょう。

こちらの件についても親切に記載頂いている記事があったのでご紹介をさせて頂きます。
参考URL:


では、次回の記事でお会いしましょう。

以下、宣伝です。
仲間も募集中なので、気になる方は↓の記事を覗いてみてくださいませ。
いい会社だと思いますよ。


いいなと思ったら応援しよう!