EC2 Instance Connect Endpointを使ってEC2インスタンスのプライベートIPアドレスにSSH接続してみた
2023-06-14
azblob://2023/06/14/eyecatch/2023-06-14-amazon-ec2-instance-connect-ssh-rdp-private-ip-address-000.png

こんにちは、株式会社FIXERの村上です。

AWS re:Inforce 2023 で「Amazon EC2 Instance Connect」にプライベートIPアドレスによるSSH/RDPをサポートすると新発表されました!

なお、2023年6月時点では Amazon EC2 Instance Connect は Linuxインスタンスのみサポートしています。

参考)Install EC2 Instance Connect on your EC2 instances

1. EC2 Instance Connect とは

プライベートIPアドレスを使用して、EC2インスタンスにSSH、RDP接続をサポートするBastionサービスです。

↑2023年5月まではパブリックIPアドレスが必須でした。

EC2 Instance Connect サービスを利用するためには、EC2 Instance Connect Endpointを EC2インスタンス(正確にはENI)に追加する必要があります。

よく似たサービスにSystems Managerが提供されていますが、EC2 Instance Connect と異なる点が2つあります。

1. 操作履歴について

Systems Manager サービス(以下、SSM)のSession ManagerやFleet Managerを利用すると、SSMのセッションアクティビティ機能により、操作ログを詳細に記録します。

一方、EC2 Instance Connectでは SSMのようなログを収集する機能は提供されておらず CloudTrailによる接続履歴のみ分析できます。

2. 料金の対象が異なる

SSMの料金は無料です。ただし、EC2インスタンスにSSM エージェント経由によるプライベート接続の関係上、SSM専用のVPCエンドポイントを最低3つ作成する必要があります。

1VPCエンドポイント単位でホスティング費用とトラフィック料金が加算されるためSSM関連の自動化ツールやアプリをシステム基板に導入すると無視できるかできないかぐらいの料金が発生します。

一方、EC2 Instance Connetでは SSMと同様に専用のVPCエンドポイント(EC2 Instance Connet Endpoint)を作成する必要がありますが1つだけで済みます。

→ エンドポイントの数が少なくて良いため、SSMより安いことが多いです。

また、RSSフィードの情報では「専用のホストにコストが発生しない」と書かれています。つまり、トラフィック料金のみで利用することが可能のようです。

→ EC2 Instance Connet Endpointの費用は無料(タダ)です。

他にも、

・SSMはエージェント接続を行うためインスタンスにログイン接続しているわけではないがEC2 Instance Connectは踏み台サーバーと同様にログイン接続を行う

・RBACの構成が異なる などあります。

話も長くなりそうなので、ここで打ち切ります🍀。

ここからは EC2 Instance Connect Endpointによるハンズオンを紹介します!

2. EC2 Instance Connect をEC2インスタンスに設定する

1. EC2 Instance Connect をインスタンスにインストールする

この手順は、

  • Amazon Linux 2 2.0.20190618 以降(Amazon Linux 3は全バージョン対応)
  • Ubuntu 20.04 以降

上記のAWSが提供するAMIには事前にEC2 Instance Connectがインストールされているため、省略します。

参考)EC2 Instance Connect をインスタンスにインストールする

2. EC2 Instance Connect Endpoint を設定する

EC2 Instance Connectを利用するためにEC2 Instance Connect Endpointを作成します。

「VPCコンソール」>「エンドポイント」を選択して、右上の「エンドポイントを作成」 を押下します。

「エンドポイントを作成」では、以下のパラメータを設定します。

  • エンドポイントの設定
【設定項目】【設定値】
[オプション] 名前タグ eic-endpoint(お好きな名前をつけてください)
[必須] サービスカテゴリ [EC2 インスタンス接続エンドポイント]を選択
  • VPC
【設定項目】【設定値】
[必須] VPC[EC2インタンスがデプロイされたVPC] を選択
  • セキュリティグループ
【設定項目】【設定値】
[必須] セキュリティグループ[EC2インタンスに割り当てたセキュリティグループ] を選択
  • サブネット
【設定項目】【設定値】
[必須] サブネット[EC2インタンスが属するサブネット] を選択

3. セキュリティグループを設定する

EC2 Instance Connect Endpoint と EC2インスタンスがSSH接続できるようにセキュリティグループにインバウンドルールを設定します。

「VPCコンソール」>「セキュリティグループ」を選択します。

EC2インタンスに割り当てたセキュリティグループを押下します。

インバウンドルールに、EC2 Instance Connect Endpoint の作成で選択したセキュリティグループを追加してください。

3. EC2 Instance Connect で接続してみる

「EC2コンソール」>「インスタンス」を選択して、EC2インスタンスの「接続」を押下します。

接続タイプ を [EC2 Instance Connect エンドポイントを使用して接続する] に切り替えて、以下のパラメータを指定します。
【設定項目】【設定値】
[必須] ユーザー名ec2-user(本ブログでは、デフォルトのユーザー名)
[必須] 最大トンネル期間(秒)3600(本ブログでは、デフォルト期間)
[必須] EC2 Instance Connect エンドポイント先ほど作成した [eic-endpoint] を選択

接続を押すと、Amazon Linux 3 にアクセスできます!(お馴染みのログインバナーが表示されましたね🦆)