踏み台サーバーへの接続方法を、以下の要件で探していました。
- ポートフォワードして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でしたが、要件によって色々選択肢あると思うので最適なものを選んでいただければと思います。