オンプレ環境にあるYellowfinから、AWSセッションマネージャーによる接続のみが許可されたAWS環境にあるRDSへ接続したい場合があるというお話をお聞きしたので、簡単に検証してみました。
SSM用ロールの作成
踏み台サーバに割り当てるためのIAMロールを作成します。
エンティティタイプはAWSのサービス、ユースケースはEC2を選択します。
ポリシーからAmazonEC2RoleforSSMを選択します。
アクセスキーの作成
セッションマネージャーを使用するユーザー用のアクセスキーを作成します。
作成されたアクセスキーとシークレットアクセスキーをメモっておきます。
AWS CLIとSession Managerプラグインのインストール
以下を参考にして、それぞれインストールします。
https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/getting-started-install.html
https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-working-with-install-plugin.html
AWS CLIの初期設定
ターミナルでaws configure
を実行し、先ほどメモしたアクセスキーなどを設定します。
https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/cli-configure-quickstart.html
RDSの準備
今回は既存のRDS(PostgreSQL)を使用しました。
本記事中でエンドポイントはxxx.ap-northeast-1.rds.amazonaws.com、ポートは5432として記述します。
踏み台サーバの準備
踏み台サーバがすでに存在する場合は不要ですが、今回は新たに踏み台サーバ用のEC2インスタンスを起動しました。
本記事中ではインスタンスID:i-999として記述します。
セッションマネージャーの接続
ターミナルで以下を実行してセッションマネージャーに接続します。
aws ssm start-session \
--target i-999(踏み台サーバのインスタンスID) \
--document-name AWS-StartPortForwardingSessionToRemoteHost \
--parameters '{"host":["xxx.ap-northeast-1.rds.amazonaws.com(RDSのエンドポイント)"],"portNumber":["5432(RDSのポート)"], "localPortNumber":["15432(ローカル側のポート)"]}'
Yellowfinのデータソース設定
ローカルのYellowfinを起動し、データソースの設定を行います。
データベースホストはlocalhost、データベースポートはSSM接続で設定したローカル側のポート(上記の例では15432)を設定します。
SSM接続している状態で「テスト接続」をクリックすると、以下のようにローカルのYellowfinからRDSへ接続することができます。
参考にした情報
以下の記事を参考にさせていただきました。
https://qiita.com/comefigo/items/b705325d082018ab2348
https://dev.classmethod.jp/articles/aws-ssm-support-remote-host-port-forward/