
踏み台不要の新機能「EC2 Instance Connect Endpoint」でプライベートEC2に接続する(その1)
こんにちはこぐまです。
6月の終わりごろにAWSの新機能として、「EC2 Instance Connect Endpoint (EIC Endpoint)」が発表され、利用できるようになりました。
本日はそれを試してみた備忘録となります。
どんなサービスか?
簡単に言うと、「踏み台サーバのお役目請け負います」っていうサービスです。詳細はこちら↓
つまり、踏み台サーバというものを自前で用意しなくてよくなるということですね。
踏み台サーバって何?
クラウド上にサーバを構築する時、その置き場所が大きく分けて2つあります。
1.インターネットと直接やりとりできる場所
(パブリックサブネット)
2.インターネットと直接やりとりできない場所
(プライベートサブネット)
サーバをパブリックサブネットに配置し、かつパブリックIPアドレス(※)というものを付与した場合、そのサーバはインターネットと直接やりとりできます。(正確にはインターネットゲートウェイと各種セキュリティ、認証設定が必要ですがここでは割愛します)
サーバをプライベートサブネットに配置した場合、そのサーバがインターネットとやりとりしたいと思っても直接はやりとりできません。必ずパブリックサブネット上に存在する仲介者が必要となります。この仲介者のことを踏み台サーバといいます。
踏み台サーバとは、パブリックサブネット上に配置し、かつパブリックIPアドレスが付与されているサーバです。そして、インターネット上のサーバと、プライベートサブネット内のサーバたちが直接やりとりできるように各種設定を入れたサーバのことをいいます。
(※)ここ、結構重要なんですが、パブリックサブネット+パブリックIPというのがインターネットと直接やりとりできる条件です。
サーバをパブリックサブネットに配置しても、パブリックIPが付与されていなければインターネットとの直接のやり取りはできません。
サーバをプライベートサブネットに配置して、パブリックIPを付与したとしても、インターネットとの直接のやり取りはできません。

インターネットと直接通信でいるのはパブリックサブネットに配置したサーバのみ。
図では表記されていないが、パブリックIPも付与されていることが条件。
踏み台サーバを自前で運用する場合のリスク
プライベートサブネット内のサーバを「一度作成したら一生ログインしない!」ということであれば、踏み台サーバは確かに不要ですが(笑)、そんな状況にはならないと思うので、ほとんどの状況において踏み台サーバは必要かと思います。先に示した踏み台サーバとしての各種設定にはいろんな方法があります。直接SSHトンネルを設定したり、ソフトウェアをインストールして設定する方法もあります。
しかし、いずれにしても以下ような課題があります。
課題1:外部に公開され常に攻撃の脅威にさらされているので定期的なパッチや最新のセキュリティ対策が必要。
課題2:認証の仕組みや運用を(AWSとは別に)管理していく必要がある。
課題3:プライベートサブネット内の各インスタンスにアクセスするためのキーペアを運用管理する必要がある。
できることなら、このような課題を持ち続けたくはないですね。。
そこで「EC2 Instance Connect Endpoint」が登場!
というわけで、このような課題のある自前の踏み台サーバをとっぱらって、
AWSのサービスでより楽に運用していきましょうということで、「EC2 Instance Connect Endpoint(以下EIC Endpoint)」が誕生しました(多分・・)
つまり役割としては踏み台サーバそのものです。ただし自前踏み台サーバで課題となっていた部分は解決されます。
課題1:外部に公開され常に攻撃の脅威にさらされているので定期的なパッチや最新のセキュリティ対策が必要。
→ 「EIC Endpoint」を実現しているサーバそのものの運用管理をする必要がない。
課題2:認証の仕組みや運用を(AWSとは別に)管理していく必要がある。
→ IAMで管理できる。
課題3:プライベートサブネット内の各インスタンスにアクセスするためのキーペアを運用管理する必要がある。
→ キーペアが不要!
実際にやってみました!
「EIC Endpoint」の誕生の背景はわかったので、実際に東京リージョンで利用してみます。(20230713の記事執筆時では大阪リージョンでは接続できませんでした)
以下の順番で行います。ちなみにすべてAWSマネジメントコンソールから設定できるので、コマンドの知識等は不要です。なお、実施するIAMユーザにはAWSの管理ポリシー「AdministratorAccess」がついているものとします。(これについてはその2を書く予定なのでその時に詳しくお話しようかと思います)
1.セキュリティグループの作成(EIC用)
2.セキュリティグループの作成(EC2用)
3.EIC Endpointの作成
4.EC2インスタンスの設定
5.アクセスしてみる
1.セキュリティグループの作成(EIC用)
「EIC Endpoint」を作成する前に、まずは「EIC Endpoint」が利用するセキュリティグループを作成しておきます。
「EIC Endpoint」にアタッチするセキュリティグループは、以下設定となります。
インバウンド: ルールなし
アウトバウンド: 全て許可(もしくは特定の送信先SG)
セキュリティグループの作成の方法はどこからでも大丈夫ですが、一例として、VPCの画面から作成する方法を載せます。
AWSマネジメントコンソールの「VPC」→「セキュリティ」→「セキュリティグループ」を選択します。


