VPC内部からAWSサービスへの通信をどのように設計するか？

# はじめに
VPC内部からAWSサービスへの通信っていろいろありますよね。
今回はどうやって通信するか、その特徴と選択肢を解説していきたいと思います。

![スクリーンショット 2024-09-16 10.41.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/584167/b042f067-3b61-6d98-82ff-163de1a655d7.png)

# パターン
パターンとしては以下２つが考えられます。
１．VPCエンドポイント
２．IGW（NATGW利用）
それぞれの特徴を書いていきます。

## VPCエンドポイント
![スクリーンショット 2024-09-16 10.44.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/584167/c062e41d-0fbc-726c-b7a2-2844e0a3d5d0.png)

いわずもがな知られたパターンですが、IGWが存在せずとも、対応するサービスのVPCエンドポイントをVPC内に作成し、ソースとなる通信元からの通信をSGで許可、IAMロールで権限を付与することで、対象サービスへのアクセスが可能となります。

以下に特徴や留意事項を記載します。

・VPC内からプライベートに対象サービスに接続が可能
先ほど書いたものですが、VPC内でインターネット接続がなくとも、エンドポイントを作成するだけで、対象のサービスにセキュアにアクセス可能です。通常エンドポイントとの通信はHTTPSで暗号化されていますので、エンドポイントとの通信についても秘匿性が担保されます。

・コスト
エンドポイント１つあたりにコストが掛かります。
１つあたり東京リージョンだと１時間0.014USDがかかります。
これだけ見ると大したことはないのかなと思うのですが、ポイントはAZごとに作成する必要がある点です。
AZを３つ使っている場合１つのサービスに対して、３つのエンドポイントがないと冗長性が担保できません。そのため、複数のサービスを利用する場合かつマルチAZ構成の場合は、VPCエンドポイント残すとが高額となってしまうケースが散見されます。また、データ処理にも料金がかかることに留意する必要があります。なお、後続で説明しますが、ゲートウェイ型VPCエンドポイントには料金がかかりませんので、ゲートウェイ型は利用することをおすすめします。

https://aws.amazon.com/jp/privatelink/pricing/

・クロスアカウントアクセス
クロスアカウントで対象サービスに悪世することも可能です。リソースポリシーならびに、適切なIAMロールを用意する必要がありますが、VPCエンドポイント経由でも問題なくクロスアカウントアクセスが可能です。

・クロスリージョンアクセス
同一VPC内のVPCエンドポイントからアクセスできるリージョンは、VPCと同一のリージョンに限定されます。これは注意が必要です。たとえば、別リージョンのS3やECRなどにバックアップ目的でデータを格納したい場合、VPCエンドポイントではまずアクセスができません。ローカルPCやCloudShellなどの代替手段を検討すべきです。なおVPCエンドポイントで別リージョンにアクセスを行いたい場合は、対象リージョンにVPCと、VPCエンドポイントを構成、VPCピアリングなどでVPC間での通信ができる状態を確立し、対象リージョンのVPCエンドポイント宛に通信することで実現可能になります。

・ゲートウェイ型とインターフェイス型
通常インターフェイス型が大半ですが、S3やDynamoDBなどは、ゲートウェイ型を利用することが可能です。ゲートウェイ型は無料で利用できますが、アクセスする際にグローバルIPを利用すること、VPC外からの利用ができない点に留意しましょう。

https://docs.aws.amazon.com/ja_jp/vpc/latest/privatelink/gateway-endpoints.html#vpc-endpoints-limitations

・アカウント集約によるコスト削減
VPCエンドポイントを集約することが可能です。中央にVPCを用意し、TransitGatewayで各VPCを結ぶことで、VPCエンドポイントを集約することが可能です。なお、TransitGatewayについてもアタッチメントや通信料金がかかるため、必ずしもコスト削減につながるとは言い難いです。また、中央集権的にコントロールするため、運用コストも考慮する必要があります。トータルの費用を比較したうえで、検討しましょう。

