この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
こんにちは。望月です。 RDSのMySQLにはSSLを使って接続することができます。今日はPHPから接続するところまで試したので、その設定手順をまとめます。
MySQLにSSL接続を行うことで、暗号化の処理の分パフォーマンスが悪化することが想定されます。
それなりの負荷のあるプロダクション環境で利用する際は、期待したパフォーマンスが得られるかどうかの検証を行った方がよいと思います。
RDSおよびMySQLの設定
RDSについては、何も設定を変更する必要はありません。通常通りRDSのMySQLインスタンスを立ち上げてください。
SSL接続のみ受け付けるユーザを作成する場合は、以下のコマンドを実行して、SSL接続のみを許可するユーザを作成して下さい。
GRANT USAGE ON *.* TO 'encrypted_user'@'%' REQUIRE SSL
CA証明書の取得
SSL接続を行うために、AWSからCA証明書を取得する必要があります。下記ページから取得して下さい。
https://rds.amazonaws.com/doc/mysql-ssl-ca-cert.pem
PHPプログラム
PDOを利用してPHPから接続をしてみます。SSLでの接続に成功しているかどうかを判定してみましょう。
<?php
$dbhost = 'sampledb.xxxxxxxxxxx.ap-northeast-1.rds.amazonaws.com';
$dbname = 'sampledb';
$dsn = 'mysql:host='.$dbhost.';dbname='.$dbname;
$user = 'username';
$pass = 'password';
$options = array(
PDO::MYSQL_ATTR_SSL_CA => '/home/ec2-user/mysql-ssl-ca-cert.pem' // CA証明書の指定
);
$client = new PDO($dsn,$user,$pass,$options);
$sql = "show status like 'ssl_cipher'";
$result = $client->query($sql);
foreach($result as $row) {
echo ($row["Value"]);
}
ポイントは、8行目から10行目の$optionsでPDO::MYSQL_ATTR_SSL_CAの値をPDOオブジェクトのコンストラクタに渡しています。この値を設定することでPHPからSSL接続を行うことになります。
このPHPをコンソールから実行します。SSLでの接続に成功しているとAES256-SHAと表示されます。
[ec2-user@ip-10-0-0-181 ~]$ php sample.php
AES256-SHA
まとめ
RDSでは特に設定変更を行うことなく、SSLでの接続が可能になります。要件によってはDBにSSLで接続する必要があるかと思いますが、その際には参考にしてみてください。