セキュリティコンプライアンスや保存データの暗号化などのシナリオでは、ApsaraDB RDS for SQL Server インスタンスで透過的データ暗号化(TDE)機能を使用することをお勧めします。このトピックでは、TDE を使用してデータファイルに対してリアルタイムの I/O 暗号化と復号を実行し、機密データがディスクに書き込まれる前に暗号化され、ディスクからメモリに読み取られるときに復号されるようにする方法について説明します。これにより、攻撃者がデータベースをバイパスしてストレージから機密情報を読み取るのを防ぎ、データベース内の機密データのセキュリティを向上させることができます。RDS インスタンスで TDE を有効にした後、インスタンス内のデータファイルのサイズは増加しません。アプリケーションの構成を変更することなく、TDE を使用できます。
TDE のしくみ
このセクションでは、コンピュータシステムのさまざまなレベルでの TDE のしくみについて説明します。
オペレーティングシステムレイヤー
Microsoft Data Protection API(DPAPI)は、Windows オペレーティングシステムに組み込まれている API で、データの暗号化または復号に使用されます。 DPAPI を使用すると、暗号鍵とアルゴリズムに焦点を当てる必要がなくなります。
DPAPI は TDE 階層のルートです。 DPAPI は、オペレーティングシステムレイヤーとデータベースインスタンスのサービスマスターキー(SMK)で鍵階層を保護します。
SQL Server インスタンスレイヤー
SQL Server では、SMK はデータベースエンジンで使用される高度な暗号鍵です。 SMK は SQL Server エンジンのルートキーであり、SQL Server インスタンスの作成時に生成されます。 SMK は、低レベルの鍵とデータの暗号化に使用されます。
SMK は DPAPI によって保護され、データベースマスターキー(DMK)の暗号化に使用されます。
データベースレイヤー
TDE は、データベースレイヤーのマスターデータベースとユーザーデータベースで実行されます。
マスターデータベース
RDS インスタンスで TDE を有効にすると、マスターデータベースに DMK が作成され、証明書の作成に使用されます。 DMK と証明書はマスターデータベースに保存されます。
DMK は、データベース内の機密情報の暗号化に使用される対称鍵です。 DMK は SMK によって暗号化され、証明書の暗号化に使用されます。マスターデータベースの証明書は、ユーザーデータベースのデータベース暗号化鍵(DEK)の暗号化に使用されます。
ユーザーデータベース
DEK は、ユーザーデータベースで作成および保存される暗号鍵であり、TDE とのみ連携します。
DEK はマスターデータベースの証明書によって暗号化されます。 DEK が保存されているユーザーデータベースのデータは、DEK によって暗号化されます。 DEK は証明書によって暗号化され、ユーザーデータベースに保存されます。 DEK が暗号化されていない場合、DEK はメモリに保存されます。 データがデータベースに書き込まれたり、データベースから読み取られたりすると、SQL Server は証明書の秘密鍵を使用して暗号化された DEK を復号し、復号された DEK をメモリにロードして、データファイルをリアルタイムで暗号化または復号します。 このプロセスは、アプリケーションとユーザーに対して透過的です。
TDE の証明書がマスターデータベース用に生成されていない場合、DEK を復号できません。 その結果、TDE が有効になっているデータベースのバックアップファイルを復元したり、データベースをデータベースインスタンスに追加したりすることはできません。
前提条件
RDS インスタンスは次の条件を満たしています。
RDS インスタンスは、汎用または専用インスタンスファミリーに属しています。共有インスタンスファミリーはサポートされていません。詳細については、「インスタンスファミリー」をご参照ください。
RDS インスタンスの課金方法は、サブスクリプションまたは従量課金です。サーバーレスインスタンスはサポートされていません。詳細については、「サーバーレス ApsaraDB RDS for SQL Server インスタンス」をご参照ください。
RDS インスタンスは、SQL Server 2019 SE、SQL Server 2022 SE、および SQL Server EE のいずれかの SQL Server バージョンを実行しています。
説明読み取り専用 RDS インスタンスはこの機能をサポートしていません。
Bring Your Own Keys(BYOK)を使用する場合は、暗号化と復号に使用する証明書、秘密鍵、およびパスワードを事前に取得してください。
Alibaba Cloud アカウントは、RDS インスタンスが Key Management Service(KMS)にアクセスすることを承認するために使用されます。詳細については、「ApsaraDB RDS が KMS にアクセスすることを承認する」をご参照ください。
使用上の注意
RDS インスタンスに Alibaba Cloud が提供するサービスキーを使用し、RDS インスタンスで TDE を有効にした場合、TDE 機能が有効になった後に生成されたバックアップファイルを使用して、RDS インスタンスのデータをオンプレミスデバイスに復元することはできません。
TDE を有効にすると、データベースのパフォーマンスに影響します。
パフォーマンスへの影響:Microsoft の公式ドキュメントに基づくと、全体的なパフォーマンスは約 3 ~ 5% 低下します。
メモリ内データへの影響:アクセスされるデータのほとんどがメモリに保存されている場合、パフォーマンスへの影響はわずかです。
CPU 使用率と I/O パフォーマンスへの影響:TDE の実行は CPU に負荷がかかるプロセスであり、I/O 操作を伴います。
サーバーまたはアプリケーションの I/O 負荷が低く、CPU 使用率が低い場合、パフォーマンスへの影響はわずかです。 アプリケーションの CPU 使用率が高い場合、約 28% のパフォーマンス低下が発生します。
サーバーまたはアプリケーションの I/O 負荷が高いが、CPU 使用率が十分に低い場合、パフォーマンスへの影響はわずかです。
制限事項
TDE が有効になっている RDS インスタンスの場合:
インスタンスのマイナーエンジンバージョンを更新することはできません。
インスタンスが Premium ローカル SSD を使用し、SQL Server 2008 R2 を実行している場合、インスタンスのメジャーエンジンバージョンを SQL Server 2008 R2 から SQL Server 2012 または SQL Server 2016 にスペックアップすることはできません。
RDS インスタンスで TDE が有効になっている場合、インスタンスのバックアップファイルを使用して、インスタンスデータを新しい RDS インスタンスに復元できます。ただし、RDS インスタンスのバックアップファイルを使用して、RDS インスタンスを再構築したり、インスタンスデータを別の既存の RDS インスタンスに復元したりすることはできません。
TDE を有効にする
[インスタンス] ページに移動します。 上部のナビゲーションバーで、RDS インスタンスが存在するリージョンを選択します。 次に、RDS インスタンスを見つけて、インスタンスの ID をクリックします。
左側のナビゲーションウィンドウで、セキュリティコントロール をクリックします。
TDE タブで、無効 の横にあるスイッチをオンにします。
説明「前提条件」セクションで指定されているすべての条件を RDS インスタンスが満たしている場合にのみ、TDE を有効にできます。
表示されるダイアログボックスで、鍵の種類を選択し、[OK] をクリックします。
自動生成キーの使用
[選択されていないデータベース] セクションからデータベースを選択し、
アイコンをクリックして選択したデータベースを [選択されたデータベース] セクションに移動し、[確認] をクリックします。
独自の SQL Server キーの使用
証明書ファイルと秘密鍵ファイルを OSS バケットにアップロードします。詳細については、「オブジェクトのアップロード」をご参照ください。

