セッションマネージャーでEC2へ接続(PrivateLink経由)
SystemsManagerのセッションマネージャー(以下SSM)でEC2へ接続する場合の条件は、以下の何れかと認識している。
①EC2がインターネットに接続できる。
・パブリックサブネットに設置されかつパブリックIPを持っている。
または
・プライベートサブネットからNatGatewayを経由してインターネットに出る事が可能
②SSMに必要なインターフェイスVPCエンドポイント(AWS PrivateLink)を作成する。
今回はプライベートサブネットに作成したEC2かつNatGatewayも無しで、PrivateLink経由で接続する設定を試す。
参考にした記事
今回作成する環境
東京リージョンの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:ルールなし
2.PrivateLink を作成する。
今回は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を利用する意味はあるのか?
■そのトラフィック、NATゲートウェイを通す必要ありますか?適切な経路で不要なデータ処理料金は削減しましょう ■セッションマネージャーのハマりどころをパターンごとに整理してみる
Discussion