ちょっと話題の記事

[アップデート]パブリック IP アドレスなしで、EC2インスタンスにSSH接続できる EC2 Instance Connect Endpointがリリースしました

EC2 Instance Connect Endpointによって、踏み台サーバーやパブリック IP アドレスなしで、EC2インスタンスにRDP接続やSSH接続できます
2023.06.14

はじめに

EC2 Instance Connect Endpoint (以降 EIC エンドポイント) を使用すると、パブリック IP アドレスを使用せずに プライベート サブネット内のEC2インスタンスに SSH および RDP 接続できるようになりました。

以前は、プライベートサブネット内のインスタンスにSSHまたはRDP接続をするためには、踏み台サーバーを作成する必要がありました。

しかし、踏み台サーバーを使用すると、パッチ適用、管理、監査などの追加の運用オーバーヘッドとコストが発生します。

最近はセッションマネージャーで接続することが増えてきましたが、他の選択肢として、EIC エンドポイントを使用することで、運用オーバーヘッドなしでEC2インスタンスに接続できるようになります。

EIC エンドポイントは、AWS IAMベースでアクセスを制限したり、セキュリティグループなどで制御可能です。

AWS CloudTrail 経由ですべての接続の監査を提供し、セキュリティ体制の向上も可能です

セッションマネージャーとの違いは、以下の記事にまとめました

構成図

EIC エンドポイントでEC2に接続する構成図は以下の通りです

EC2 Instance Connectエンドポイントサービスは、ユーザー側で作成などはする必要がありません。AWS側で管理されています。

事前準備

  • プライベートサブネット上にEC2を起動しておく
    • EC2は、Amazon Linux 2023

セキュリティグループを作成

EICのエンドポイントのセキュリティグループとEC2のセキュリティグループを以下の通りに作成します。

EC2のセキュリティグループは、EICのエンドポイントのセキュリティグループを許可するのみです。

EICのエンドポイントのセキュリティグループ

セキュリティグループ プロトコル ポート 送信先
インバウンド なし なし なし
アウトバウンド TCP 22 EC2のセキュリティグループ

EC2のセキュリティグループ

セキュリティグループ プロトコル ポート 送信先
インバウンド TCP 22 EICのエンドポイントのセキュリティグループ
アウトバウンド すべて すべて 0.0.0.0/0

EIC エンドポイント作成

EIC エンドポイントを作成します。

VPCエンドポイントの作成から、サービスカテゴリでEC2 Instance Connect Endpointを選択します。

サブネットは、プライベートサブネットを選択します。

Preserve Client IPには、チェックを入れずに、エンドポイントを作成します

Preserve Client IPとは

Preserve Client IP チェックをいれると、EIC エンドポイントは、ユーザーのクライアントIPを保持できます。

  • クライアントIPを保持すると、EC2に接続時、ユーザーのクライアントの IP アドレスがソースとして使用されます
  • クライアントIPを保持しない場合、EC2に接続時、プライベートサブネットにあるEC2 Instance Connect エンドポイントのElastic Network Interface IP アドレスがソースとして使用されます。

EC2に接続

それでは、EIC エンドポイント経由でEC2に接続します。

EC2の[接続]に遷移します

接続タイプは、EC2 Instance Connect エンドポイントを使用して接続する、エンドポイントは先程作成したエンドポイントを選択し、接続します

接続できました!

AWS CLIの場合

AWS CLIの場合、aws ec2-instance-connect sshコマンドで接続できます。

今回は、CloudShell内で実行しました。

CLIのバージョンは、 最新のCLI v2(Ver.2.12.1)で試しました。

CloudShellの場合、下記コマンドで、CLIをアップデートできます。

$ curl -s "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
$ unzip -q awscliv2.zip
$ sudo ./aws/install --update
$ aws --version
aws-cli/2.12.1 Python/3.11.3 Linux/4.14.255-314-253.539.amzn2.x86_64 exec-env/CloudShell exe/x86_64.amzn.2 prompt/off

下記コマンドで、接続できます。

$ aws ec2-instance-connect ssh --instance-id i-xxxxxxxxxx \
--eice-options maxTunnelDuration=3600,endpointId=eice-xxxxxxxxxxx \
--os-user ec2-user


The authenticity of host '10.0.0.x' (<no hostip for proxy command>)' can't be established.
ECDSA key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
ECDSA key fingerprint is MD5:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '10.0.0.x' (ECDSA) to the list of known hosts.
   ,     #_
   ~\_  ####_        Amazon Linux 2023
  ~~  \_#####\
  ~~     \###|
  ~~       \#/ ___   https://aws.amazon.com/linux/amazon-linux-2023
   ~~       V~' '->
    ~~~         /
      ~~._.   _/
         _/ _/
       _/m/'
[ec2-user@ip-10-0-3-170 ~]$

aws ec2-instance-connect sshコマンドの詳細は、以下をご参照ください

制限

EIC エンドポイントの作成する数には、以下の制限があります

  • AWSアカウントごとに5 つのEIC エンドポイント
  • VPCごとに1つのEIC エンドポイント
  • サブネットごとに1つのEIC エンドポイント

1つのVPCに1つしかEIC エンドポイントを作成できません。

2つ目を作成しようとするとエラーが出ます。

料金

EIC エンドポイントの使用に追加料金はかかりません!

標準のデータ転送料金は適用されます。

最後に

従来、プライベートサブネットにあるEC2は、踏み台サーバーを設置するか、セッションマネージャーなどでアクセスする方法がありましたが、新たな選択肢として、EIC エンドポイントが増えました。

EIC エンドポイントには、IAMベースでのアクセス制御や接続のログも記録できるということで、色々触ってみたいと思います!

参考