名前と説明(任意)とこのセキュリティグループを利用するVPCを選択します。

インバウンドルール、アウトバウンドルールですが、たぶん新規作成した場合は以下のようになっている(今回設定したい内容通り、インバウンドには何もルールがなく、アウトバウンドは全て許可している状態)ので、このまま「セキュリティグループを作成」をクリックします。

2.セキュリティグループの作成(EC2用)
つづいて、EC2にアタッチするセキュリティグループを作成します。
こちらの設定値は以下となります。
インバウンド: EICEndpointで作成したSGからのSSH(22)を許可
アウトバウンド: 全て許可(もしくは特定の送信先SG)
作成方法は同じなので、ルールのところだけ記載します。
インバウンドルールに関しては、ピンクの線の部分を入力していきます。

「1.セキュリティグループの作成(EIC用)」で作成したSGが出てくるので、
それを選択すればOK。
3.EIC Endpointの作成
「EIC Endpoint」はAWSマネジメントコンソールの「VPC」→「エンドポイント」から作成するようです。



ここまで進むと以下のような設定画面になります。順に解説します。
・「VPC」は「EIC Endpoint」を利用するVPCを選択します。ここを選択すると以降のプルダウンが展開されるようです。
・「セキュリティグループ」の部分は「1.セキュリティグループの作成(EIC用)」で作成したセキュリティグループを選択します。(なお、これは作成後になぜか変更できないので・・アタッチをミスった場合はEIC Endpointを再作成してください。)
・「Subnet」にはプライベートサブネットに相当するものを選択します。

入力し終えたら「エンドポイントを作成」を押下することで「EIC Endpoint」が作成されます。

4.EC2インスタンスの設定
続いて検証として使うEC2インスタンスを作成します。もちろんプライベートサブネットに配置します。AWSマネジメントコンソールからEC2を選択し、「インスタンスの起動」を選択します。

以下必要な部分だけ記載していきます。記載がないところはそのままで大丈夫です。


キーペアは不要(キーペアなしで続行)です。

まずVPCを選択し、EC2を配置するプライベートサブネットを選択します。
パブリックIPの自動割り当ては無効化します(多分デフォルトで無効化)
ファイアウォールの部分は、既存を選択し、プルダウンから
「2.セキュリティグループの作成(EC2用)」で作成したセキュリティグループを指定します。
ここまで出来たら画面右側の「インスタンスを起動」をクリックしてインスタンス起動が完了するのを待ちます。
5.アクセスしてみる
では、アクセスしてみましょう!
EC2一覧から、「4.EC2インスタンスの設定」で作成したEC2インスタンスを選択し、「接続」をクリックします。

そうするとこのような画面に遷移します。

まず、右側の「EC2 Instance Connect エンドポイントを使用して接続する」をチェックします。
そうすると以下のような画面になります。

ここで、一番下の「EC2 Instance Connect エンドポイント」という部分に、
「3.EIC Endpointの作成」で作成したエンドポイントが出てきますので、それを選択して「接続」を押します。
繋がりました!!

自前踏み台サーバなし、パブリックIPなし、さらにキーペアなしで接続することができるようになりました!
設定としてはそこまで難しくないかなと思います。
是非お試しください。
そして、実際やってみてわかったことがたくさんあります。
1.現時点では大阪リージョンでは使えない(スクショに大阪リージョンが結構あるのはそのためですw 正確にはEIC Endpointは作成できるのですが、EC2インスタンスを選択し接続をクリックした後、EIC Endpointを利用して接続するオプションが出てきませんでした。)
2.現時点では、「EIC Endpoint」を利用して接続するための管理ポリシーが存在しない(既存の権限を定義したIAMユーザに追加ポリシーを選んでポン付け・・という対応ができるわけではなさそう)
3.「EIC Endpoint」を利用した接続の成功、失敗はCloudtrailに記録される。どんな順番でどんなログが出るのかもなんとなくわかった。
とくに、2.3については「その2」で詳しく書いてみようかなと思います。
ひとまずここまで!
試行錯誤しながら試してみるのは楽しいですね。
読んで下さってありがとうございました!