DBeaverから踏み台サーバ経由でRedshiftにアクセスしたい

2022.08.25

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

データアナリティクス事業本部の荒木です。

ローカルPCからRedshiftに接続する際に、「Windows環境でWSL2(Ubuntu)からSOCKSプロキシ経由で踏み台サーバにSSH接続してRedshiftにポートフォワード接続」するためのドンピシャな情報が書かれているものがあまり無く、色々と情報を寄せ集めるのが大変だったので自分のケースを紹介したいと思います。

環境

  • Windows 10 Pro
  • WSL2(Ubuntu 20.04.4 LTS)
  • DBeaver(22.1.3)
  • SOCKSプロキシ経由(認証不要)

事前作業

以下作業については事前に完了していることを前提とします。

  • 接続先Redshiftの構築
  • 踏み台サーバ(EC2)の構築
  • セキュリティグループの設定

本題

プライベートな環境に構築されたRedshiftに社内プロキシ経由で踏み台サーバにSSH接続し、ポートフォワードで接続しました。

~/.ssh/configに接続情報追加

SSH接続を行いポートフォワーディングでRedshiftへ接続する際にSSHコマンドを使います。その際にオプションが多くコマンドが長くなってしまうため、WSL2環境の~/.ssh/configに接続情報をまとめて記述しておきます。

~/.ssh/config

Host sample
  HostName {踏み台サーバアドレス}
  IdentityFile ~/.ssh/{PEMキーファイル名}
  User {EC2ユーザー名}
  ServerAliveInterval 60
  LocalForward {15439:任意のローカルポート} {***.redshift.amazonaws.com:Redshiftエンドポイント}:5439
  ProxyCommand connect -S {プロキシドメイン情報}:{プロキシポート情報} %h %p
  IdentitiesOnly yes

踏み台サーバにSSH接続

~/.ssh/configに記述したHOST名でSSHコマンドを入力し接続します。 設定が間違っていなければ、以下のような画面が表示されます。

$ ssh sample
Last login: Wed Aug 24 06:36:05 2022 from {接続元ドメイン}

       __|  __|_  )
       _|  (     /   Amazon Linux 2 AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-2/
49 package(s) needed for security, out of 89 available
[ec2-user@ip-10-0-0-205 ~]$

DBeaverからlocalhostに接続

DBeaverを立ち上げ[データベース]-[新しい接続]から、[Redshift]ドライバを押下し[次へ]を選択します。 ※ドライバがダウンロードされていなければ[ダウンロード]する必要があります。

 

接続設定に以下を設定します。

  • Host:localhost
  • Port:ポートフォワーディングで設定したローカルのポート番号(今回は15439)
  • Database:接続を行いたいデータベース名
  • ユーザー名:Redshiftへ接続を行うユーザー名
  • パスワード:上記ユーザーのパスワード

設定後、テスト接続を実施し[接続済み]となれば正常に接続できています。

以上がプロキシ経由で踏み台サーバにSSH接続し、ポートフォワードで接続する方法です。

気を付けるポイント

以下が詰まったポイントです。

  • ~/.ssh/configに記述するProxyCommandはUbuntuサーバを利用している場合はConnectコマンドを使用します。コマンドがインストールされていなければ、sudo apt-get install connect-proxyでインストールします。また、弊社ではSOCKSプロキシサーバを利用しているためconnect -Sを記述していますが、HTTPプロキシサーバを利用する場合はConnect -Hを記述する必要があります。
  • DBeaverで使用するRedshift JDBC Driver 2.0以降は、SocketFactory のサポートを新たに提供されているため、SOCKSプロキシ経由の接続も可能となります。DBeaverにダウンロードしたRedshift JDBC Driverのバージョンが2.0以上であることを確認する必要があります。

 

おわりに

終わってみれば簡単な設定かもしれませんが、いろいろと詰まった部分があったので誰かの役に立てれば幸いです。

今回接続した方法以外にも、AWS Systems Manager Session Managerを使用した接続方法もありますのでそちらも試してみてください。

参考

ローカルマシンからプライベート Amazon Redshift クラスターにアクセスする方法

Amazon Redshift が、オープンソースの JDBC および Python ドライバーを発表

SQL クライアントツールを使用して Amazon Redshift クラスターに接続する