次へ をクリックし、次のパラメータを構成します。

パラメータ
説明
ОSS バケット
証明書ファイルと秘密鍵ファイルが保存されている OSS バケット。
証明書
OSS バケットにアップロードした証明書ファイル。
秘密キー
OSS バケットにアップロードした秘密鍵ファイル。
パスワード
独自の SQL Server 鍵のパスワード。
次へ をクリックして、[承認データベース] ステップに進みます。
[選択されていないデータベース] セクションからデータベースを選択し、
アイコンをクリックして選択したデータベースを [選択されたデータベース] セクションに移動し、[確認] をクリックします。
TDE を無効にする
1 つ以上のデータベースに対して TDE を無効にする場合は、[選択されたデータベース] セクションからデータベースを削除できます。
RDS インスタンスに対して TDE を無効にする場合は、RDS インスタンス上のすべてのデータベースを [選択されたデータベース] セクションから削除する必要があります。 その後、システムは RDS インスタンスに対して TDE を無効にします。
[インスタンス] ページに移動します。 上部のナビゲーションバーで、RDS インスタンスが存在するリージョンを選択します。 次に、RDS インスタンスを見つけて、インスタンスの ID をクリックします。
左側のナビゲーションウィンドウで、セキュリティコントロール をクリックします。
TDE タブをクリックします。 次に、TDE 設定 をクリックします。
[選択されたデータベース] セクションからデータベースを選択し、
アイコンをクリックして選択したデータベースを [選択されていないデータベース] セクションに移動し、[OK] をクリックします。
TDE を無効にすると、最後のバックアップの完了を待つ、データの復号、ログの記録、メタデータの更新など、複数のデータベース操作が伴います。 データの復号はリソースを大量に消費する操作であり、大量の CPU、メモリ、および I/O リソースを消費します。 データの復号に費やされる時間は、データベースのデータ量に比例します。 大量のデータを含むデータベースに対して TDE を無効にする場合は、長い時間がかかります。 たとえば、データベースに約 200 GB のデータが含まれている場合、TDE を無効にするのに 40 分以上かかることがあります。
TDE を無効にした後、データの復号の進行状況を表示するには、次の SQL 文を実行します。
SELECT
db_name(database_id) AS DatabaseName,
encryption_state,
percent_complete
FROM
sys.dm_database_encryption_keys;関連情報
API 操作を呼び出して TDE を有効にする方法の詳細については、「ModifyDBInstanceTDE」をご参照ください。
SSL 暗号化を使用して RDS インスタンスへの接続を暗号化する方法の詳細については、「SSL 暗号化機能を構成する」をご参照ください。