インフラ

EC2 Linuxインスタンスへのシェルアクセス方法をざっくり比較

ec2

踏み台サーバーへの接続方法を、以下の要件で探していました。
 - ポートフォワードしてRDSへ接続できる
– SSH鍵管理が不要

その際、接続方法を色々比較してみたのでブログにします。
自分の今回の要件としては、セッションマネージャーとEC2 Instance Connectを組み合わせる方法にしました。

本記事はポートフォワードやSSH鍵管理について比較しているため、他項目の詳細な比較は以下の記事が良いと思います。
EC2インスタンスへのシェルアクセスサービスを雑にまとめてみた

比較してみた

以下の項目で比較してみました。

  • 鍵管理要否
    • SSH時に使用する公開鍵・秘密鍵をユーザー側で管理する必要か
  • パブリックアクセス要否
    • インターネットから直接インスタンスに到達、及びセキュリティグループのSSHポート許可が必要か
  • セットアップの容易さ
    • クライアントやサーバーにソフトウェアのインストールや設定などが必要か
  • ポートフォワード
    • ポートフォワードが可能か
接続方法 鍵管理 パブリックアクセス セットアップの容易さ ポートフォワード
SSH
EC2 Instance Connect 不要(※1)
セッションマネージャー 不要 不要
セッションマネージャー + SSH 不要
セッションマネージャー + EC2 Instance Connect 不要 不要

※1 独自の鍵で接続することも可能

それぞれの接続方法について解説します。

SSH

直接SSHする方法です。
クラウド・オンプレ問わずよく使われる方法で、使い慣れている方も多いと思います。
クライアント側はSSHクライアントと鍵を用意するだけでよいため、準備も比較的容易かと思います。

セッションマネージャーと違いパブリックIPの付与やセキュリティグループでのSSHポートの許可などが必要になります。

また、鍵の管理に手間がかかります。
鍵の共有はセキュリティ上好ましくないですし、個別に鍵を発行・登録するのはユーザー数が増えてくると手動でやるのは大変になってきます。

EC2 Instance Connect

EC2 Instance Connectは、SSH用の鍵を自分で用意せずにEC2に接続することができます。

EC2 Instance Connect CLI を使用してインスタンスに接続するには、インスタンス ID のみを指定します。Instance Connect CLI によって次の 3 つのアクションが 1 つの呼び出しで実行されます: 1 回限り使用の SSH パブリックキーが生成されます。このキーがインスタンスにプッシュされて 60 秒間保持されます。ユーザーがインスタンスに接続されます。Instance Connect CLI では基本的な SSH/SFTP コマンドを使用できます。

SSHと同様に直接インスタンスに接続できる必要があるため、Private Subnetにあるインスタンスに対しては使えません。
クライアントに「EC2 Instance Connect CLI」と「aws cli」のインストールが必要です。(事前にインストールされていない場合は、サーバー側にも必要)
マネジメントコンソールから接続する場合は、クライアント側での準備は不要です。

AWSドキュメント EC2 Instance Connect を使用して接続

セッションマネージャー

マネジメントコンソールやawscliから接続可能です。
IAMポリシーでアクセス制御できて、複数ユーザーが接続する場合も鍵の管理は不要です。

ある程度新しいAMIを使用する場合は、セットアップが一番簡単だと思います。
デフォルトでSSM AgentがインストールされているAMIが多く、マネジメントコンソールから繋ぐ場合はセッションマネ
ージャー用のIAMロールを割り当てるだけです。

AWSドキュメント AWS Systems Manager Session Manager

ただ、AMIによってはサーバーにSSM Agentをインストールする必要があります。
(コマンド一つ実行するだけのため簡単です。)
AWSドキュメント Amazon Linux 2 インスタンスに SSM Agent を手動でインストールする

Private Subnetにあるインスタンスに対しても、接続できるのも嬉しいポイントです。

ローカルへのポートフォワードはできますが、RDSなどへ接続する際はsocatを使うなど一工夫必要です。
(この理由からポートフォワードの項目を△にしました。)
Session Managerを使ってEC2の先にあるRDSに接続してみた

セッションマネージャー + SSH

セションマネージャーを通して、SSH接続することもできます。

AWSドキュメント ステップ 8: (オプション) Session Manager を通して SSH 接続のアクセス許可を有効にして制御する

鍵の管理は必要になりますが、セッションマネージャー単体と同様でPrivate Subnetへ接続可能でSSH用のポートを開ける必要がありません。

クライアント側にセッションマネージャー用のプラグインが必須のため、セッションマネージャー単体よりはセットアップの手間があります。

SSH接続可能なため、ポートフォワードは問題なく行えます。

セッションマネージャー + EC2 Instance Connect

セッションマネージャー + SSHの組み合わせの1つの方法ですが、EC2 Instance Connectの組み合わせたパターンです。
鍵管理とインスタンスのパブリックアクセスが不要です。

両方のセットアップが必要なので、他より手順は多くなります。
ただ、1回設定するだけのため、そこまで面倒ではないと思います。

CDKで作成した踏み台サーバにAWS SSM Session Manager と AWS Instance Connect を利用してSSH接続する

まとめ

ポートフォワードができて、鍵管理しなくていい方法ないかと接続方法比較してみました。
自分の要件的には、セッションマネージャー + EC2 Instance Connectでしたが、要件によって色々選択肢あると思うので最適なものを選んでいただければと思います。

ssm
pecoを使ってSSMセッションマネージャー経由のEC2接続を簡単にするこんにちは、ちゃりおです。 SSMセッションマネージャー便利ですよね。 接続にインスタンスIDが必要です。 しかし、インスタンスID...
aws ssm
AWS SSMセッションマネージャTips AWS CLIこんにちは、ちゃりおです。 SSMセッションマネージャを使えば、EC2インスタンスにSSH不要で入れます。 マネジメントコンソールから...
cdk
[CDK]EC2が「cdk diff」でリプレース無しだったのにリプレースされたCDKでEC2を作りました。 作った後にしばらくして、EC2の設定を変えたいことがありCDKを変更しました。 その際には、設定変更したと...