Amazon Web Services ブログ

Amazon RDS for SQL Server での TDE 証明書のローテーション

Amazon Relational Database Service (Amazon RDS) for SQL Server は、Microsoft SQL Server を実行している DB インスタンスに保存されているデータを暗号化するための透過的データ暗号化 (TDE) をサポートしています。 TDE は、データをストレージに書き込む前に自動的に暗号化し、ストレージからデータを読み取るときにデータを復号化します。

TDE 証明書の有効期限は、証明書がいつ作成されて有効期限と関連付けられるかによって異なります。Amazon RDS for SQL Server の場合、TDE 証明書は、オプショングループを使用してインスタンスで TDE を有効にした日から1 年後に有効期限が切れます。この TDE 証明書の有効期限が切れると、監査の観点から RDS for SQL Server インスタンスがコンプライアンス違反になります。ただし、証明書の有効期限が切れても TDE の動作は停止しません。

TDE が有効になっている Amazon RDS for SQL Server で適切な監査とコンプライアンスを確保するためのベストプラクティスとして、TDE 証明書を RDS for SQL Server インスタンスで毎年ローテーションする必要があります。これには、新しい証明書を作成し、既存の証明書の有効期限が切れる前に新しい証明書を使用することが含まれます。

ソリューション概要

TDE 暗号化階層には、サービスマスターキー (SMK) を暗号化する Windows オペレーティングシステムレベルのデータ保護 API (DPAPI) をはじめとする複数の保護レベルが含まれます。この SMK はプライマリデータベースのデータベースマスターキー (DMK) を暗号化し、TDE 用に作成された証明書の秘密キーを保護します。この証明書はデータベース暗号化キー (DEK) を保護し、それによってデータが暗号化および復号化されます。

次の図は、完全な暗号化階層 (Microsoft からのアーキテクチャリファレンス) を示しています。
Adding for TDE blog
DEK は対称キーであり、SMK や DMK のように変化しません。ただし、証明書は作成プロセスの一環として有効期限付きで生成されるため、ローテーションが必要になります。次の図は、Amazon RDS for SQL server に TDE をハイレベルに実装するためのリファレンスアーキテクチャを示しています。
TDE blog post

実装

TDE 対応の Amazon RDS for SQL Server で TDE 証明書を定期的にローテーションするには、次のステップを実行します。このプロセスにはダウンタイムは発生しないことに注意してください。ただし、大規模なデータベースを使用する場合はインスタンスのパフォーマンスを監視する必要があります。

  1. RDS for SQL Server インスタンスがマルチ AZ モードの場合は、シングル AZ モードに変更します。
     
    TDE オプションは永続的なオプションであり、すべての DB インスタンスとバックアップがオプション グループから関連付け解除されない限り、オプション グループから削除できないからです。
  2. TDE 証明書の詳細を確認します。
    USE [master] 
    GO 
    SELECT name FROM sys.certificates WHERE name LIKE 'RDSTDECertificate%' 
    GO
  3. 暗号化されたデータベースを確認します。
    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
  4. TDE を無効化します。
    USE [DBNAME] 
    ALTER DATABASE [DBNAME] SET ENCRYPTION OFF 
    GO 
    
    USE [DBNAME] 
    DROP DATABASE ENCRYPTION KEY 
    GO
  5. TDE を検証します。
    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
  6. 復旧モデルを SIMPLE に変更します。これにより、ログファイル内の暗号化された値をすべて消去できます。
    注意 : 復旧モデルを変更すると、DMS のような復旧モデルに依存しているサービスに影響がある可能性があります。Amazon RDS for SQL Server の復旧モデル変更に関してはこちらをご参照ください。

    ALTER DATABASE [DBNAME] SET RECOVERY SIMPLE 
    GO
  7. 復旧モデルを FULL に変更します。
    ALTER DATABASE [DBNAME] SET RECOVERY FULL 
    GO
  8. TDE が有効になっていないオプショングループに切り替えるようにインスタンスを変更します。
     
    この結果、古い TDE 証明書は RDS for SQL Server インスタンスから完全に削除されます。オプショングループの詳細については、「オプショングループを使用する」と「オプショングループにオプションを追加する」を参照してください。
  9. RDS インスタンスが使用可能になったら、オプショングループに TDE オプションを追加すると、新しい証明書が生成されます。
     
    データベース復旧モデルが FULL – SIMPLE – FULL と変更すると、新しいスナップショットが作成されます。
  10. スナップショットが完成したら、Amazon RDS コンソールを使用してインスタンスをマルチ AZ に戻します。

オプショングループをアタッチし、シングル AZ に変更してからマルチ AZ に変更し直しても、ダウンタイムは発生しません。ただし、データベース復旧モードとマルチ AZ が変更されるため、このプロセス中は高可用性とポイントインタイムリカバリ (PITR) に影響があります。

Amazon RDS for SQL Server での TDE の制限事項

このソリューションには以下の制限があります。

  • このソリューションは、SQL Server 2019 Standard Edition と Enterprise Edition、および SQL Server 2012-2017 Enterprise Edition でのみサポートされています。
  • Amazon RDS は TDE 証明書のインポートまたはエクスポートをサポートしていません。
  • TDE 対応データベースのネイティブバックアップは作成できますが、そのバックアップをオンプレミスデータベースに復元することはできません。TDE 対応のオンプレミスデータベースのネイティブバックアップは復元できません。

まとめ

この投稿では、RDS for SQL Server インスタンスで TDE 証明書をローテーションする方法を学びました。この方法を使うと、証明書の有効期限が切れる前に TDE 証明書を適時にローテーションし、インスタンスが適切にコンプライアンスを守れるようにすることができます。


著者について

Lakshman Thatisetty は、アマゾンウェブサービスのデータベーススペシャリストソリューションアーキテクトです。彼は AWS のお客様と協力してデータベースプロジェクトに関するソリューションを設計し、既存のデータベースを AWS クラウドに移行してモダナイズする支援や、AWS での大規模な移行のオーケストレーションを支援しています。

Saroj Kumar Das は、アマゾンウェブサービスのクラウドサポートエンジニアです。彼は AWS のお客様と仕事をしており、SQL Server に特化した Amazon RDS データベースプラットフォームに関する深い技術的専門知識を提供しています。

翻訳はソリューションアーキテクトの Yoshinori Sawada が担当しました。原文はこちらです。