Top View


Author uchida

【SSM×SSH】インターネットからアクセスできないEC2やALBのアプリケーションをブラウザで表示する

2020/01/27

やりたいこと

インターネットに晒したくない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 になってますが、適宜読み替えてください。

FireFoxの設定

これで、SSHを貼った状態であれば、ブラウザからプライベートなコンテンツが見れるようになります。

SSM セッションマネージャー便利

最近新しくたてるサーバはSSM利用をデフォルトとしていますが、昔の案件はなかなかまだ浸透していないため、SSMはまだ利用できないものも多く...
セキュリティグループでSSHのためのポートを開ける世界をなくすため日々アップデートして行きたいこの頃。

uchida

uchida

福岡でWebエンジニアやってます。PHP, クラウド, インフラあたりが好き。AWS 五冠