

# MySQL DB インスタンス接続の保護
<a name="securing-mysql-connections"></a>

MySQL DB インスタンスを不正アクセスや潜在的な脅威から保護するための堅牢なセキュリティ対策を実装できます。セキュリティグループ、SSL/TLS 暗号化、IAM データベース認証は連携して、MySQL DB インスタンスの接続セキュリティの複数のレイヤーを作成します。これらのセキュリティコントロールは、コンプライアンス要件を満たし、データ侵害を防ぎ、アプリケーションとデータベース間の安全な通信チャネルを維持するのに役立ちます。転送中のデータを暗号化し、特定の IP 範囲へのアクセスを制限し、データベースパスワードではなく IAM ロールを使用してユーザー認証を管理することで、MySQL DB インスタンスを保護できます。

MySQL DB インスタンスのセキュリティは以下の 3 つのレベルで管理されます。
+ AWS Identity and Access Management では、どのユーザーが DB インスタンスに対して Amazon RDS の管理アクションを実行できるかを制御します。IAM 認証情報を使用して AWS に接続している場合、IAM アカウントには、Amazon RDS の管理オペレーションを実行するためのアクセス許可を付与する IAM ポリシーが必要です。(詳しくは、「[Amazon RDS での Identity and Access Management](UsingWithRDS.IAM.md)」を参照してください。) 
+ DB インスタンスを作成するときは、VPC セキュリティグループを使用して、どのデバイスまたは Amazon EC2 インスタンスが DB インスタンスのエンドポイントとポートへの接続を開くことができるかを制御します。これらのエンドポイントおよびポートの接続は、Secure Socket Layer (SSL) と Transport Layer Security (TLS) を使用して行います。さらに、会社のファイアウォールルールでも、社内のどのデバイスが DB インスタンスへの接続を開くことができるかを制御できます。
+ MySQL DB インスタンスに対するログインとアクセス許可を認証するには、次の方法のいずれか、または組み合わせて行います。
  + MySQL のスタンドアロンインスタンスと同じ方法を使用することもできます。`CREATE USER`、`RENAME USER`、`GRANT`、`REVOKE`、`SET PASSWORD` などのコマンドは、オンプレミスデータベースでの方法と同様に、データベーススキーマテーブルを直接変更します。ただし、データベーススキーマテーブルを直接変更することはベストプラクティスではなく、RDS for MySQL バージョン 8.0.36 以降ではサポートされていません。詳細については、MySQL ドキュメントの「[Access Control and Account Management](https://dev.mysql.com/doc/refman/8.0/en/access-control.html)」を参照してください。
  + IAM データベース認証を使用することもできます。IAM データベース認証を使用する場合は、IAM ユーザーまたは IAM ロールおよび認証トークンを使用して、DB インスタンスを認証します。*認証トークン* は、署名バージョン 4 の署名プロセスを使用して生成されている一意の値です。IAM データベース認証では、同一の認証情報を使用して AWS リソースおよびデータベースへのアクセスを制御できます。(詳しくは、「[MariaDB、MySQL、および PostgreSQL の IAM データベース認証](UsingWithRDS.IAMDBAuth.md)」を参照してください。) 
  + もう 1 つのオプションは、RDS for MySQL の Kerberos 認証です。DB インスタンスは AWS Directory Service for Microsoft Active Directory (AWS Managed Microsoft AD) を使用して Kerberos 認証を有効にします。信頼するドメインに参加している MySQL DB インスタンスに対してユーザーが認証を行う場合、認証リクエストが転送されます。転送されたリクエストは、Directory Service で作成したドメインディレクトリに移動します。(詳しくは、「[Amazon RDS for MySQL での Kerberos 認証の使用](mysql-kerberos.md)」を参照してください。)

 Amazon RDS DB インスタンスを作成すると、マスターユーザーには以下のデフォルト権限が付与されます。


| エンジンバージョン | システム権限 | データベースロール | 
| --- | --- | --- | 
|  RDS for MySQL バージョン 8.4.3 以上  |  `GRANT SELECT`, `INSERT`, `UPDATE`, `DELETE`, `CREATE`, `DROP`, `RELOAD`, `PROCESS`, `REFERENCES`,`INDEX`, `ALTER`, `SHOW DATABASES`, `CREATE TEMPORARY TABLES`, `LOCK TABLES`, `EXECUTE`, `REPLICATION SLAVE`, `REPLICATION CLIENT`, `CREATE VIEW`, `SHOW VIEW`, `CREATE ROUTINE`, `ALTER ROUTINE`, `CREATE USER`, `EVENT`, `TRIGGER`, `CREATE ROLE`, `DROP ROLE`, `APPLICATION_PASSWORD_ADMIN`, `FLUSH_OPTIMIZER_COSTS`, `FLUSH_PRIVILEGES`, `FLUSH_STATUS`, `FLUSH_TABLES`, `FLUSH_USER_RESOURCES`, `ROLE_ADMIN`, `SENSITIVE_VARIABLES_OBSERVER`, `SESSION_VARIABLES_ADMIN`, `SET_ANY_DEFINER`, `SHOW_ROUTINE`, `XA_RECOVER_ADMIN`  |  `rds_superuser_role` `rds_superuser_role` の詳細については、「[RDS for MySQL のロールベースの権限モデル](Appendix.MySQL.CommonDBATasks.privilege-model.md)」を参照してください。  | 
|  RDS for MySQL バージョン 8.0.36 以上  |  `SELECT`, `INSERT`, `UPDATE`, `DELETE`, `CREATE`, `DROP`, `RELOAD`, `PROCESS`, `REFERENCES`, `INDEX`, `ALTER`, `SHOW DATABASES`, `CREATE TEMPORARY TABLES`, `LOCK TABLES`, `EXECUTE`, `REPLICATION SLAVE`, `REPLICATION CLIENT`, `CREATE VIEW`, `SHOW VIEW`, `CREATE ROUTINE`, `ALTER ROUTINE`, `CREATE USER`, `EVENT`, `TRIGGER`, `CREATE ROLE`, `DROP ROLE`, `APPLICATION_PASSWORD_ADMIN`, `ROLE_ADMIN`, `SET_USER_ID`, `XA_RECOVER_ADMIN`  |  `rds_superuser_role` `rds_superuser_role` の詳細については、「[RDS for MySQL のロールベースの権限モデル](Appendix.MySQL.CommonDBATasks.privilege-model.md)」を参照してください。  | 
|  RDS for MySQL バージョン 8.0.36 未満  |  `SELECT`, `INSERT`, `UPDATE`, `DELETE`, `CREATE`, `DROP`, `RELOAD`, `PROCESS`, `REFERENCES`, `INDEX`, `ALTER`, `SHOW DATABASES`, `CREATE TEMPORARY TABLES`, `LOCK TABLES`, `EXECUTE`, `REPLICATION CLIENT`, `CREATE VIEW`, `SHOW VIEW`, `CREATE ROUTINE`, `ALTER ROUTINE`, `CREATE USER`, `EVENT`, `TRIGGER`, `REPLICATION SLAVE`  |  なし  | 

**注記**  
DB インスタンスのマスターユーザーを削除できますが、お勧めしません。マスターユーザーを再作成するには、[ModifyDBInstance](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBInstance.html) RDS API オペレーションを使用するか、または [modify-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-instance.html) AWS CLI コマンドを実行して、新しいマスターユーザーのパスワードを該当するパラメータで指定します。インスタンスに既存のマスターユーザーがない場合、指定したパスワードを使用してマスターユーザーが作成されます。

各 DB インスタンスに管理サービスを提供するために、DB インスタンスの作成時に `rdsadmin` ユーザーが作成されます。`rdsadmin` アカウントの権限をドロップ、名前変更、パスワード変更、または変更しようとするとエラーになります。

DB インスタンスの管理を可能にするために、スタンダード的なコマンド `kill` と `kill_query` の使用は制限されています。代わりに、Amazon RDS のコマンド `rds_kill` と `rds_kill_query` が用意されており、DB インスタンスでのエンドユーザーセッションやクエリを終了させるために使用できます。