りまりまだんの本拠地

プリキュアを応援しつつ、技術的なこととかを色々かくぞ

AWSで踏み台サーバを経由してWebアプリサーバへ接続する設定をしたときのめも

AWSで踏み台サーバ(Amazon Linux)を経由してWebアプリケーション用サーバに接続できるようにしたとき、結構ハマってしまったのでめも
参考サイト

セキュリティグループの設定

踏み台はssh接続のみを外部から受け付けるように設定し、Webアプリケーション用のサーバ(Webアプリサーバ)はhttp・https通信のみ受け付けるように設定する。また、双方がdefaultのセキュリティグループに属していることが必要なので注意する。

(defaultのグループのルールを介して通信するためらしいけど、いまいちよくわかっていない感ある)

defaultセキュリティグループにどちらも属していない場合

  1. EC2>右クリック>ネットワーキングから、セキュリティグループの変更を選択する。
  2. インスタンスに関連づけるセキュリティグループにdefaultを追加する。
  3. セキュリティグループの割り当てをクリックする。

踏み台サーバ(dev_jumpsrv01)用セキュリティグループの設定

種別 タイプ プロトコル ポート範囲 送信元
インバウンド ssh TCP 22 0.0.0.0/0
アウトバウンド すべてのトラフィック すべて すべて 0.0.0.0/0

Webアプリサーバ(dev_webserver02)用セキュリティグループの設定

種別 タイプ プロトコル ポート範囲 送信元
インバウンド http TCP 80 0.0.0.0/0
インバウンド http TCP 443 0.0.0.0/0
インバウンド http TCP 443 ::/0
アウトバウンド すべてのトラフィック すべて すべて 0.0.0.0/0

クライアントPCの~/.ssh設定

毎度sshコマンドを使用するのが面倒なので、~/.ssh/configに接続情報を記載する。

ssh/configの編集

Host

ssh時に指定する引数を記載する。host名と同じにしておくとわかりやすいかも。

Hostname

IPアドレスを記載する。踏み台はパブリックIP(もしくはプライベートIP)、そのほかはプライベートIPを記載。

IdentityFile(踏み台限定の設定)

.pemのありかを記載する。フルパス指定で記載すること。

ProxyCommand(踏み台以外の設定)

踏み台に入るときのコマンドを記載する。ハマりどころが多かったので記録しておくと

  • sshコマンドは引数-Fを指定する。
    デフォルトで/etc/ssh/configというファイルがあり、こちらと競合するからか、ホスト名での名前解決ができなかった。
  • サーバ名は踏み台サーバのHost記載と合わせる
    こちらを合わせないと名前解決できずにエラーとなる。
  • ローカルから直接Webアプリサーバへ接続させたい場合、IdentityFileの指定を忘れないこと。
    パスはローカルのものを指定すること。
  • WebアプリサーバのHostnameはプライベートIPでもOK
# クライアントPCに記載する
Host dev_jumpsrv01
  Hostname 52.193.XX.XX
  User ec2-user
  IdentityFile /Users/mofumofu/.ssh/秘密鍵.pem
Host dev_webserver02
  Hostname 10.0.0.100
  User ec2-user
  IdentityFile /Users/mofumofu/.ssh/秘密鍵.pem
  ProxyCommand ssh -F ~/.ssh/config dev_jumpsrv01 -W %h:%p

踏み台サーバへの接続テスト

$~ mofumofu$ sudo ssh -F ~/.ssh/config dev_jumpsrv01
Last login: Wed May  3 05:53:58 2017 from mofumofu-no-pc
       __|  __|_  )
       _|  (     /   Amazon Linux AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-ami/2017.03-release-notes/
[ec2-user@ip-10-0-0-239 ~]$ exit
logout
Connection to 52.193.XX.XX closed.
$~ mofumofu$
$~ mofumofu$

Webアプリサーバへ直接接続できるかテスト

$~ mofumofu$ sudo ssh -F ~/.ssh/config dev_webserver02
Last login: Wed May  3 07:20:10 2017 from 10.0.0.239

       __|  __|_  )
       _|  (     /   Amazon Linux AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-ami/2017.03-release-notes/
6 package(s) needed for security, out of 6 available
Run "sudo yum update" to apply all updates.
[ec2-user@ip-10-0-0-100 ~]$

ログをみると、dev_jumpsrv01を経由してdev_webserver02に接続していることがわかる。
windowsでも同じことはできるのかな?