Amazon Redshift新機能:ユーザーのパスワードにMD5ハッシュ値を設定可能になりました

2016.04.30

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

G.W.がいよいよ始まりました!皆さんいかがお過ごしでしょうか。私は昨日映画『ズートピア』を観て来ました。ディズニーアニメを映画館で観るのって何気にあまり機会が無かったのですが、さすがディズニー、素晴らしいクオリティでとても楽しめました!個人的には2016年に鑑賞した映画の中で今のところ暫定1位です。

さて、昨日4/29付けでAWSから以下のAmazon Redshiftに関する機能追加のお知らせが告知されていました。当エントリではこの内容に含まれるもののうち、『MD5 hash password parameters』についてご紹介していきたいと思います。

例によって、Amazon Redshiftの機能は告知から1〜2週間後、クラスタのメンテナンスウインドウによるバージョン更新で所定のバージョンにアップグレードされる事で利用可能となります。

今回の対象バージョンは1.0.1046となります。お使いのRedshiftクラスタのバージョンがこの値になっていれば利用可能です。

$ aws redshift describe-clusters --cluster-identifier cm-redshift \
| jq '.Clusters[] | .ClusterVersion, .ClusterRevisionNumber'
"1.0"
"1044"
$

CREATE USER / ALTER USERコマンド実行時、パスワードにMD5ハッシュ値を設定可能に

CREATE USERまたはALTER USERコマンドを実行する際、Amazon Redshiftはデータベース内にユーザー名とパスワードの値をMD5ハッシュ値で格納します。その後、ログイン時にユーザーがユーザー名とパスワードをデータベースに対して指定した際に、Amazon Redshiftはユーザー名とパスワードのMD5ハッシュ値を生成し、格納済みのMD5ハッシュ値と比較を行います。今回のこの機能では、パスワードの値に文字列をそのまま渡すのでは無く、所定のルールで作成されたMD5ハッシュ文字列を渡せるようになりました。

(注意)MD5ハッシュ値を指定する際、CREATE USERコマンドはその値を有効なMD5ハッシュ文字列か否かをチェックしますが、文字列のどの部分がパスワードなのかについては検証を行いません。

MD5パスワードを指定する場合、以下の様な手順を踏む必要があります。

1).パスワードとユーザー名を結合した文字列を作成。例えば、パスワードをez、ユーザー名をuser1とした場合、結合される文字列はezuser1となります。
2).上記手順で結合した文字列を32文字MD5ハッシュ文字列に変換。Redshiftでは、md5関数でハッシュ文字列を作成する事が出来ます。
MD5 Function - Amazon Redshift
以下は||を併用してMD5ハッシュ文字列を生成する例です。
# select md5('ez' || 'user1');
               md5                
----------------------------------
 153c434b4b77c89e6b94f12c5393af5b
(1 row)
3).生成したハッシュ文字列の前にmd5を付与した文字列をパスワードの値として指定し、コマンド実行。
create user user1 password 'md537af65b44378ac7a5a1fb187a1969c71';
4).指定したユーザー名とパスワードを使ってデータベースへのログインを確認。

まとめ

以上が設定作業手順となります。今回のこの手順を用いる事で、パスワード情報の秘匿性が高まるので安心度もUpしますね。上手く活用して行きましょう!こちらからは以上です。