Amazon Web Services ブログ
SSL/TLS を経由して RDS MySQL, RDS MariaDB, and Amazon Aurora MySQL に sysbench を実行する
sysbench は MySQL 互換のデータベースでベンチマークを実行するために有用なツールです。もし、sysbench を使って Amazon Aurora MySQL のパフォーマンスの評価をしたい場合、Amazon Aurora Performance Assessment Technical Guide が役に立つでしょう。しかし、もし SSL/TLS を経由して sysbench を実行したい場合、このツールや AWS のサービスにあるいくつかの制限について考える必要があります。
この投稿では、RDS MySQL, RDS MariaDB, and Aurora MySQL で sysbench を実行するにあたっての考慮点と、どのように準備するべきかについて、お話いたします。
考慮点
sysbench の最新のパッケージリリースは 1.0.17 になります。もし、yum や RPM のようなパッケージマネージャから sysbench をインストールした場合、このバージョンがインストールされます。このバージョンでは、sysbench は SSL/TLS を使用するにあたって、以下のような制限を持っています:
--mysql-ssl
オプションは ON または OFF のみが指定可能でSSL_MODE
はREQUIRED
固定- クライアント秘密鍵、クライアント公開鍵、CA 証明書のすべてが必須
- クライアント秘密鍵、クライアント公開鍵、CA 証明書のパスはそれぞれ
client-key.pem
,client-cert.pem
,cacert.pem
に固定
RDS は SSL 接続のためのクライアント秘密鍵を提供しておらず、しかし sysbench 1.0.17 がこれを必要とするため、sysbench は SSL/TLS 経由で RDS MySQL, RDS MariaDB および Aurora MySQL に接続できなくなっています。もし、SSL/TLS が sysbench 1.0.17 で有効になっている場合、以下のようなエラーが出力されるでしょう:
上記の制限はバージョン 1.1 からこちらのコミットにより撤廃され、下記が可能となりました:
--mysql-ssl
オプションに sysbench バイナリをビルドするのに使用された MySQL クライアントでサポートされてい任意のSSL_MODE
を指定可能- 証明書ファイルは任意で指定可能
- それぞれの証明書ファイルのパスは
--mysql-ssl-key
,--mysql-ssl-cert
,--mysql-ssl-ca
オプションで任意に指定可能
そのため、もし sysbench 1.1 を使用していれば、下記のように SSL_MODE = REQUIRED
で SSL/TLS 経由で sysbench を RDS MySQL, RDS MariaDB, or Aurora MySQL に実行することができます:
しかし、sysbench 1.1 はパッケージとしてはリリースされていないため、ソースコードからビルドする必要があります。
sysbench 1.1 をビルドする
必要な前提パッケージをインストールする
まず最初に、MySQL ライブラリのインストールと sysbench のビルドの前提となるパッケージをインストールする必要があります。もし Amazon Linux AMI や Amazon Linux 2 または Red Hat Enterprise Linux AMI をご利用中の場合、これらのパッケージは yum コマンドで下記のようにインストールすることができます:
さらに、MySQL クライアントライブラリとヘッダファイルのインストールをする必要があります。もし、Red Hat Enterprise Linux AMI をご利用中であれば、MySQL 公式の yum リポジトリを使用することができます。MySQL Community Downloads にある RPM パッケージを利用して MySQL yum リポジトリを追加してください。リポジトリをインストールしたら、下記のように MySQL クライアントライブラリとヘッダファイルを yum 経由でインストールすることができます:
もし、Amazon Linux AMI または Amazon Linux 2 をご利用中の場合、MySQL 8.0.17 以降で必要となる OpenSSL 1.1.1 および glibc 2.28 が Amazon Linux リポジトリに存在しないため、MySQL 8.0.16 の RPM パッケージを MySQL Product Archives からダウンロードし、下記のようにインストールする必要があります:
Aurora Serverless がワイルドカード証明書を使用しており、また MySQL はワイルドカード証明書を 8.0.12 からサポート開始したため、MySQL 8.0.12 以降の MySQL クライアントライブラリおよびヘッダファイルをインストールする必要があります。この変更は MySQL 8.0.12 のリリースノートで下記のようにご確認いただけます:
Previously, for the –ssl-mode=VERIFY_IDENTITY option, the client checked whether the host name that it used for connecting matched the Common Name value in the certificate but not the Subject Alternative Name value. Now, if the client uses OpenSSL 1.0.2 or higher, the client checks whether the host name matches either the Subject Alternative Name value or the Common Name value in the server certificate. Thanks to Daniël van Eeden for a patch on which this change was based. (Bug #16211011, Bug #68052, Bug #27511233, Bug #89578)
sysbench のソースコードを GitHub リポジトリのクローンで取得する
下記のように、git clone を使用して sysbench GitHub リポジトリをクローンすることができます:
sysbench をビルドする
下記のように、ソースコードのディレクトリに存在する automake と libtool を使用したスクリプトで、sysbench をビルドすることができます:
SSL/TLS 経由で RDS MySQL, RDS MariaDB および Aurora MySQL に sysbench を実行する
これまでの手順により、下記のように、SSL/TLS 経由で RDS MySQL, RDS MariaDB および Aurora MySQL に sysbench を実行することができるようになりました:
RDS MySQL, RDS MariaDB および Aurora MySQL で SSL_MODE = VERIFY_IDENTITY
または VERIFY_CA
を使用するためには rds-combined-ca-bundle.pem 証明書をダウンロードしてください。Aurora Serverless MySQL の場合は、AmazonRootCA1.pem 証明書をダウンロードしてください。
SSL_MODE = VERIFY_IDENTITY
は、sysbench から Aurora MySQL および Aurora Serverless MySQL のクラスターエンドポイント (Cluster Endpoint) および読み込みエンドポイント (Reader Endpoint) に接続する際には使用いただけません。クラスターエンドポイントおよび読み込みエンドポイントはインスタンスエンドポイントへの CNAME レコードとなり、そのため sysbench に渡されるホスト名と、最終的に接続する DB インスタンスのホスト名が異なります。本来 Subject Alternative Names (SAN) が MySQL クライアントライブラリで適切に処理されていれば、Aurora の DB インスタンスにインストールされているサーバ証明書はすべてのエンドポイント名を SAN として含んでいるため、問題にならないはずです。しかし、MySQL 8.0.18 時点では、この MySQL GitHub リポジトリ上のコードが示すように、MySQL クライアントライブラリは VERIFY_IDENTITY の検証に SAN を使用せず、コモンネーム (CN) との等価性のみを検証します。
そのため、クラスターエンドポイントおよび読み込みエンドポイントを使用する際には VERIFY_CA
を使用するか、もしくはインスタンスエンドポイントを使用する必要があります。
まとめ
セキュリティはアプリケーションを実行する上で最も重要な要素で、SSL/TLS はデータベースのワークロードをセキュアに保つために有用です。しかし、SSL/TLS の使用はオーバーヘッドや通常よりも高いリソース消費を引き起こします。そのため、SSL/TLS によって引き起こされる影響の基準値を計測するために、ベンチマークは非常に重要になります。
この投稿では、なぜ SSL/TLS 経由で RDS MySQL, RDS MariaDB および Aurora MySQL に sysbench を実行するためにいくらかの準備が必要なのか、このユースケースをカバーするために sysbench をビルドする方法、そして SSL/TLS を RDS MySQL, RDS MariaDB および Aurora MySQL で使用するにあたってのいくつかの考慮点について説明いたしました。
この投稿を読むことで sysbench を SSL/TLS によって引き起こされる影響の基準値を計測するために RDS MySQL, RDS MariaDB および Aurora MySQL に sysbench を実行することができるようになり、またそれらがどのように動作するかについてさらに理解が進むことを願っています。
原文: Running sysbench on RDS MySQL, RDS MariaDB, and Amazon Aurora MySQL via SSL/TLS
About the Author
Yoshihiko Matsuzaki is a Database Engineer with the Relational Database Services (RDS) team at Amazon Web Services.