Table of Contents
やりたいこと
インターネットに晒したくないPrivateなサブネットに配置している EC2 や ALB で稼働するWebアプリケーションの画面をブラウザで確認したい
- VPNがつながっててお客さんの環境からは見える:弊社はまだはVPNを結んでいない
- 確認したいアプリケーションは複数動いている
- SSHトンネルをいちいち全部貼るのは面倒
- そもそもPrivateサブネットにいるから、そのままだとSSHできない
やったこと
Firefox proxy SSH Dynamic Portforwarding proxy SSMセッション
これで、ブラウザからプライベートなサーバのコンテンツに対して、アクセスできるようになります。
パブリックなサブネットに踏み台サーバをいちいち置くことなく!
便利!
準備
どのみにSSHするための踏み台サーバは必要です。上の構成図だとECSホストに対して、SSHしてます。
必要条件
- SSHの踏み台となるサーバに
System Manager Agent
がインストールされている。 System Manager Agent
がインストールされたEC2に SSM が可能なRoleがアタッチされている- CLI環境でSSMを実行できるIAMユーザの認証情報を持っている
① SSMで接続できることを確認する
上の必要条件を満たしていれば、あとは接続できます。
aws ssm start-session --target i-xxxxxxxxxxxx(対象インスタンスID)
ただ、これSSHのプロセスとしては認識されません。なので w
とか打っても出てこないし、secureログにも残りません。
② SSMセッションをプロキシして、SSH接続する
.ssh/config
に下記を追記しておきます。
Windows用
host i-*
ProxyCommand C:\Program Files\Amazon\AWSCLI\bin\aws.exe ssm start-session --target %h --document-name AWS-StartSSHSession --parameters "portNumber=%p"
Linux用
host i-*
ProxyCommand sh -c "aws ssm start-session --target %h --document-name AWS-StartSSHSession --parameters 'portNumber=%p' --profile new-awscli"
この状態で、該当サーバーの鍵を指定すれば、SSMのセッションをプロキシしてSSHがつながります。
ssh ec2-user@i-xxxxxxxxxxxx -i ./.ssh/xxxxx.pem(インスタンス作成時に指定した鍵)
インターネットに晒してない+SSHのポートを開けてなくてもOK
なところがセキュアですね。
SSHができれば、あとは現存するSFTPやトンネリングなどやり放題です。
③ SSH接続を利用して動的ポート転送用のトンネルを開設
ssh ec2-user@i-xxxxxxxxxxxx -i ./.ssh/xxxxx.pem -D 9999
-D 使いたいローカルポート
これで、ブラウザがProxyするためのポートを開けます。
④ FirefoxでProxy用の設定をする
右上 ハンバーガーメニュー > オプション > ネットワーク設定 > 詳細設定
下記の画像のようにする。画像は 8888
になってますが、適宜読み替えてください。
これで、SSHを貼った状態であれば、ブラウザからプライベートなコンテンツが見れるようになります。
SSM セッションマネージャー便利
最近新しくたてるサーバはSSM利用をデフォルトとしていますが、昔の案件はなかなかまだ浸透していないため、SSMはまだ利用できないものも多く...
セキュリティグループでSSHのためのポートを開ける世界をなくすため日々アップデートして行きたいこの頃。
uchida
福岡でWebエンジニアやってます。PHP, クラウド, インフラあたりが好き。