Amazon Redshiftクラスタに対するSSL接続について

2014.05.01

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

Redshiftでは、SSL接続について幾つか術(すべ)が用意されています。psqlを用いる場合ですとデフォルトでSSL接続を行うのであまり気にする点では無いかも知れないですが、GUIツール等でDBの操作やメンテナンスを行う場合、SSL接続では無いという点は不安となるところ。そこで当エントリではGUIツールを用いる際に、サーバ証明書を使わずにお手軽にSSL接続を行う為の設定について確認と実践をしてみたいと思います。

Redshiftクラスタが立ち上がっており、以下のような接続情報が提供されている前提で進めます。

項目
URL: xyz.us-west-2.redshift.amazonaws.com
DB: cmtestdb
UserName: root
Password: PaSsWoRd123

Amazon Redshiftに於けるSSL接続に関する設定

Redshiftではデフォルト値のままでもSSL接続は可能ですが、『SSL接続しか認めん!』という場合は以下設定値を変更する事で対応が可能となります。

設定項目は至ってシンプル。クラスタに紐付くパラメータグループのrequire_sslという値がデフォルトでfalseになっているので、ここをtrueに変更→[Save Changes]で反映の後、クラスタ再起動を行えば対応は完了となります。

connect-to-redshift-with-ssl-01

SSL証明書を使わない場合の接続方法

psqlの場合

psqlコマンドは証明書が無い場合でもデフォルトでSSL接続を行います。ですので通常通りのコマンド実行で問題無く接続可能です。

$ psql -h xyz.us-west-2.redshift.amazonaws.com -p 5439 -d cmtestdb -U root
Password for user root: (パスワードを入力)
psql (9.1.5, server 8.0.2)
WARNING: psql version 9.1, server version 8.0.
         Some psql features might not work.
SSL connection (cipher: DHE-RSA-AES256-SHA, bits: 256)
Type "help" for help.

cmtestdb=#

SQL Workbench/Jの場合

psql以外の場合ですと、任意のプロパティを登録&接続パラメータを編集する事で接続が可能になるようです。登録が必要なプロパティは以下。

プロパティ名
sslfactory org.postgresql.ssl.NonValidatingFactory

接続画面を開き、[Extended Properties]ボタンを押下、上記内容を追加します。

connect-to-redshift-with-ssl-02

そして接続URLに以下内容を追記。これで繋がるはずです。

ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory (接続文字列、DBの後に追記)

connect-to-redshift-with-ssl-03

IntelliJ IDEA Database Toolsの場合

IntelliJの場合も上記同様の設定となります。DB接続の構成作成までは以下エントリをご参考下さい。

接続情報の[Advanced]タブを選択し、プロパティ名が羅列されている中のsslに対する値としてtrueを設定し、[Apply]ボタンを押下。

connect-to-redshift-with-ssl-04

URL接続文字列に上記と同じ文字列を付加する事で接続可能となります。

connect-to-redshift-with-ssl-05

まとめ

以上、証明書を用いずにRedshiftクラスタに対してSSL接続を行う方法についてまとめてみました。その他のGUIツールでもプロパティが追加可能なものであれば多分接続は行けるんじゃないかな〜と思います。

本来であれば併せて『証明書を使う場合の接続方法』も試してみたかったのですが(と言うか試してたのですが)、最後の接続確認する所で上手くいかない点があり、もう少し調査解明が必要そうな感じがしたのでひとまずここで区切ってみました。psqlではデフォルトでSSL接続を行っていますし、参考にしたドキュメントでも『厳密には、Amazon Redshift での SSL サポートは、クライアントとクラスター間の接続を暗号化することが目的であり、サーバーの認証に使用されるべきではありません。』との記載があるので、暗号化がこの手順で達成されるのであれば第1段階としては問題無いのかな、という気もします。

証明書を用いたSSL接続方法についても後日また機会があれば経緯や手順をまとめておきたいと思います。

参考情報