こんにちは、大久保です。

今回は、Auroraのマイナーバージョンアップ時に大量発生したWarningログへの対応方法について記事となります。

起こったこと


Aurora MySQL 3.06.0(compatible with MySQL 8.0.34)へのマイナーバージョンアップ検証を行っていたところ、それは起こりました。

「CloudWatch Logsに大量のWarningログが出力されてる…」

※1. この画像は再現したものになります。
※2. エラーログの出力設定を有効化していないと出力されません。

なぜこんなことに?


下記の状態にもかかわらず、延々とWarningログが出力され続けていました。

  • クラスターに対して誰も接続をしていない。
  • クラスターに対して誰もクエリを実行していない。

なるほど、どうして…
というところで監査ログも確認したところ、同時間帯にrdsadminユーザーによって内部処理が実行されていました。

つまり何かしらのクエリごとに、このWarningログが出力されていそうです。

MY-013360のWarningログはなんなのか?


そもそも発生している以下のログは何なのか?

[Warning] [MY-013360] [Server] Plugin mysql_native_password reported: 
''mysql_native_password' is deprecated and will be removed in a future release. 
Please use caching_sha2_password instead' (sql_authentication.cc:4314)

調べたところMySQLの認証方式に関するログで、mysql_native_passwordは非推奨で将来的に廃止するから、caching_sha2_passwordに変えてね」というものでした。

mysql_native_passwordは、MySQL 5.7までデフォルトで利用されていた認証方式で、SHA-1を用いてユーザーパスワードをハッシュ化しています。
この方式がMySQL 8.0.34以上で非推奨となり、mysql_native_passwordで認証があった場合にWarningログが出力される運びとなったようです。

The mysql_native_password authentication plugin now is deprecated and subject to removal in a future version of MySQL. CREATE USERALTER USER, and SET PASSWORD operations now insert a deprecation warning into the server error log if an account attempts to authenticate using mysql_native_password as an authentication method. 

Changes in MySQL 8.0.34 (2023-07-18, General Availability) ※2024/12/04時点

ここでは詳しく触れませんが、caching_sha2_passwordMySQL 8.0で追加された認証機能で、SHA-256を用いたものになります。
MySQL 8.4では、mysql_native_passwordに変わりcaching_sha2_passwordがデフォルトの認証として利用されています。

そして、このWarningログが大量に出力されるのはバグでした。
MySQL 8.0.38で1度のみ出力するように修正されているようです。

The deprecation warning issued when authenticating with the mysql_native_password plugin is now issued only once. (Bug #35792948)

Changes in MySQL 8.0.38 (2024-07-01, General Availability) ※2024/12/04時点

困ること


このWarningログが出力されつづけることによってなにが一番困るかというと、CloudWatch Logsのデータ取り込みよるコストの増加です。

CloudWatch Logsはログの取り込みで、$0.76/1GBの料金が発生します。
Warningログは1行で大したデータ量ではありませんが、塵も積もれば山となり、対処を怠るとコストが増加します。

対応方法


では、どのような対応すればいいか?
現状、以下の3つ方法があると考えています。

  1. Warningログが発生しないバージョンを利用する
  2. バグ修正済みのバージョンへアップデートする
  3. Warningログの出力を抑制する

1. Warningログが発生しないバージョンを利用する


身も蓋もないですが、そもそもWarningログが出力される変更が入っていないバージョンを利用するという方法です。

このWarningログは、MySQL 8.0.34以上で出力されるものなので、Aurora MySQL 3.05.2(compatible with MySQL 8.0.32)以下のバージョンを利用していれば発生しません。

2. バグ修正済みのバージョンへアップデートする


次はバグが修正されたバージョンへアップデートする方法です。

先ほど記載しましたが、このバグはMySQL 8.0.38で修正が行われています。
2024/12/04の時点で、この修正を含むAurora MySQL 3.08.0(compatible with MySQL 8.0.39)がリリースされており、このバージョンへのアップデートを行うことで、Warningログが1度しか出力されなくなります。

本日より、Amazon Aurora MySQL 互換エディション 3 (MySQL 8.0 互換) は MySQL 8.0.39 をサポートするようになりました。MySQL 8.0.39 には、いくつかのセキュリティ強化とバグ修正に加えて、多数のテーブルを処理するときのデータベースの可用性を向上させ、REDO ロギングとインデックス処理に関連する InnoDB の問題を軽減する拡張機能が含まれています。

Amazon Aurora MySQL 3.08 (MySQL 8.0.39 互換) の一般提供を開始 ※2024/12/04時点

実際にAurora MySQL 3.08.0(compatible with MySQL 8.0.39)にバージョンアップして確認したところ、大量にWarningログが出力されることはありませんでした。

3. Warningログの出力を抑制する


最後はカスタムパラメーターグループの設定を用いて、Warningログの出力を抑制する方法です。

対象のAuroraクラスターで利用しているカスタムパラメーターグループで、下図のようにlog_error_suppression_listの値にMY-013360を設定し保存することで、出力を抑制することが出来ます。
※1. この設定項目はDynamicのため、クラスターの再起動は不要です。
※2. デフォルトパラメーターグループでは、設定変更が出来ません。

まとめ


今回は、mysql_native_passwordに関するWarningログの対応方法について記載しました。

Auroraでもmysql_native_passwordからcaching_sha2_passwordに移行したいところですが、現状Auroraではcaching_sha2_passwordに対応していません。

コミュニティ MySQL 8.0 では、デフォルトの認証プラグインは caching_sha2_password です。Aurora MySQL バージョン3では、mysql_native_password プラグインがまだ使用されます。default_authentication_plugin 設定は変更できません。

Aurora MySQL バージョン 3 と MySQL 8.0 コミュニティエディションの比較 ※2024/12/04時点

のちのちcaching_sha2_passwordに対応すると思うので、その際は移行方法についての記事を書ければ良いなと思います。

この情報が誰か助けになれば幸いです。

参考にしたもの


By okubo

主にAWS上でのインフラ構築を担当してます。 ・AWS Certified Solutions Architect - Professional ・AWS Certified DevOps Engineer - Professional ・AWS Certified Database - Specialty ・AWS Certified Security - Specialty