概要
プライベートサブネット内の Amazon RDS や Amazon Aurora のアクセス方法で困ったことないですか?
ローカルのクライアントツールからリモートの DB へ EC2 の踏み台サーバ経由でアクセスする方法です。
今回、実現する方法にはセッションマネージャーが必要ですので、予め設定しておきましょう。
動作環境
踏み台サーバ: AmazonLinux2
リモートDB: RDS or Aurora
ローカル: Mac
前提
- ローカル環境にセッションマネージャーのインストール
Session Manager プラグインを macOS にインストールおよびアンインストールする - EC2 にセッションマネージャーからのアクセスを許可するロールを付与
Systems Manager セッションマネージャを使ったら SSH 管理不要になった - EC2 にローカル環境からアクセスできるように ec2-user の公開鍵を登録
- 予め接続したい AWS アカウントへの AWS CLI とプロファイルの設定をしておく
SSH Config の設定内容
上記の前提の設定が完了したら、ポートフォワードするための SSH の Config を設定します。
host <ホスト名>
HostName <インスタンスID>
Port 22
User ec2-user
ServerAliveInterval 300
IdentityFile ~/.ssh/id_rsa.pem
LocalForward 33306 <リモートホスト RDS or Aurora>:3306
ProxyCommand sh -c "env PATH=/usr/local/bin:$PATH aws ssm start-session --profile <プロファイル名> --target %h --document-name AWS-StartSSHSession --parameters 'portNumber=%p'"
注目するところは下記です。
LocalForward 33306 <リモートホスト RDS or Aurora>:3306
ここでは、ローカルポートに 33306
番ポートを開けて、そこへのアクセスを SSH 経由で最終的に、リモートホストの DB: 3306
番ポートへアクセスを流しています。
また、下記の設定で、セッションマネージャー経由で EC2 へアクセスを行ってます。
セッションマネージャー経由なので EC2 には 22 番ポートのセキュリティグループを開ける必要はありません。
ProxyCommand sh -c "env PATH=/usr/local/bin:$PATH aws ssm start-session --profile <プロファイル名> --target %h --document-name AWS-StartSSHSession --parameters 'portNumber=%p'"
SSH 接続
事前にポートフォワーディング用に SSH を接続しておきます。 ~/.ssh/config
で設定したホスト先(踏み台サーバ)にコネクションを貼りましょう。
ssh <ホスト名>
踏み台サーバへ SSH アクセスができていれば成功です。SSH のセッションが生きてる間は、ポートフォワーディングできる状態になっています。DB クライアントツールの作業中は常に SSH 接続を維持しておきましょう。
DB クライアントツールの接続情報
上記設定が完了したら、後は DB クライアントツールから接続します。
Connection Method は TCP/IP
で接続
Hostname: は localhost
Port: はポートフォワーディング元の 33306
を指定
あとは、DBのユーザ、パスワード、DBスキーマを設定すると接続が成功します。
まとめ
AWS では、リモート環境でかつプライベートなDBへのアクセスには現状踏み台サーバを経由してアクセスするしか方法がありません。
その際に、毎度接続方法を忘れてしまうのでまとめました。
誰かにためになれたら幸いですm(_ _)m
あとがき
以前投稿した下記記事の改良版になっております。
ポートフォワーディング部分のネットワーク図などを見たい方は参考にしてください。
セッションマネージャー over SSH 経由でプライベートサブネット内のRDSへ接続する方法