Privateサブネットに構築した踏み台経由でDBクライアントツールからRDSに接続してみた(SSMリモートポートフォーワーディング編)

SSHトンネルではなく、こちらを使うことをオススメします

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

こんにちは。AWS事業本部トクヤマシュンです。

以前、SSHトンネルを利用して、DBクライアントツールからPrivateサブネットに構築した踏み台経由でRDSに接続するエントリを投稿しました。

少し前のアップデートで、SSMリモートポートフォワーディングを使ってPrivateサブネットに構築した踏み台経由でRDSに接続することも可能になりました。

今回はこちらを使ってDBクライアントツールからRDSに接続してみます。

何が嬉しいのか?

SSHトンネルではなくSSMリモートポートフォワーディングを使って接続する利点で一番大きいのは、踏み台EC2サーバのSSH鍵管理をなくせることだと思います。
認証・認可をIAMですべて完結することができるため、踏み台EC2サーバ作成時に鍵を作成し、管理する必要がなくなります。

構成

Session Managerを使って、クライアントマシンとPrivateサブネットのEC2踏み台ホストに接続します。
EC2踏み台ホストでリモートポストへのポートフォワーディングを行って、RDSにアクセスします。

DBクライアントツールは前回と同様MySQL WorkbenchSequel AceDBeaverの3つを試します。
検証は次のバージョンを使います。

  • クライアントマシン
    • OS
      • macOS Big Sur Version 11.6.5
    • aws-cli
      • 2.7.15
    • Session Managerプラグイン
      • 1.2.331.0
    • DBクライアント
      • MySQL Workbench Version 8.0.30
      • Sequel Ace Version 3.5.2
      • DBeaver Version 22.1.3.202207240747
  • Amazon EC2 AMI
    • amzn2-ami-hvm-2.0.20220606.1-arm64-gp2
  • Amazon RDS
    • Aurora MySQL Version 2.10.2

RDSの設定

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

EC2踏み台ホストからアクセスできるように、RDSのセキュリテイグループのインバウンドルールに、EC2踏み台ホストのセキュリティグループからのTCP/3306ポートのアクセスを追加します。

EC2の設定

IAMロールの設定

EC2踏み台ホストをAWS Systems Managerのマネージドインスタンスとするため、
IAMロールにAmazonSSMManagedInstanceCoreを割り当てます。

なお、リモートホストへのポートフォワーディングを利用するにはバージョン3.1.1374.0以上のSSMエージェントがインストールされていることが必要です。
今回適用したのは現時点で最新版のAmazon Linux2 AMIでしたが、インストールされていたSSMエージェントのバージョンが低かったので、
下記ブログを参考にSSMエージェントのバージョンを最新のものにアップデートしました。

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

Session Managerを使ってEC2にSSHアクセスするため、EC2セキュリティグループのインバウンドルールは無くても構いません。

ネットワークの設定

今回はVPCエンドポイントを作成し、インターネット接続のないPrivate SubnetからAWS Systems Managerと通信します。
未設定の場合は、こちらの手順にしたがってVPCエンドポイントを作成してください。

クライアントマシンの設定

Macを使用した際の設定を示します。
AWS CLIの設定は完了しているものとします。

Session Managerプラグイン インストール

AWS CLIを使ってAWS Systems Managerのマネージドインスタンスにアクセスするには、
Session Managerプラグインをインストールする必要があります。

手順を参考にインストールします。

SSMリモートポートフォワーディング開始

下記コマンドによって、SSMリモートポートフォワーディングを開始します。
今回は、ローカルホストの3306ポートをRDSの3306ポートに転送するよう設定しています。

aws ssm start-session \
  --target i-EC2踏み台ホストのインスタンスID \
  --document-name AWS-StartPortForwardingSessionToRemoteHost \
  --parameters '{"host":["RDSのエンドポイント"],"portNumber":["3306"], "localPortNumber":["3306"]}'

コマンドをバックグラウンドで実行したい場合は、末尾に&をつけてください。

以上でクライアントマシンの設定も完了です。

DBクライアントツールの設定

DBクライアントツールからPrivateサブネットのRDSに接続します。  

次の通り設定することで、RDSに接続できました。

MySQL Workbench

Sequel Ace

DBeaver

DBクライアントの設定は、前回のトンネル接続の時とまったく同じでOKでした。

趣味のスパイスカレー

私の趣味はスパイスカレー作りで、ブログに投稿していってます。
AWSには全然関係ありませんが、お付き合いいただけますと幸いです。

  

  • 豆豉豚キーマ
  • スリランカチキンカレー
  • ナスのモージュ
  • レンズ豆のココナッツミルクダル

中華風✖︎スリランカ風のあいがけです。
一皿で違う国にトリップしたような、満足感の高いプレートでした!
コロナ禍前は色んな国に旅行してましたが、最近はめっきり行けてないので、旅人に優しい世界が戻ってくることを切に願います。

最後に

DBクライアントツールからSSMリモートポートフォワーディングを使って、Privateサブネットに構築した踏み台経由でRDSに接続しました。
SSHトンネルでと同様に接続ができ、鍵管理を無くすことが可能なので、基本的にはこちらをオススメします。
本エントリがどなたかのお役に立てば幸いです。