aws memo

AWS関連の備忘録 (※本ブログの内容は個人的見解であり、所属組織及び企業の意見を代弁するものではありません。1年以上古いエントリは疑ってかかってください)

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