Amazon Aurora MySQL でのセキュリティ - Amazon Aurora

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 USERRENAME USERGRANTREVOKESET 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 クラスターでは、adminrdsadmin、および rds_superuser_role ユーザーが作成されます。

重要

アプリケーションではマスターユーザーを直接使用しないことを強くお勧めします。代わりに、アプリケーションに必要な最小の特権で作成されたデータベースユーザーを使用するというベストプラクティスに従ってください。

Aurora MySQL DB クラスターの管理では、スタンダード的なコマンド killkill_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 クラスターのパラメータの変更には、ApplyMethodpending-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 バージョン

DHE-RSA-AES128-SHA

TLS 1.0 Aurora MySQL バージョン 3 の 3.04.0 未満のすべて

DHE-RSA-AES128-SHA256

TLS 1.2 Aurora MySQL バージョン 3 の 3.04.0 未満のすべて

DHE-RSA-AES128-GCM-SHA256

TLS 1.2 Aurora MySQL バージョン 3 の 3.04.0 未満のすべて

DHE-RSA-AES256-SHA

TLS 1.0 Aurora MySQL バージョン 3 の 3.04.0 未満のすべて

DHE-RSA-AES256-SHA256

TLS 1.2 Aurora MySQL バージョン 3 の 3.04.0 未満のすべて

DHE-RSA-AES256-GCM-SHA384

TLS 1.2 Aurora MySQL バージョン 3 の 3.04.0 未満のすべて

ECDHE-RSA-AES128-SHA

TLS 1.0 3.01.0 以降、2.11.0 以降

ECDHE-RSA-AES128-SHA256

TLS 1.2 3.01.0 以降、2.11.0 以降

ECDHE-RSA-AES128-GCM-SHA256

TLS 1.2 3.01.0 以降、2.11.0 以降

ECDHE-RSA-AES256-SHA

TLS 1.0 3.01.0 以降、2.11.0 以降

ECDHE-RSA-AES256-SHA384

TLS 1.2 Aurora MySQL バージョン 3 の 3.04.0 未満のすべて、2.11.0 以降

ECDHE-RSA-AES256-GCM-SHA384

TLS 1.2 3.01.0 以降、2.11.0 以降

ECDHE-ECDSA-AES128-GCM-SHA256

TLS 1.2 3.01.0 以降、2.11.0 以降

ECDHE-ECDSA-AES256-GCM-SHA384

TLS 1.2 3.01.0 以降、2.11.0 以降

ECDHE-ECDSA-CHACHA20-POLY1305

TLS 1.2 3.04.0 以降、2.11.0 以降

TLS_AES_128_GCM_SHA256

TLS 1.3 3.04.0 以上

TLS_AES_256_GCM_SHA384

TLS 1.3 3.04.0 以上

TLS_CHACHA20_POLY1305_SHA256

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 クラスターのパラメータを変更する場合には、ApplyMethodpending-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」を参照してください。暗号スイートの形式の詳細については、OpenSSL ウェブサイトの「openssl 暗号リスト形式」と「openssl 暗号文字列形式」のドキュメントを参照してください。

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 ドキュメントを参照してください。