SQL サーバーの透過的なデータの暗号化サポート
Amazon RDS は、透過的なデータ暗号化 (TDE) を使用して、Microsoft SQL Server を実行する DB インスタンスのデータの暗号化をサポートします。TDE は、ストレージへの書き込み前に自動的にデータを暗号化し、ストレージからのデータの読み取り時に自動的にデータを復号します。
Amazon RDS は、次の SQL Server のバージョンおよびエディションの TDE をサポートしています。
-
SQL Server 2019: Standard および Enterprise Edition
-
SQL Server 2017 Enterprise Edition
-
SQL Server 2016 Enterprise Edition
-
SQL Server 2014 Enterprise Edition
-
SQL Server 2012 Enterprise Edition
SQL Server の 透過的データ暗号化では、2 階層キーアーキテクチャを使用して暗号化キーの管理を行っています。証明書は、データベースマスターキーから生成され、データ暗号化キーの保護に使用されます。データベース暗号化キーにより、ユーザーデータベースのデータの実際の暗号化と復号が実行されます。データベースマスターキーと TDE 証明書は、Amazon RDS によりバックアップおよび管理されます。
RDS は、TDE 証明書のインポートまたはエクスポートをサポートしていません。
透過的データ暗号化 (TDE) は、機密データの暗号化が必要なシナリオで使用されます。例えば、データファイルとバックアップをサードパーティーに提供したり、セキュリティ関連の規制遵守の問題に対処したりすることができます。model
データベースや master
データベースなど、SQL Server のシステムデータベースを暗号化することはできません。
TDE 対応のデータベースのネイティブバックアップを作成できますが、これらのバックアップをオンプレミスのデータベースに復元することはできません。TDE 対応のオンプレミスデータベースのネイティブバックアップを復元することはできません。
透過的データ暗号化の詳細はこのガイドの範囲外ですが、暗号化アルゴリズムとキーのそれぞれのセキュリティ上の長所と短所を理解しておく必要があります。SQL Server の透過的データ暗号化の詳細については、Microsoft ドキュメントで「透過的データ暗号化 (TDE)
TDE の有効化
RDS for SQL Server DB インスタンスに対して透過的なデータ暗号化 (TDE) を有効にするには、DB インスタンスに関連付けられている RDS オプショングループで TDE オプションを指定します。
-
DB インスタンスが、TDE オプションが含まれているオプショングループにすでに関連付けられているかどうかを確認します。DB インスタンスが関連付けられているオプショングループを表示するには、RDS コンソール、AWS CLI コマンド (describe-db-instance)、または API オペレーション DescribeDBInstances を使用します。
-
TDE が有効になっているオプショングループに DB インスタンスが関連付けられていない場合は、2 つのオプションから選択できます。オプショングループを作成して TDE オプションを追加するか、オプションを追加するように関連するオプショングループを変更することもできます。
注記 RDS コンソールの場合、このオプション名は
TRANSPARENT_DATA_ENCRYPTION
です。AWS CLI と RDS API の場合、名前はTDE
です。オプショングループの作成または変更の詳細については、「オプショングループを使用する」を参照してください。オプショングループへのオプションの追加の詳細については、「オプショングループにオプションを追加する」を参照してください。
-
[TDE] オプションを持つオプショングループに DB インスタンスを関連付けます。オプショングループへの DB インスタンスの関連付けの詳細については、「Amazon RDS DB インスタンスを変更する」を参照してください。
データの暗号化
TDE オプションがオプショングループに追加されると、暗号化プロセスに使用される証明書が Amazon RDS によって生成されます。その後、証明書を使用して、DB インスタンス上のデータベースのデータを暗号化する SQL ステートメントを実行できます。以下の例では、RDS によって生成された RDSTDECertificateName
という証明書を使用して、customerDatabase
というデータベースを暗号化しています。
---------- Enabling TDE ------------- -- Find a RDSTDECertificate to use USE [master] GO SELECT name FROM sys.certificates WHERE name LIKE 'RDSTDECertificate%' GO USE [customerDatabase] GO -- Create DEK using one of the certificates from the previous step CREATE DATABASE ENCRYPTION KEY WITH ALGORITHM = AES_128 ENCRYPTION BY SERVER CERTIFICATE [RDSTDECertificateName] GO -- Enable encryption on the database ALTER DATABASE [customerDatabase] SET ENCRYPTION ON GO -- Verify that the database is encrypted USE [master] GO SELECT name FROM sys.databases WHERE is_encrypted = 1 GO SELECT db_name(database_id) as DatabaseName, * FROM sys.dm_database_encryption_keys GO
TDE を使用した SQL Server データベースの暗号化にかかる時間は、いくつかの要因によって異なります。例えば、DB インスタンスのサイズ、PIOPS がインスタンスに対して有効になっているかどうか、データの量などの要因があります。
オプショングループに関する考慮事項
TDE オプションは、永続オプションのため、すべての DB インスタンスおよびバックアップとオプショングループとの関連付けが解除されない限り、オプショングループから削除することはできません。オプショングループに TDE オプションを追加したら、そのオプショングループは、TDE を使用する DB インスタンスにのみ関連付けることができます。オプショングループの永続オプションの詳細については、「オプショングループの概要」を参照してください。
TDE オプションは永続オプションであるため、オプショングループおよび関連付けられている DB インスタンスとの間に競合が生じることがあります。以下の場合に、オプショングループおよび関連付けられている DB インスタンスとの間に競合が生じます。
-
TDE オプションを含む現在のオプショングループを、TDE オプションを含まないオプショングループに置き換えた。
-
DB スナップショットから復元した先の新しい DB インスタンスに TDE オプションを含むオプショングループがない。このシナリオの詳細については、「オプショングループに関する考慮事項」を参照してください。
SQL Server のパフォーマンスに関する考慮事項
SQL Server DB インスタンスのパフォーマンスは、透過的データ暗号化の使用によって影響を受けることがあります。
暗号化されていないデータベースが DB インスタンスにあり、そのインスタンスに暗号化されたデータベースが 1 つでもあれば、暗号化されていないデータベースのパフォーマンスも低下することがあります。したがって、暗号化されたデータベースと暗号化されていないデータベースは別々の DB インスタンスに維持することをお勧めします。
TDE の無効化
DB インスタンスの TDE を無効にするには、初期にオブジェクトを復号または削除して、暗号化されたオブジェクトが DB インスタンスに残らないようにします。暗号化されたオブジェクトが DB インスタンスに残っている場合は、DB インスタンスに対して TDE を無効にすることはできません。コンソールを使用してオプショングループから TDE オプションを削除すると、処理中であることがコンソールに示されます。さらに、オプショングループが暗号化された DB インスタンスまたは DB スナップショットに関連付けられている場合は、エラーイベントが作成されます。
以下の例では、customerDatabase
というデータベースから TDE 暗号化を削除しています。
------------- Removing TDE ---------------- USE [customerDatabase] GO -- Disable encryption on the database ALTER DATABASE [customerDatabase] SET ENCRYPTION OFF GO -- Wait until the encryption state of the database becomes 1. The state is 5 (Decryption in progress) for a while SELECT db_name(database_id) as DatabaseName, * FROM sys.dm_database_encryption_keys GO -- Drop the DEK used for encryption DROP DATABASE ENCRYPTION KEY GO -- Alter to SIMPLE Recovery mode so that your encrypted log gets truncated USE [master] GO ALTER DATABASE [customerDatabase] SET RECOVERY SIMPLE GO
すべてのオブジェクトを復号すると、2 つのオプションを使用できます。DB インスタンスを変更して TDE オプションが含まれていないオプショングループに関連付けることができます。または、オプショングループから TDE オプションを削除できます。