SystemsMangerのセッションマネージャを使用した踏み台サーバを検証した際、VPCエンドポイントを設定致しました。
そのため、今回はVPCエンドポイントについて記載致します。
■公式サイト
AWSのVPCエンドポイントのページの紹介です。
VPC エンドポイント - Amazon Virtual Private Cloud
■VPCエンドポイントとは
「VPC」と「VPC外のサービス」との通信を、インターネットに出ずに接続可能にするためのものです。そのため、通信元はパブリックサブネットのAWSリソースです。
一般的に、パブリックサブネット内のEC2からS3/SQS/SES/SystemsManger等に接続する際、InternetGatewayを経由したインターネット通信が基本です。
※プライベートサブネット内のEC2からはアクセスできません。
【一般的な構成(VPCエンドポイントなし)】
この際問題となるのが、インターネット通信となることからセキュアな環境では毛嫌いされることが多いです。
そこで登場するのは、VPCエンドポイントです。前述の通りインターネットに出ずにAWSサービスに接続することが可能となります。
つまり、プライベートサブネットのEC2から、VPC外のAWSサービスにアクセスすることができることになります!!
【VPCエンドポイントあり】
プライベートサブネットからの通信が可能なることで、
IGW、NAT、VPN、パブリックIPの設計/導入が不要という利点もあります。
■VPCエンドポイントの種類について
VPCエンドポイントは接続したいAWSサービスによって、使うもの(=種類)が異なります。
※AWSサービスじゃなくてもいいのですが、ここではAWSサービスに特化して記載致します。
種類は2つです。
① Interface型(=PrivateLink)
② Gateway型
前述したとおり、どちらの種類を使用しても、インターネットに出ずに通信することが可能になる点は共通です。
各種類については後述しますが、PrivateLinkは「AWS PrivateLink」としてサービス化しているため、VPCエンドポイントについて調べているときにPrivateLinkの内容もよく出てくるため混乱しがちですが、「VPCエンドポイントはサービスの総称であり、PrivateLinkはVPCエンドポイントの一つのサービス」って感じで覚えておくとよいかと。
■①Interface型(=PrivateLink)について
Interface型(PrivateLink)とは、
「サービスごとに作成されるENI」のことです。
大切なのは「サービスごと」というところと「ENI」というところです。
サービスごとのため、S3用に作成したエンドポイントをSQSとかでは使えません。
ENIのため、プライベートIPを保持します。
以下は参考画像です。
PrivateLinkが配置されるサブネットはプライベートサブネットなので、IPv4アドレスを保持していることがわかります。(”ネットワークインターフェースID”列でENIが割り当てられていることもわかります。)
セキュリティグループをPrivateLinkにアタッチすることでアクセス制御を行います。
■②Gateway型について
2020年4月30日時点では、S3とDynamoDBのみで利用します。
こちらは、ルートテーブルの修正を行います。
具体的には、
・ルートテーブルのDestinationにプレフィックスリストID(pl-id)を指定
・ルートテーブルのTargetにVPCエンドポイントIDを指定
します。
■Interface型とGateway型の構成
こんな感じのイメージになります。
左から順に
・InternetGateway経由の通信
・VPCエンドポイント(Gateway型)の通信
・VPCエンドポイント(Interface型)の通信
です。
以上です。