RDS: MySQLにSSL接続する
RDSではSSL通信が有効になっている( SSL Support) ので、こちらで接続してみる。
まずは、RDSに通常の方法でログインして、状態確認
$ mysql -utest -ptest -h aa.bb.ap-northeast-1.rds.amazonaws.com mysql> show status like 'ssl_cipher'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | Ssl_cipher | | +---------------+-------+ mysql> select host, user, ssl_type, ssl_cipher from mysql.user; +-----------+----------+----------+------------+ | host | user | ssl_type | ssl_cipher | +-----------+----------+----------+------------+ | localhost | rdsadmin | | | | % | testtest | | | +-----------+----------+----------+------------+
SSLでログインしてみる。事前に鍵を取得する。
$ wget https://rds.amazonaws.com/doc/mysql-ssl-ca-cert.pem $ mysql -utest -ptest -h aa.bb.ap-northeast-1.rds.amazonaws.com --ssl_ca=mysql-ssl-ca-cert.pem mysql> show status like 'ssl_cipher'; +---------------+------------+ | Variable_name | Value | +---------------+------------+ | Ssl_cipher | AES256-SHA | +---------------+------------+
ログインできた。が、これだと、SSLでも非SSLでもログインできてしまって、あまり意味が無い。(SSL接続を強制できない)
では、SSL通信しか受け付けないユーザrestricted_userを作成する。
mysql> GRANT USAGE ON *.* TO 'restricted_user'@'%' REQUIRE SSL; mysql> SET PASSWORD for restricted_user = PASSWORD('restricted_user'); mysql> select host, user, ssl_type, ssl_cipher from mysql.user; +-----------+-----------------+----------+------------+ | host | user | ssl_type | ssl_cipher | +-----------+-----------------+----------+------------+ | localhost | rdsadmin | | | | % | testtest | | | | % | restricted_user | ANY | | +-----------+-----------------+----------+------------+
次に、こちらでログインしてみる。
$ mysql -urestricted_user -prestricted_user -h aa.bb.ap-northeast-1.rds.amazonaws.com ERROR 1045 (28000): Access denied for user 'restricted_user'@'10.0.3.111' (using password: YES)
狙い通り、ログイン失敗。鍵を指定して再度ログインにトライ。
$ mysql -urestricted_user -prestricted_user -h aa.bb.ap-northeast-1.rds.amazonaws.com --ssl_ca=mysql-ssl-ca-cert.pem mysql> show status like 'ssl_cipher'; +---------------+------------+ | Variable_name | Value | +---------------+------------+ | Ssl_cipher | AES256-SHA | +---------------+------------+
今度はログイン成功。コネクションを確認すると、 AES256-SHAになっている。
参考
Things You Should Know About MySQL on Amazon RDS - Amazon Relational Database Service