AWSにおいてシステム連携でどういった手法を使うべきか

# はじめに
外部のシステムとの連携って結構ありますよね。
その際どういった手法があるのか、各手法における特徴と選択すべき観点をまとめていきます。
今回はNW間の接続方式を記載します。アプリケーション内の話は触れません。

# 手法と簡単な特徴
- VPC　Peering
シンプルにVPC間をピアリングで接続する方法です。
以下のような特徴があります。
メリット：ピアリング自体には料金はかからない。（通信費用のみ）
　　　　　　　　　　　リージョンをまたいだピアリングも可能。
デメリット：推移的な接続がNGであり、VPCをまたいだ通信はできないため、VPCごとにピアリングを設定する必要がある。
ルーティングは相互のVPCにて設定が必要であり、ピアリング接続が増えるたびに設定の追加が必要。
相互に任意の通信が可能であるため、SecurityGroupなどを適切に設定する必要がある。

https://docs.aws.amazon.com/ja_jp/vpc/latest/peering/what-is-vpc-peering.html

![スクリーンショット 2023-03-19 10.55.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/584167/cfb03d02-cc0c-33ea-d8a3-a1669f37bf8c.png)

- TransitGateway
TransitGatewayと呼ばれるハブのようなもので、相互にVPCを接続する方式です。
以下のような特徴があります。
メリット：TransitGatewayに通信を集約することができるため、管理が一元化できる。　VPC側では、TransitGateway宛に通信を飛ばすルーティングをしておけばよく、TransitGateway側でルート設定を追加すれば、相互の通信や外部通信などをコントロールできる。
デメリット：TransitGatewayの通信料金の他アタッチメントにコストがかかる。リージョン間はTransitGatewayを別で構築しピアリングする必要がある。（上限値あり）

https://docs.aws.amazon.com/ja_jp/vpc/latest/tgw/what-is-transit-gateway.html

![スクリーンショット 2023-03-19 11.02.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/584167/e0d4c573-f91a-3b46-554b-14988e7d01d2.png)
- PrivateLink
PrivateLinkを利用したパターンです。
これは、VPCと別のVPCの宛先をPrivateLinkのサービスとして接続する仕組みです。
利用者から見た際には、自身のVPC内のPrivateIP宛に通信しているように見えますが、実際にはAWSのバックボーンでPrivateLinkのサービスとしての通信が発生し、宛先へ通信が行われます。
以下のような特徴があります。
メリット：直接の接続が発生しないため、SGやルートテーブルの意識はほとんど必要なく、必要な通信のみに限定されたセキュアな接続が利用可能。
デメリット：双方向の通信はできない。複数の通信や宛先がある場合、都度PrivateLinkを作成する必要がある。

https://docs.aws.amazon.com/ja_jp/vpc/latest/privatelink/endpoint-service-overview.html

![スクリーンショット 2023-03-19 13.57.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/584167/204a2a5c-147f-2b3c-4bc5-fc5d2bc9706f.png)

- Intenert
言わずもがな、インターネットを利用した通常パターンです。
インバウンド通信にはInternetGatewayを利用、アウトバウンド通信はNATGatewayを利用します。
メリット：回線費用がかからない。NATGatewayやアウトバウンド通信の費用がかかるが、専用線などに比べて非常に安い。
デメリット：適切な暗号化や通信ルールなどセキュリティ対策が必要。帯域が保証されない。

![スクリーンショット 2023-03-19 11.16.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/584167/70f08800-fd09-ae03-313e-66cec48696e5.png)

- DirectConnect
専用線を利用した連携方式です。※図のTransitGatewayは必須ではないです。
以下のような特徴があります。
メリット：保証された帯域、専用の回線が利用可能。
デメリット：高額な費用がかかる。

https://aws.amazon.com/jp/directconnect/

![スクリーンショット 2023-03-19 11.20.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/584167/678976a1-a90a-b193-4581-fa0875e13de8.png)

- Site-to-SiteVPN
VPNを利用した方式です。※図のTransitGatewayは必須ではないです。
以下のような特徴があります。
メリット：暗号化された通信経路が利用可能。
デメリット：ルータ等の用意が必要。利用料金もかかる。インターネット回線を利用するため帯域が保証されない。
また、DirectConnectと組み合わた利用も可能です。
https://docs.aws.amazon.com/ja_jp/vpn/latest/s2svpn/VPC_VPN.html

![スクリーンショット 2023-03-19 11.23.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/584167/e7b78d98-0fe9-8cee-6487-a09f88e5cc8f.png)

# ユースケース
## 連携先がAWS内の場合
以下が選択肢となります。
双方向の通信が不要である場合や、ネットワーク範囲を指定したレベルでの通信が不要である場合は、まずPrivateLinkの利用をおすすめします。これは非常にセキュアな接続形式です。
ただし、PrivateLinkごとに費用がかかりますので注意が必要です。
次に、宛先となるVPCが小規模である場合は、VPCPeeringがおすすめです。これは通信費用以外にコストが掛からないため、AWSの利用料を抑えることが可能です。ただし、VPCの数が増えるとコネクションや相互のルートテーブルなどを管理する必要があり、手間がかかります。大規模なVPC間の連携やVPC以外の通信をとうごうてきにかんりするのであればTransitGatewayを選択肢にいれましょう。

- VPC Peering
- TransitGateway
- PrivateLink

## AWS外との通信
以下が選択肢となります。
まずはインターネットベースでの連携ができないか検討を行いましょう。
今や、ゼロトラストの考え方が基本です。
暗号化された通信プロトコルや適切な認証認可を行っていれば、インターネットで十分に安全な通信が利用可能です。

https://aws.amazon.com/jp/blogs/news/how-to-think-about-zero-trust-architectures-on-aws/

もし、保証された帯域が絶対に必要である場合は、DirectConnectを利用しましょう。
ただしコストが非常に高く、回線の用意まで時間がかかりますので注意してください。
また、暗号化された通信プロトコルが何らかの事情で利用できない場合は、Site-to-SiteVPNを利用しましょう。
通信自体が暗号化されますので、FTPなど暗号化されていないプロトコルを利用してもインターネット上に平文の通有心が流れることはありません。しかしながら、ゼロトラストの考え方とは反するものとなるので、積極的な利用はおすすめできません。

- Internet
- Site-to-Site VPN
- DirectConnect

# まとめ
システム間の連携は、様々な手法があります。
基本的には、信頼されるネットワークなどないという考え方でセキュリティの設計を行うことをおすすめします。
また、過剰にVPNやDirectConnectを利用することはおすすめできません。
本当に必要なのか、使わなければならない要素がセキュリティ上望ましいものなのかは積極的に疑うようにしてほうがよいです。AWS内であれば、AWS上のサービス、AWS外であれば基本的にはインターネットで事足りるケースが多いです。コスト、セキュリティ、パフォーマンスにおいて、要件と照らし合わせながら適切なサービスを選定しましょう。