VPCエンドポイントの必要性 AWS
VPC エンドポイントとは
Amazon S3やSSMなどといったAWSサービスに接続するときにインターネットを経由しないプライベートな接続を提供するのがVPCエンドポイント。
このような認識はなんとなくされている方が多いかと思います。
ではVPCエンドポイントが無い場合AWSサービスにはどのように接続しているのか、VPCエンドポイントが必要になるのはどのようなケースなのかを整理していきたいと思います。
AWSサービスへの接続
簡単なAWSサービスへの接続ということでAmazon S3に保存したファイルを取得するときを考えてみます。
マネージメントコンソールから操作する場合ユーザーはAWSが公開しているS3のAPIを叩いてフォルダを取得します。
ブラウザから操作していますからこの通信がパブリックなインターネットを介して行われているのはイメージしやすいと思います。
一方でAWS上に構築されたEC2インスタンスがS3バケットと通信する場合ですが、このEC2インスタンスはそのままではS3バケットと通信することができません。
AWSの中のネットワークはAWSによって管理されたプライベートなネットワーク空間ですが、異なるVPCやS3やCloudWatchのようなVPC外に存在するサービスにVPC内から接続するには通信経路を確保する必要があります。
そうしないと見ず知らずのユーザーによってS3バケットの覗かれてしまう可能性がありますからね。
AWSサービスへの経路を確保する方法の一つ目がインターネットへのルートを持つ事です。
インターネットゲートウェイへの経路を持つサブネットにEC2インスタンスを配置することでマネージメントコンソールからの操作と同様にS3バケットにアクセスできるようになります。
この時EC2インスタンス側にS3バケットへの読み取り権限を持たせるか、バケットポリシー側でアクセスを許可する必要があります。
マネコンからバケットをのぞけるのもIAMロールによるものですからね。
この方法ではインターネットに経路を持っていればいいので、EC2インスタンスはプライベートサブネットに置きNATゲートウェイを作成することでもS3バケットへの接続を実現できます。
ただ、NATゲートウェイを含むインターネットへのアクセスが許可されない状況やNATゲートウェイの費用を抑えたい場合もあると思います。
そのような時に使えるのがVPCエンドポイントを使用して接続する方法です。
VPCエンドポイントはAWSサービス単位で作成できVPCエンドポイントへのルートを持つリソースがAWSサービスとインターネットを介さないプライベートな接続をできます。
リソースによるアクセス制御はS3バケット側のポリシー、エンドポイントのセキュリティグループ、接続元リソースのIAMロールで可能です。
VPCエンドポイントは従量課金なのでNATゲートウェイのようなデプロイすることで一定額を支払う必要もありません。
このようにAWSリソースへのアクセスルートを意識するとVPCエンドポイントの必要性も理解しやすくなるのではないでしょうか。
AWS Systems Manager Session Manager(SSM)を考える
EC2インスタンスにローカルから接続する場合にターミナルソフトを使用した接続の他にSSMが選択しに上がると思います。
SSMもAWSサービスですのでSSMを介したEC2インスタンスへの接続にも先ほどのような経路が必要です。
AWS SSMの説明記事を読むとEC2インスタンスにSSMエージェントを入れ、IAMロールを設定することがよく言われていますが、それに加えてEC2‐SSM間の接続を確保してあげる必要があります。
パブリックサブネットにEC2インスタンスを配置する場合にもパブリックIPを付与しないと接続はできません。
プライベートサブネット上のEC2にエンドポイント経由でSSM接続する場合は下記のVPCエンドポイントが必要です。
com.amazonaws.region.ssm
com.amazonaws.region.ec2messages
com.amazonaws.region.ssmmessages
おわり
今回はVPCエンドポイントの必要性をAWSサービスとネットワークの視点から整理しました。
私自身がプライベートサブネットからS3やSSMへの接続でハマったため備忘録として本記事を作成しました。
AWS内の通信で躓いている人の助けになれば幸いです。
Discussion