RDSにSSHポートフォワーディングを利用して接続してみた
はじめに
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で接続確認しました。
おわりに
PCからRDSにbastionサーバのSSHポートフォワーディングを利用して接続してみました。
PCからRDSに接続する要件がでた場合は、ご検討ください。
bastionは利用しない時に停止しておくことで、接続を制限できるほか、bastionの課金を抑えることが出来ます。
検証環境
- Amazon Linux AMI 2017.03.0 (HVM), SSD Volume Type - ami-923d12f5