プライベートEC2にWinSCPを使用してSSMポートフォワーディング機能でファイル転送する
はじめに
前回プライベートなEC2にSSM Agentを入れて接続を確認できました。
→詳しくはこちら
ただいちいちコマンドを打ってファイルを転送するのは面倒ですよね。
だからといって踏み台サーバを作るとしても運用、コスト、セキュリティなど考えることが多いです。
そこで、SSMのポートフォワーディング機能を利用することで、プライベートなEC2に対して WinSCPを使用してファイル転送をできるような構築を実装しました。

WinSCPとは
WinSCPとは、Windows向けのSFTP/SCP/FTPクライアントソフトです。
ファイルを安全にサーバーとやり取りするためのツールです。
公式サイト
こちらからダウンロードできます。
インストール、使い方に関してはこちらの記事が参考になります。
前提
- プライベートEC2にSSMセッションマネージャーで接続が確認できていること
- WinSCPをインストールしていること
- AWS CLIが使えること
1.Session Manager プラグインのインストール
AWS Command Line Interface (AWS CLI) を使用してマネージドノードとの Session Manager セッションを開始するには、ローカルマシンに Session Manager プラグインをインストールする必要があります。
詳しくはこちら
2.AWS CLIでポートフォワーディング設定
AWS CLIからSSMセッションマネージャーでポートフォワーディングの設定を行います。
aws ssm start-session --target i-xxxxxxxxx --document-name AWS-StartPortForwardingSession --parameters "portNumber=22,localPortNumber=6022" --profile awscliのプロファイル
※プロファイルでリージョン指定をしていない場合、リージョンを指定する必要があります。
aws ssm start-session --target i-xxxxxxxxx --document-name AWS-StartPortForwardingSession --parameters "portNumber=22,localPortNumber=6022" --region ap-northeast-1
下記が出たらOKです。
Starting session with SessionId: セッションID
Port 6022 opened for sessionId セッションID
Waiting for connections...
補足
--targetには接続するEC2のインスタンスIDを入力します。
--document-nameで指定している「AWS-StartPortForwardingSession」がポートフォワードを行う際の設定となります。
--parametersではポートを指定します。「localPortNumber」から接続先の「portNumber」のポートにフォワーディングします。localPortNumberは自由に設定できます。
3.WinSCPから接続するための設定
WinSCPを起動し、
「新しいサイト」から
- 転送プロトコル:SCP
- ホスト名:localhost
- ポート番号:6022
- ユーザー名:bitnami(今回はbitnamiのAMIの為)
- パスワード:なしでOK
次に「設定」をクリックし、「SSH → 認証」でEC2の秘密鍵を指定します。
※鍵作成時のpem形式でなくppk形式で指定してください。

「OK」をクリックし、「ログイン」を選択します。
接続できました。(右側ペインにサーバー内のファイルが表示されます)

ファイルもアップロードできました。

接続を切る際は、「Ctr + C」か下記を入力します。
aws ssm terminate-session --session-id セッションID --profile awscliのプロファイル
おわりに
以上がSSMセッションマネージャーを経由してWinSCPからファイルをアップロードする方法でした。
頻繁にファイルをアップロードする際は、GUIから操作できると便利ですね。
WinSCPはWindowsしか使用できないので、Macの方はFileZillaを使用する必要があります。
その方法も今後検証したいと思います。
Discussion