

# Aurora MySQL バージョン 3 からバージョン 8.4 にアップグレードする際のセキュリティ上の考慮事項
<a name="AuroraMySQL.Upgrade-v3-v84-security"></a>

Aurora MySQL バージョン 3 (MySQL 8.0 互換) から Aurora MySQL バージョン 8.4 に移行する場合、いくつかの重要なセキュリティ関連の変更には、慎重な計画と考慮が必要です。このガイドでは、主要なセキュリティ変更の概要と、スムーズな移行のための推奨事項を示します。

**Topics**
+ [認証ポリシー (8.4 の新機能)](#AuroraMySQL.Upgrade-v3-v84-security.auth-policy)
+ [マスターユーザーの動作](#AuroraMySQL.Upgrade-v3-v84-security.master-user)
+ [暗号化と TLS の変更](#AuroraMySQL.Upgrade-v3-v84-security.tls)
+ [パスワード検証コンポーネントの移行](#AuroraMySQL.Upgrade-v3-v84-security.validate-password)
+ [新しい動的権限](#AuroraMySQL.Upgrade-v3-v84-security.new-privileges)
+ [`rdsproxyadmin` に対する保護ユーザーの適用](#AuroraMySQL.Upgrade-v3-v84-security.rdsproxyadmin)

## 認証ポリシー (8.4 の新機能)
<a name="AuroraMySQL.Upgrade-v3-v84-security.auth-policy"></a>

Aurora MySQL バージョン 3 (MySQL 8.0 互換) では、`default_authentication_plugin` パラメータを使用して、データベースユーザーの作成時に使用するデフォルトの認証プラグインを設定します。Aurora MySQL バージョン 8.4 では、このパラメータは `authentication_policy` パラメータに置き換えられ、デフォルトで `*:caching_sha2_password` に設定されています。

Aurora MySQL でサポートされている値:
+ `*:caching_sha2_password` (デフォルト値。単一要素認証プラグインを許可します。指定されていない場合は、`caching_sha2_password` を使用)
+ `*:mysql_native_password` (単一要素認証プラグインを許可します。指定されていない場合は、`mysql_native_password` を使用)

**注記**  
Aurora MySQL バージョン 8.4 では、多要素認証設定はサポートされていません。

アップグレードの事前チェック [deprecatedDefaultAuth](AuroraMySQL.upgrade-prechecks.descriptions.md#deprecatedDefaultAuth) は、ソースクラスターで `default_authentication_plugin` が `mysql_native_password` に設定されている場合に警告を発します。アップグレード時には、この警告を確認し、ターゲットクラスターパラメータグループで `authentication_policy` パラメータを設定します。

## マスターユーザーの動作
<a name="AuroraMySQL.Upgrade-v3-v84-security.master-user"></a>

### 新しいクラスター
<a name="AuroraMySQL.Upgrade-v3-v84-security.master-user.new-clusters"></a>

マスターユーザーは、クラスターの作成時に `authentication_policy` パラメータによって設定された認証プラグインを使用して作成されます。デフォルトのパラメータグループを使用する場合、マスターユーザーは `caching_sha2_password` 認証プラグインを使用して作成されます。`authentication_policy` パラメータを `*:mysql_native_password` に設定してカスタムパラメータグループを使用する場合、マスターユーザーは `mysql_native_password` 認証プラグインを使用して作成されます。

### マスターユーザーパスワードのリセット
<a name="AuroraMySQL.Upgrade-v3-v84-security.master-user.password-reset"></a>

AWS マネジメントコンソール、CLI (`modify-db-cluster --master-user-password`)、または API を使用してマスターユーザーのパスワードをリセットする場合、Aurora はリセット時に `authentication_policy` パラメータで定義された現在のデフォルトプラグインを使用します。

### Secrets Manager とパスワードのローテーション
<a name="AuroraMySQL.Upgrade-v3-v84-security.master-user.secrets-manager"></a>

AWS Secrets Manager を使用してマスターユーザーのパスワードを管理する場合、`authentication_policy` パラメータの値を更新すると、次のパスワードローテーションでマスターユーザーの認証プラグインが新しい `authentication_policy` パラメータ値と一致するように設定されます。

### アップグレード後に作成されたデータベースユーザー
<a name="AuroraMySQL.Upgrade-v3-v84-security.master-user.new-users"></a>

`mysql_native_password` 認証プラグインを使用する既存のデータベースユーザーは、アップグレード後も引き続き利用できます。`IDENTIFIED WITH` 句を指定せずにアップグレード後に作成するデータベースユーザーは、`authentication_policy` パラメータで定義された認証プラグインを使用します。パラメータがデフォルト値の `*:caching_sha2_password` の場合、`caching_sha2_password` 認証プラグインを使用して新しいユーザーが作成されます。

すべての新規ユーザーのデフォルトの認証プラグインを変更するには、`authentication_policy` の値を更新します。サポートされている値の詳細については、「[認証ポリシー (8.4 の新機能)](#AuroraMySQL.Upgrade-v3-v84-security.auth-policy)」を参照してください。

デフォルトとは異なる認証プラグインを使用してユーザーを作成するには、`CREATE USER` ステートメントで明示的に指定します。

```
CREATE USER '{{username}}'@'{{host}}' IDENTIFIED WITH {{authentication-plugin}} BY '{{password}}';
```

## 暗号化と TLS の変更
<a name="AuroraMySQL.Upgrade-v3-v84-security.tls"></a>

`require_secure_transport` DB クラスターパラメータを使用して、Aurora MySQL DB クラスターへのすべてのユーザー接続に TLS を必須にします。デフォルトでは、このパラメータは Aurora MySQL バージョン 8.4 で `ON` に設定されています。

Aurora MySQL バージョン 8.4 では、`ssl_ciphers` (TLS 1.2) および `tls_ciphersuites` (TLS 1.3) DB クラスターパラメータに関する最新のセキュリティ要件に準拠した、より厳格な暗号化標準が適用されます。詳細については、「[Amazon Aurora MySQL でのセキュリティ](AuroraMySQL.Security.md)」を参照してください。

接続の中断を防ぐため、移行前に MySQL クライアントとターゲット DB クラスターの TLS 設定を確認してください。

## パスワード検証コンポーネントの移行
<a name="AuroraMySQL.Upgrade-v3-v84-security.validate-password"></a>

Aurora MySQL バージョン 8.4 では、`validate_password` コンポーネントを有効または無効にする `aurora_enable_validate_password_component` クラスターパラメータが導入されているため、手動でインストールまたはアンインストールする必要はありません。以前に `validate_password` プラグインをインストールしていて、アップグレード後にコンポーネントを有効にした場合、コンポーネントのみが有効です。プラグインは無視されます。

Aurora MySQL バージョン 8.4 以降では、以前に `INSTALL PLUGIN` コマンドを使用して `validate_password` プラグインをインストールていた場合、`aurora_enable_validate_password_component` パラメータを有効にしてから、ライターインスタンスで `UNINSTALL PLUGIN` コマンドを使用してプラグインを削除することで、`validate_password` コンポーネントに移行できます。

以前に `INSTALL COMPONENT 'file://component_validate_password'` を使用して `validate_password` コンポーネントを手動でインストールした場合は、アップグレード時にターゲット DB クラスターのパラメータグループで `aurora_enable_validate_password_component` パラメータを設定してください。アップグレード後、コンポーネントは `mysql.component` テーブルに表示されなくなります。`aurora_enable_validate_password_component` グローバル変数を使用して、コンポーネントのステータスを確認できます。

アップグレード後の最初の DB エンジンの起動時に、以前にコンポーネントを手動でインストールしていた場合、MySQL エラーログに次のメッセージが表示されます。

```
Component 'file://component_validate_password' is being removed from mysql.component table.
validate_password component can be enabled/disabled through 'aurora_enable_validate_password_component' cluster parameter.
```

アップグレードの事前チェック [auroraValidatePasswordPluginCheck](AuroraMySQL.upgrade-prechecks.descriptions.md#auroraValidatePasswordPluginCheck) は、`validate_password` プラグインがソースクラスターにインストールされている場合に警告を発します。この警告はアップグレードを妨げるものではありませんが、アップグレード後にコンポーネントへの移行を計画する必要があることを示しています。

## 新しい動的権限
<a name="AuroraMySQL.Upgrade-v3-v84-security.new-privileges"></a>

Aurora MySQL バージョン 8.4 は、以下の新しい権限をサポートしています。
+ `ALLOW_NONEXISTENT_DEFINER`
+ `FLUSH_PRIVILEGES`
+ `OPTIMIZE_LOCAL_TABLE`
+ `SET_ANY_DEFINER`

これらの権限は、アップグレード時にマスターユーザーアカウントの [マスターユーザーアカウント権限](UsingWithRDS.MasterAccounts.md) に自動的に付与されます。

## `rdsproxyadmin` に対する保護ユーザーの適用
<a name="AuroraMySQL.Upgrade-v3-v84-security.rdsproxyadmin"></a>

Aurora MySQL バージョン 8.4.7 以降、`rdsproxyadmin` は保護されたユーザーです。エンジンは、どのホストにおいても、`rdsproxyadmin` に対する `CREATE`、`DROP`、`RENAME`、`GRANT`、`REVOKE`、および `SET PASSWORD` オペレーションを拒否します。拒否されるオペレーションの完全なリストとエラーの例については、「[Aurora MySQL の予約済みユーザー](AuroraMySQL.Security.md#AuroraMySQL.Security.ReservedUsers)」を参照してください。

Aurora MySQL バージョン 3 では `rdsproxyadmin` という名前は予約されていません。バージョン 3 で `rdsproxyadmin` という名前のデータベースユーザーを作成した場合 (プロキシターゲットの登録時にシステムに作成させるのではなく)、バージョン 8.4 にアップグレードする前にこのセクションを確認してください。

### アップグレード前の注意点
<a name="AuroraMySQL.Upgrade-v3-v84-security.rdsproxyadmin.before-upgrade"></a>

バージョン 3 クラスターで `rdsproxyadmin` ユーザーを作成した場合は、バージョン 8.4 にアップグレードする前にアカウントの名前を変更するか削除します。バージョン 3 の接続を使用して、次のいずれかのステートメントを実行できます。

```
-- Rename the existing account to a non-reserved name
RENAME USER 'rdsproxyadmin'@'{{host}}' TO '{{new_user}}'@'{{host}}';

-- Or drop the account if it is no longer needed
DROP USER 'rdsproxyadmin'@'{{host}}';
```

アップグレードを開始する前に、古いユーザー名を参照するアプリケーションや保存された認証情報を更新します。

### アップグレード前にユーザーの名前を変更または削除しない場合
<a name="AuroraMySQL.Upgrade-v3-v84-security.rdsproxyadmin.after-upgrade"></a>

作成した `rdsproxyadmin` ユーザーが既に存在するクラスターをアップグレードする場合、アップグレードは正常に完了します。アカウントは既存のパスワードと権限で保持され、元のパスワードを使用して `rdsproxyadmin` としてクラスターに接続できます。

ただし、アップグレード後にアカウントを変更することはできません。`rdsproxyadmin` の削除、名前の変更、権限の変更、またはパスワードの変更を試みると、ステートメントはエラーを返します。

アップグレード後にアカウントを削除する場合、または RDS Proxy が使用する `rdsproxyadmin` 名を再利用する場合は、[AWS サポート](https://aws.amazon.com/premiumsupport/)にお問い合わせください。AWSサポートは、バージョン 3 から引き継がれた既存の `rdsproxyadmin` ユーザーを削除できます。