[登壇レポート] 「EC2 Instance Connectを図解してみた」というタイトルで登壇してみた

JAWS-UG朝会 #53にて、「EC2 Instance Connectを図解してみた」というタイトルで登壇しました。EC2 Instance ConnectでEC2インスタンスに接続する際の裏側の処理を調べてみると興味深いですよ〜。
2024.01.18

はじめに

おのやんです。

今回、JAWS-UG朝会 #53にて「EC2 Instance Connectを図解してみた」というタイトルで登壇しました。

当日使用したスライドも含めて、登壇の内容をダイジェストで紹介したいと思います。

スライド内容

こちらが、当日使用したスライドになります。

スライド概要

この内容で登壇しようと思ったきっかけは、こちらのブログです。SSHやSession Manager、EC2 Instance ConnectなどでEC2に接続して、そのCloudTrailイベント履歴を調べてみる、という内容のブログです。

この執筆作業中に、EC2 Instance Connectに触りまくったんですね。それで公式ドキュメントやネット上の記事を調べるうちに、EC2 Instance Connectの裏側で動いている処理を感覚的に把握するようになりました。それで、「どうせならこの内容で登壇しよう」と思い、登壇に至りました。

EC2 Instance Connectでインスタンスに接続する際には、裏でSSH鍵のペアが作成されています。そしてそのうち公開鍵の方が、EC2 Instance Conectからインスタンスに送信されます。この処理を行うことで、インスタンスに公開鍵・EC2 Instance Connectサービスに秘密鍵を所有している状態になります。この鍵ペアを用いて、内部でSSH接続を行ってくれるわけです。

ちなみに、SSH公開鍵を送信するのはEC2 Instance Connect サービスなので、裏側ではAWSサービスのAPIを実行しています。つまり、EC2 Instance Connectでインスタンスに接続するアクションは、CloudTrailに記録されます。実際に、CloudTrailにはそのままSendSSHPublicKeyイベントが記録されているのがわかります。

またEC2 Instance Connectを使った接続方法には、Endpointを介するものもあります。この接続の際には、SendSSHPublicKeyイベントの他に、OpenTunnelイベントが実行されます。具体的には、Management Consoleからインスタンスの間のどこかの経路でトンネルを開ける処理になっています。具体的にどの通路に開けるかは、公式ドキュメントや記事からははっきりとは読み取れなかったですが、実行されるAPIに違いが出てくることは確認できました。

まとめ

普段使用しているAWSサービスだと、裏側の処理を意識することはありません。そこから一歩進んで、内部の処理を考察してみると、意外な実装に気がついて面白いですよ〜

JAW-UG朝会の運営の皆さま、当日はありがとうございました!では!