🐘

セッションマネージャーでEC2へ接続(PrivateLink経由)

2022/09/19に公開

SystemsManagerのセッションマネージャー(以下SSM)でEC2へ接続する場合の条件は、以下の何れかと認識している。
 ①EC2がインターネットに接続できる。
   ・パブリックサブネットに設置されかつパブリックIPを持っている。
  または
   ・プライベートサブネットからNatGatewayを経由してインターネットに出る事が可能
 ②SSMに必要なインターフェイスVPCエンドポイント(AWS PrivateLink)を作成する。

今回はプライベートサブネットに作成したEC2かつNatGatewayも無しで、PrivateLink経由で接続する設定を試す。

参考にした記事

https://aws.amazon.com/jp/premiumsupport/knowledge-center/ec2-systems-manager-vpc-endpoints/
https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/setup-create-vpc.html#sysman-setting-up-vpc-create

今回作成する環境

東京リージョンの3つの各アベイラビリティゾーンにパブリック、プライベートのサブネットを1つづつ作成。SSM用に3つのPrivateLinkを作成。2つのAZ(ap-northeast-1a,ap-northeast-1c)にPrivateLinkのENIを作成し、ap-northeast-1dにはENIを作成しない。ENIはVPC単位で作成するのではなく、AZにつき、1つ作成する必要がある。今回はENIが計6個作成されることになる。同じAZ内の他のサブネットはそのENI経由でPrivateLinkが使える。
VPCは作成済みの前提。

①SSM用VPCエンドポイント(PrivateLink)の作成

1.PrivateLinkに設定するセキュリティグループの作成

今回はVPC全体のCIDRからHTTPS(443)のアクセスを許可するセキュリティグループを作成
■作成するセキュリティグループ
Inbound:HTTPS(443)で、VPC全体(今回は、192.168.0.0/16)のCIDRを許可
Outbound:ルールなし

今回はSSM接続に最低限必要な3つのエンドポイントを作成する。
[region]は、作成するリージョンに合わせて変更。
<作成するVPCエンドポイント> 
  com.amazonaws.[region].ssm
  com.amazonaws.[region].ec2messages
  com.amazonaws.[region].ssmmessages

2-1. com.amazonaws.[region].ssm の作成

今回は、東京リージョンで作成する。
設定例は以下の通り。


今回、動きを確認したいのでap-northeast-1dのサブネットにはPrivateLinkは作らない。
また、ポリシー設定は今回行わないので割愛。
入力が終わったら、画面右下の「エンドポイント作成ボタン」を押下

2-2. com.amazonaws.[region].ec2messages

→2.1と同じ手順で作成

2-3. com.amazonaws.[region].ssmmessages

→2.1と同じ手順で作成

2-4. 作成されたエンドポイントの確認

3つエンドポイントが作成されている。

今回、ap-northeast-1a,ap-northeast-1cのAZにあるサブネットを指定したので、それぞれENIが作成されていることがわかる。

②EC2にSSMで接続し確認

ここからは、VPCエンドポイント経由に限った話ではなくて、セッションマネージャーを使う場合にEC2側に必要な設定の話なので、詳細は割愛するが大まかには以下の手順。
EC2を作成し、以下を実施する。
1.EC2用のIAMロールを作成する。
   ポリシーは「AmazonSSMManagedInstanceCore11」をアタッチする。
2.作成したIAMロールをEC2へアタッチする。
3.SSMで接続する。

PrivateLinkのENIが作成されたサブネットにあるEC2から接続を確認できたのは勿論。
ENIが設置されていないサブネットであっても、同じAZ内にPrivateLinkのENIを持つサブネットがある場合は、セッションマネージャーが利用できた。
当然、PrivateLinkのENIがないAZ上にあるサブネットに設置されたEC2には接続できなかった。

PrivateLinkに関する考察

今回はSSMを使う場合のPrivateLinkのお話であったが、kmsによる暗号化やCloudWatch Agent を使うケースなどにおいても、PirvateLinkを使う場合が想定される。
PirvateLinkを増やす度に、VPCエンドポイントが増えていくわけで、しかもAZ毎にENIを設置する必要があるので料金が重む印象だ。
じゃあ、NatGatewayだけでいいじゃんとなるわけでもなく、PrivateLinkよりNatGatewayのほうがアウトバウンド通信費用が高い。CloudWatch Logsを使って大量のログを吐かせる場合など、それなりのデータ量を送信する場合は、PrivateLinkを使うほうがよさそうだ。
また、セキュリティ面で考えれば、NatGatewayを経由してインターネットに出るとはいえ、AWS内のネットワーク内で通信されるような感じでありそうだが、やはりPrivateLinkはインターネットに出ないのでよりセキュアなんだと考える。

その他参考にした記事

■AWS内の通信がインターネットを経由しない今、VPC Endpointを利用する意味はあるのか?
https://future-architect.github.io/articles/20210618a/
■そのトラフィック、NATゲートウェイを通す必要ありますか?適切な経路で不要なデータ処理料金は削減しましょう
https://dev.classmethod.jp/articles/reduce-unnecessary-costs-for-nat-gateway/
■セッションマネージャーのハマりどころをパターンごとに整理してみる
https://dev.classmethod.jp/articles/session-manager-pattern/#toc-4

Discussion