RDSにSSHポートフォワーディングを利用して接続してみた

2017.04.20

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

はじめに

PCからAmazon RDSにbastionのSSHポートフォワーディングを利用して接続してみました。

構成を説明します。
Frontendサブネットにbastion(踏み台インスタンス)を配置します。
Frontendはルートテーブルにインターネットゲートウェイへのエントリがあるパブリックサブネットです。

DatastoreサブネットにMySQLのRDSインスタンスを配置します。
Datastoreはインターネットに接続できないプライベートサブネットです。

構成図

本構成にはセキュリティ面のメリットがあります。
RDSに接続するためには、RDSのユーザーとパスワードに加えて、bastionの秘密鍵が必要です。
また、不要な時はbastionを停止しRDSへの接続を制限出来ます。

ポートフォワーディングの有効化

bastionでポートフォワーディングを有効化します。
/etc/ssh/sshd_configを開き、以下のように変更します。
変更後、sshdを再起動し反映します。

  • 変更前
    • #GatewayPorts no
  • 変更後
    • GatewayPorts yes

セキュリティグループの許可

bastionとRDSのセキュリティグループに許可を追加します。

bastionのセキュリティグループ

SSHの許可を追加します。
なるべく自拠点のみ許可するようにします。

タイプ プロトコル ポート範囲 送信元
SSH TCP 22 自拠点IPアドレス

RDSのセキュリティグループ

RDSでは、bastionからの接続を許可します。
MySQLの場合は3306を許可します。

タイプ プロトコル ポート範囲 送信元
MYSQL/Aurora TCP 3306 bastionのセキュリティグループ

PCからRDSに接続してみる

PCからbastionにSSHポートフォワーディングで接続します。

ポートフォワーディング(Mac)

Macでは、sshコマンドを使って接続してみました。

$ sudo ssh -L 3306:RDSのエンドポイント:3306 ec2-user@bastionのグローバルIPアドレス -i ec2のキーペア

ポートフォワーディング(Windows)

Tera Termで試してみました。
以下手順でポートフォワーディング出来ます。

  • bastionにSSH接続
  • 設定 > SSH転送を選択
  • 追加を選択
  • 以下の通り、入力しOKを選択
    • ローカルのポート:3306
    • リモート側ホスト:RDSエンドポイント
    • ポート:3306
  • OKを選択

MySQLクライアントで接続

MySQLクライアントでは、127.0.0.1を指定し接続します。 Sequel Proで接続確認しました。

Sequel_Pro

おわりに

PCからRDSにbastionサーバのSSHポートフォワーディングを利用して接続してみました。
PCからRDSに接続する要件がでた場合は、ご検討ください。
bastionは利用しない時に停止しておくことで、接続を制限できるほか、bastionの課金を抑えることが出来ます。

検証環境

  • Amazon Linux AMI 2017.03.0 (HVM), SSD Volume Type - ami-923d12f5

参考