・VPCエンドポイントに対応しないサービス
VPCエンドポイントに対応しないリソースも中にはあります。その場合はやはり、CloudShellやローカルPCでのアクセス、IGW経由でのアクセスを検討すべきです。

# IGW(NATGW)による接続
![スクリーンショット 2024-09-16 11.26.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/584167/c32d81c1-9a97-a3ad-8ff8-56c23948ac26.png)
IGW経由で各サービスにアクセスするパターンです。
この場合の特徴を以下にまとめます。

・VPC内から任意のAWSサービスへの接続が可能
通常のインターネットアクセスと同様に、エンドポイントの制約はなく、どのサービスでも通信が可能です。なお、AWSサービスとの通信は厳密にはインターネットを介さず、AWSのプライベートNW内での通信に限定されます。とはいえ、IGWが存在する以上、通信制御をしなければインターネット上の任意の宛先に通信が可能となるため、注意する必要があります。これを制御したい場合は、SGでのエンドポイント宛の通信のみの限定方式や、Route53DNSFirewall、NetworkFWの利用がおすすめです。

>2 つのインスタンスがパブリック IP アドレスを使用して通信する場合、またはインスタンスがパブリックな AWS のサービスエンドポイントと通信する場合、トラフィックはインターネットを経由しますか?
いいえ。パブリック IP アドレスを使用する場合、AWS でホストされているインスタンスとサービス間のすべての通信は AWS のプライベートネットワークを使用します。AWS ネットワークから発信され、AWS ネットワーク上の送信先を持つパケットは、AWS 中国リージョンとの間のトラフィックを除いて、AWS グローバルネットワークにとどまります。

>さらに、データセンターとリージョンを相互接続する AWS グローバルネットワークを流れるすべてのデータは、安全性が保証された施設を離れる前に、物理レイヤーで自動的に暗号化されます。すべての VPC クロスリージョンピアリングトラフィックや、カスタマーまたはサービス間のトランスポート層セキュリティ (TLS) 接続などといった追加の暗号化レイヤーもあります。 

https://aws.amazon.com/jp/vpc/faqs/

・VPCエンドポイントのコストがかからない
NATGWを利用するかどうかでコストは変動しますが、VPCエンドポイント１つあたりのコストが多ければ多いほど、削減が可能です。なお、NATGWも利用料金がかかります。１時間あたり0.062USDと１GBあたり0.062USDがかかります。NATGWも冗長化を考えるとAZごとに作成するため、３つのAZでは３つのNATGWが必要となります。なお、インターフェイス型VPCエンドポイントの場合、通信料金は１GBあたり0.01USDですので、NATGWの場合６倍のコストがかかりことになります。データ通信が多い場合で、コストを比較し、データ通信が多いサービスに絞ってVPCエンドポイントを作成するなどの検討は必須です。

・クロスアカウントアクセス
VPCエンドポイントと変わらず問題なく実施可能です。

・クロスリージョンアクセス
VPCエンドポイントとは違い制約はありません。

・アカウント集約によるコスト削減
NATGWを集約することが可能です。これもVPCエンドポイントと同様に中央にVPCを用意し、TransitGatewayで各VPCを結ぶことで、NATGWを集約することが可能です。なお、TransitGatewayについてもアタッチメントや通信料金がかかるため、必ずしもコスト削減につながるとは言い難いです。また、中央集権的にコントロールするため、運用コストも考慮する必要があります。トータルの費用を比較したうえで、検討しましょう。

・VPCエンドポイントに対応しないサービス
制約なく接続が可能です。

# まとめ
VPCエンドポイントは、VPC内からプライベートにAWSサービスへの通信が可能となるサービスですが、そのコストと制約は必ず意識する必要があります。場合によっては、IGWで十分ということもあるでしょう。例えば、データ通信が多い場合は、VPCエンドポイントを利用したほうが安くなる事が多いでしょう。また、クロスリージョンアクセスや、VPCエンドポイントに対応しないサービス、めったにアクセスしないけど、利用ルートは確保する必要があるなどの場合は、IGWで十分かもしれません。どちらか１つに絞った利用ではなく、ケースバイケースで適切に利用方針を決めることが重要です。