SSMセッションマネージャーのポートフォワーディング機能を利用してみた

この記事は公開されてから半年以上経過しています。情報が古い可能性がありますので、ご注意ください。

AWS System Managerセッションマネージャーにポートフォワーディング機能が追加されました。

AWS System Manager Sessions Manager を使用した新しい機能 – Port Forwarding

この機能を利用すれば、インバウンドポート(SSH/RDP)を許可せずに対象インスタンスへログインすることが出来ます。
実際に本機能を利用してみましょう。
※クライアント機はWindowsを想定しています。

サーバー側(EC2インスタンス)の準備

IAMロール

ログインするEC2インスタンスにIAMロールをアタッチします。
IAMポリシーは AmazonSSMManagedInstanceCore (AWS管理ポリシー) を利用します。

SSMエージェントのインストール

以下を参照ください。Amazon Linux等には既定でインストールされています。

Amazon EC2 Linux インスタンスに SSM エージェント を手動でインストールする

SSMエージェントのアップデート

以下を参照ください。

Run Command を使用して SSM エージェント を更新する

yum update等を利用した場合は最新バージョンに更新されない場合もあるので、Run Command での更新をお勧めします。

クライアント側の準備

AWS CLIのインストール

以下を参照ください。既にインストールされている場合も最新版のインストールをお勧めします。

Windows に AWS CLI をインストールする

セッションマネージャープラグインのインストール

以下を参照ください。既にインストールされている場合も最新版のインストールをお勧めします。

Windows に Session Manager Plugin をインストールする

クライアントで利用するアクセスキーの準備

クライアントにインストールしたAWS CLIを利用する為に、IAMのアクセスキーを準備します。
CloudFormationのテンプレートを用意したのでご利用ください。

CloudFormationの出力に表示されたアクセスキーとシークレットアクセスキーを控えておいてください。

ポートフォワーディング機能を利用してログインしてみる

コマンドプロンプトで、AWS CLI用のアクセスキーを設定します。

必要に応じてデフォルトリージョンと出力形式も設定します。

インスタンスIDとポート番号(今回はEC2インスタンスがLinuxなのでSSH=22)を指定してポートフォワーディング機能を呼び出します。

start-session コマンド実行後、ランダムに割り当てられたローカル側のポート番号が出力されます。

各クライアントで 127.0.0.1:[出力されたポート番号] を接続先に指定し、ログインします。

ログイン出来ました。

ちなみに、ローカルのポート番号を指定したい場合は以下のようにします。

RDPの場合

アクセスキーのローテーション

話がそれますが、CloudFormationで作成したIAMユーザには自身のアクセスキーを作成・削除できる権限があります。
適宜アクセスキーをローテートしましょう。