Amazon Aurora MySQL でのセキュリティ
Amazon Aurora MySQL のセキュリティは次の 3 つのレベルで管理されます。
-
Aurora MySQL DB クラスターと DB インスタンスに対する Amazon RDS 管理アクションを実行できるユーザーを管理するには、AWS Identity and Access Management (IAM) を使用します。IAM 認証情報を使用して AWS に接続している場合、AWS アカウントには、Amazon RDS の管理オペレーションを実行するためのアクセス許可を付与する IAM ポリシーが必要です。詳細については、「Amazon Aurora での Identity and Access Management」を参照してください。
IAM を使用して Amazon RDS コンソールにアクセスする場合は、まず、IAM ユーザーの認証情報を使用して AWS Management Console にサインインしてください。次に、Amazon RDS コンソール (https://console.aws.amazon.com/rds/
) に移動します。 -
Amazon VPC サービスに基づいて仮想パブリッククラウド (VPC) に Aurora MySQL DB クラスターを作成します。VPC 内の Aurora MySQL DB クラスター用の DB インスタンスのエンドポイントとポートに対して接続を開くことができるデバイスと Amazon EC2 インスタンスを制御するには、VPC セキュリティグループを使用します。これらのエンドポイントおよびポート接続には、Transport Layer Security (TLS) を使用できます。さらに、会社のファイアウォールルールでも、社内のいずれのデバイスが DB インスタンスへの接続を開くことができるかを制御できます。VPC の詳細については、「Amazon VPC と Amazon Aurora」を参照してください。
サポートされている VPC テナンシーは、Aurora MySQL DB クラスターで使用している DB インスタンスクラスによって異なります。
default
VPC テナントでは、VPC は共有ハードウェアで実行されます。dedicated
VPC テナンシーでは、VPC は専有のハードウェアインスタンスで実行されます。バースト可能パフォーマンス DB インスタンスクラスは、デフォルト VPC テナンシーのみをサポートしています。バースト可能パフォーマンス DB インスタンスクラスには、db.t2、db.t3、および db.t4g DB インスタンスクラスが含まれます。その他すべての Aurora MySQL DB インスタンスクラスでは、デフォルトおよび専用 VPC テナンシーの両方がサポートされています。注記
T DB インスタンスクラスは、開発サーバーおよびテストサーバー、またはその他の本稼働以外のサーバーにのみ使用することをお勧めします。T インスタンスクラスの詳細については、「開発やテストのための T インスタンスクラスの使用」を参照してください。
インスタンスクラスの詳細については、「Amazon Aurora DB インスタンスクラス」を参照してください。
default
およびdedicated
VPC テナントの詳細については、Amazon Elastic Compute Cloud ユーザーガイドの「ハードウェア専有インスタンス」を参照してください。 -
Amazon Aurora MySQL DB クラスターへのログインとアクセス権限を認証するには、以下の方法のいずれかを使用するか、複数を組み合わせて使用します。
-
MySQL のスタンドアロンインスタンスの場合と同じ方法を使用できます。
CREATE USER
、RENAME USER
、GRANT
、REVOKE
、SET PASSWORD
などのコマンドは、オンプレミスデータベースでの方法と同様に、データベーススキーマテーブルを直接変更します。詳細については、MySQL ドキュメントの「アクセス制御およびアカウントマネジメント」を参照してください。 -
IAM データベース認証を使用することもできます。
IAM データベース認証を使用する場合は、IAM ユーザーと IAM ロールのいずれかと認証トークンを使用して、DB クラスターを認証します。認証トークン は、署名バージョン 4 の署名プロセスを使用して生成されている一意の値です。IAM データベース認証では、同一の認証情報を使用して AWS リソースおよびデータベースへのアクセスを制御できます。詳細については、「 の IAM データベース認証」を参照してください。
-
注記
詳細については、「Amazon Aurora でのセキュリティ」を参照してください。
以下のセクションでは、Aurora MySQL DB クラスターとの Aurora MySQL および TLS 接続のユーザーアクセス許可に関する情報を参照してください。
Amazon Aurora MySQL でのマスターユーザー特権
Amazon Aurora MySQL DB インスタンスを作成すると、マスターユーザーには マスターユーザーアカウント権限 にリストされているデフォルト権限が付与されます。
各 DB クラスターに管理サービスを提供するために、DB クラスターの作成時に admin
および rdsadmin
ユーザーが作成されます。rdsadmin
アカウントの削除、名前の変更、パスワードの変更、または権限の変更を行おうとすると、エラーになります。
Aurora MySQL バージョン 2 の DB クラスターでは、DB クラスターの作成時に admin
および rdsadmin
ユーザーが作成されます。Aurora MySQL バージョン 3 の DB クラスターでは、admin
、rdsadmin
、および rds_superuser_role
ユーザーが作成されます。
重要
アプリケーションではマスターユーザーを直接使用しないことを強くお勧めします。代わりに、アプリケーションに必要な最小の特権で作成されたデータベースユーザーを使用するというベストプラクティスに従ってください。
Aurora MySQL DB クラスターの管理では、スタンダード的なコマンド kill
と kill_query
の使用は制限されています。Aurora MySQL DB インスタンスのユーザーセッションまたはクエリを終了するには、Amazon RDS の rds_kill
コマンドと rds_kill_query
コマンドを代わりに使用します。
注記
データベースインスタンスおよびスナップショットの暗号化は、中国 (寧夏) リージョンではサポートされていません。
Aurora MySQL DB クラスターへの接続
Amazon Aurora MySQL DB クラスターは、RDS for MySQL DB インスタンスと同じプロセスと公開鍵を使用したアプリケーションからの Transport Layer Security (TLS) 接続をサポートします。
Amazon RDS は、Amazon RDS がインスタンスをプロビジョニングするときに、TLS 証明書を作成し、その証明書を DB インスタンスにインストールします。これらの証明書は認証局によって署名されます。TLS 証明書には、なりすまし攻撃から保護するために、TLS 証明書の共通名 (CN) として DB インスタンスのエンドポイントが含まれています。その結果、クライアントがサブジェクト代替名 (SAN) をサポートしている場合は、DB クラスターエンドポイントのみを使用して、TLS を使用する DB クラスターに接続できます。それ以外の場合は、書き込みインスタンスのインスタンスを使用する必要があります。
証明書のダウンロードについては、SSL/TLS を使用した DB クラスターへの接続の暗号化 を参照してください。
TLS での SAN をサポートするクライアントとして、AWS JDBC ドライバーを推奨します。AWS JDBC ドライバーおよびその使用方法の詳細については、「Amazon Web Services (AWS) JDBC ドライバー GitHub リポジトリ
トピック
Aurora MySQL DB クラスターへの TLS 接続の要求
require_secure_transport
DB クラスターパラメータを使用することによって、Aurora MySQL DB クラスターへのすべてのユーザー接続が TLS を使用するように要求できます。デフォルトでは、require_secure_transport
パラメータが OFF
に設定されています。require_secure_transport
パラメータを ON
に設定して、DB クラスターへの接続で TLS を必須にすることができます。
require_secure_transport
パラメータの値は、DB クラスターの DB クラスターパラメータグループを更新することで設定できます。変更を有効にするために、DB クラスターを再起動する必要はありません。パラメータグループの詳細については、「Amazon Aurora のパラメータグループ」を参照してください。
注記
require_secure_transport
パラメータは、Aurora MySQL バージョン 2 および 3 で使用できます。このパラメータは、カスタム DB クラスターのパラメータグループで設定できます。このパラメータは、DB インスタンスパラメータグループでは使用できません。
DB クラスターに対して require_secure_transport
パラメータが ON
に設定されている場合、データベースクライアントが暗号化された接続を確立できれば、データベースクライアントはそのクラスターに接続できます。それ以外の場合は、次のようなエラーメッセージがクライアントに返されます。
MySQL Error 3159 (HY000): Connections using insecure transport are prohibited while --require_secure_transport=ON.
Aurora MySQL の TLS バージョン
Aurora MySQL は Transport Layer Security (TLS) バージョン 1.0、1.1、1.2、および 1.3 をサポートしています。Aurora MySQL バージョン 3.04.0 以降では、TLS 1.3 プロトコルを使用して接続を保護できます。次の表は、Aurora MySQL バージョンの TLS サポートを示しています。
Aurora MySQL バージョン | TLS 1.0 | TLS 1.1 | TLS 1.2 | TLS 1.3 | デフォルト |
---|---|---|---|---|---|
Aurora MySQL バージョン 2 |
サポート | サポート対象 |
サポート |
サポートされていません | サポートされているすべての TLS バージョン |
Aurora MySQL バージョン 3 (3.04.0 より前のバージョン) |
サポート | サポート対象 | サポート | サポートされていません | サポートされているすべての TLS バージョン |
Aurora MySQL バージョン 3 (3.04.0 以降) |
サポートされません | サポート外 | サポート対象 | サポート | サポートされているすべての TLS バージョン |
重要
バージョン 2 と 3.04.0 より前のバージョンの Aurora MySQL クラスターでカスタムパラメータグループを使用している場合、TLS 1.0 と 1.1 は安全性が低いため、TLS 1.2 を使用することをお勧めします。MySQL 8.0.26 と Aurora MySQL 3.03 のコミュニティエディションとそのマイナーバージョンでは、TLS バージョン 1.1 と 1.0 のサポートが廃止されました。
MySQL 8.0.28 のコミュニティエディションと互換性のある Aurora MySQL バージョン 3.04.0 以降は、TLS 1.1 と TLS 1.0 をサポートしていません。Aurora MySQL バージョン 3.04.0 以降を使用している場合は、カスタムパラメータグループで TLS プロトコルを 1.0 と 1.1 に設定しないでください。
Aurora MySQL バージョン 3.04.0 以降では、デフォルト設定は TLS 1.3 と TLS 1.2 です。
tls_version
DB クラスターパラメータを使用して、許可されたプロトコルバージョンを指定できます。ほとんどのクライアントツールまたはデータベースドライバには、同様のクライアントパラメータがあります。古いクライアントの中には、新しい TLS バージョンをサポートしていないものもあります。デフォルトでは、DB クラスターは、サーバーとクライアントの設定の両方で許可されている最高の TLS プロトコルバージョンを使用しようとします。
tls_version
DB クラスターパラメータを次のいずれかの値に設定します。
-
TLSv1.3
-
TLSv1.2
-
TLSv1.1
-
TLSv1
tls_version
パラメータは、カンマで区切られたリストの文字列として設定することもできます。TLS 1.2 プロトコルと TLS 1.0 プロトコルの両方を使用する場合は、tls_version
パラメータに最下位プロトコルから最上位プロトコルまでのすべてのプロトコルを含める必要があります。この場合、tls_version
は次のように設定されます。
tls_version=TLSv1,TLSv1.1,TLSv1.2
DB クラスターのパラメータグループの変更については、「Amazon Aurora の DB クラスターパラメータグループのパラメータの変更」を参照してください。AWS CLI を使用する場合、tls_version
DB クラスターのパラメータの変更には、ApplyMethod
に pending-reboot
を設定している必要があります。アプリケーションのメソッドが pending-reboot
の場合は、パラメータグループに関連付けられている DB クラスターを停止および再起動した後に、パラメータの変更が適用されます。
Aurora PostgreSQL DB クラスターへの接続用暗号スイートを設定する
設定可能な暗号スイートを使用すると、データベース接続のセキュリティをより詳細に制御できます。データベースへのクライアント TLS 接続を保護するために許可する暗号スイートのリストを指定できます。設定可能な暗号スイートを使用すると、データベースサーバーが受け入れる接続暗号化を制御できます。これにより、安全でない暗号や非推奨の暗号の使用を防ぐことができます。
設定可能な暗号スイートは、Aurora MySQL バージョン 3 および Aurora MySQL バージョン 2 でサポートされています。接続を暗号化するために許容できる TLS 1.2、TLS 1.1、TLS 1.0 暗号のリストを指定するには、ssl_cipher
クラスターパラメータを変更します。AWS Management Console、AWS CLI、または RDS API を使用して、クラスターパラメータグループ内の ssl_cipher
パラメータを設定します。
ssl_cipher
パラメータを、TLS バージョンのカンマ区切りの暗号値の文字列に設定します。クライアントアプリケーションでは、データベースに接続するときに --ssl-cipher
オプションを使用することによって、暗号化接続に使用する暗号を指定できます。データベースへの接続の詳細については、「Amazon Aurora MySQL DB クラスターへの接続」を参照してください。
Aurora MySQL バージョン 3.04.0 以降では、TLS 1.3 暗号スイートを指定できるようになりました。許容される TLS 1.3 暗号スイートを指定するには、パラメータグループの tls_ciphersuites
パラメータを変更します。TLS 1.3 では、命名規則が変更され、鍵交換メカニズムと証明書が使用されなくなったため、使用可能な暗号スイートの数が減少しました。tls_ciphersuites
パラメータを、カンマ区切りの TLS 1.3 の暗号値の文字列に設定します。
次の表に、サポートされている暗号と、各暗号の TLS 暗号化プロトコルおよび有効な Aurora MySQL エンジンのバージョンを示します。
暗号 | 暗号化プロトコル | サポートされている Aurora MySQL バージョン |
---|---|---|
|
TLS 1.0 | Aurora MySQL バージョン 3 の 3.04.0 未満のすべて |
|
TLS 1.2 | Aurora MySQL バージョン 3 の 3.04.0 未満のすべて |
|
TLS 1.2 | Aurora MySQL バージョン 3 の 3.04.0 未満のすべて |
|
TLS 1.0 | Aurora MySQL バージョン 3 の 3.04.0 未満のすべて |
|
TLS 1.2 | Aurora MySQL バージョン 3 の 3.04.0 未満のすべて |
|
TLS 1.2 | Aurora MySQL バージョン 3 の 3.04.0 未満のすべて |
|
TLS 1.0 | 3.01.0 以降、2.11.0 以降 |
|
TLS 1.2 | 3.01.0 以降、2.11.0 以降 |
|
TLS 1.2 | 3.01.0 以降、2.11.0 以降 |
|
TLS 1.0 | 3.01.0 以降、2.11.0 以降 |
|
TLS 1.2 | Aurora MySQL バージョン 3 の 3.04.0 未満のすべて、2.11.0 以降 |
|
TLS 1.2 | 3.01.0 以降、2.11.0 以降 |
|
TLS 1.2 | 3.01.0 以降、2.11.0 以降 |
|
TLS 1.2 | 3.01.0 以降、2.11.0 以降 |
|
TLS 1.2 | 3.04.0 以降、2.11.0 以降 |
|
TLS 1.3 | 3.04.0 以上 |
|
TLS 1.3 | 3.04.0 以上 |
|
TLS 1.3 | 3.04.0 以上 |
重要
DHE-RSA
暗号は、Aurora MySQL 2 では 2.11.0 以降のバージョン、Aurora MySQL 3 では 3.04.0 以降のバージョンの Aurora MySQL ではサポートされていません。
DB クラスターのパラメータグループの変更については、「Amazon Aurora の DB クラスターパラメータグループのパラメータの変更」を参照してください。CLI を使用して ssl_cipher
DB クラスターのパラメータを変更する場合には、ApplyMethod
を pending-reboot
に設定してください。アプリケーションのメソッドが pending-reboot
の場合は、パラメータグループに関連付けられている DB クラスターを停止および再起動した後に、パラメータの変更が適用されます。
また、CLI コマンドの describe-engine-default-cluster-parameters を使用して、特定のパラメータグループファミリーで現在サポートされている暗号スイートを特定することもできます。次の例は、Aurora MySQL バージョン 2 の ssl_cipher
クラスターパラメータで許可される値を取得する方法を示しています。
aws rds describe-engine-default-cluster-parameters --db-parameter-group-family aurora-mysql5.7 ...some output truncated... { "ParameterName": "ssl_cipher", "ParameterValue": "DHE-RSA-AES128-SHA,DHE-RSA-AES128-SHA256,DHE-RSA-AES128-GCM-SHA256,DHE-RSA-AES256-SHA,DHE-RSA-AES256-SHA256,DHE-RSA-AES256-GCM-SHA384,ECDHE-RSA-AES128-SHA,ECDHE-RSA-AES128-SHA256,ECDHE-RSA-AES128-GCM-SHA256,ECDHE-RSA-AES256-SHA,ECDHE-RSA-AES256-SHA384,ECDHE-RSA-AES256-GCM-SHA384", "Description": "The list of permissible ciphers for connection encryption.", "Source": "system", "ApplyType": "static", "DataType": "list", "AllowedValues": "DHE-RSA-AES128-SHA,DHE-RSA-AES128-SHA256,DHE-RSA-AES128-GCM-SHA256,DHE-RSA-AES256-SHA,DHE-RSA-AES256-SHA256,DHE-RSA-AES256-GCM-SHA384,ECDHE-RSA-AES128-SHA,ECDHE-RSA-AES128-SHA256,ECDHE-RSA-AES128-GCM-SHA256,ECDHE-RSA-AES256-SHA,ECDHE-RSA-AES256-SHA384,ECDHE-RSA-AES256-GCM-SHA384", "IsModifiable": true, "SupportedEngineModes": [ "provisioned" ] }, ...some output truncated...
暗号の詳細については、MySQL ドキュメントの「ssl_cipher
Aurora MySQL DB クラスターへの接続の暗号化
デフォルトの mysql
クライアントを使用して接続を暗号化するには、以下の例のように、--ssl-ca
パラメータを使用して mysql クライアントを起動します。
MySQL 5.7 および 8.0 向け:
mysql -h myinstance.123456789012.rds-us-east-1.amazonaws.com --ssl-ca=
full_path_to_CA_certificate
--ssl-mode=VERIFY_IDENTITY
MySQL 5.6 向け:
mysql -h myinstance.123456789012.rds-us-east-1.amazonaws.com --ssl-ca=
full_path_to_CA_certificate
--ssl-verify-server-cert
full_path_to_CA_certificate
を、認証局 (CA) の証明書に対する完全なパスに置き換えます。証明書のダウンロードについては、「SSL/TLS を使用した DB クラスターへの接続の暗号化」を参照してください。
特定のユーザーアカウントに対して TLS 接続を要求できます。例えば、MySQL バージョンに応じて以下のいずれかのステートメントを使用し、ユーザーアカウント encrypted_user
に対して TLS 接続を要求できます。
MySQL 5.7 および 8.0 向け:
ALTER USER 'encrypted_user'@'%' REQUIRE SSL;
MySQL 5.6 向け:
GRANT USAGE ON *.* TO 'encrypted_user'@'%' REQUIRE SSL;
RDS プロキシを使用する場合は、通常のクラスターエンドポイントではなく、プロキシエンドポイントに接続します。Aurora DB クラスターへの直接接続の場合と同様に、プロキシへの SSL/TLS 接続を必須またはオプションにすることができます。RDS プロキシの使用の詳細については、「Amazon RDS Proxy for Aurora の使用」を参照してください。
注記
MySQL での TLS 接続の詳細については、MySQL ドキュメント