SQL ServerのAzure Key Vaultを使用してTransparent Data Encryptionを設定する

適用対象:SQL Server

この記事では、SQL Server Connector for Azure Key Vaultをインストールして構成した後、Azure Key Vaultのキーを使用してTransparent Data Encryption (TDE) を構成します。

Prerequisites

SQL Server インスタンスでAzure Key Vaultの使用を開始する前に、次の前提条件を満たしていることを確認してください。

Note

SQL Server 2022 (16.x) CU 12 以降のバージョンでは、SQL Server on Linuxでは、Azure Key Vaultを使用した TDE 拡張キー管理がサポートされています。 このガイドの手順 3 と手順 4 は、SQL Server on Linux では必要ありません。

クイックフロー

  1. 「手順 1: 認証モデルを設定する」で認証モデルを選択します。
  2. 「手順 2: Key Vaultを作成する」で Key Vault とキーを作成します。
  3. 「手順 3: SQL Server コネクタをインストールする」でコネクタをインストールします
  4. 「手順 4: EKM プロバイダーをサポートするためのレジストリ キーを追加する」でレジストリの前提条件を構成します。
  5. 手順 5: SQL Serverの構成でSQL Serverを構成し、暗号化を検証します。

手順 1: 認証モデルを設定する

Important

続行する前に、認証モデルを選択します。

  • オンプレミスSQL Serverの [サービス プリンシパル] タブを使用します。
  • マネージド ID がサポートされている Azure VM 上の SQL Server または Azure Arc によって有効化された SQL Server では、[マネージド ID] タブを使用します。

認証モデルのサポート マトリックス:

認証モデル SQL Server のバージョン SQL Serverの実行場所 サポートされている
サービス プリンシパル この記事の対象となるサポートされているバージョン オンプレミス、Azure VM、Azure Arc 対応 SQL Server はい
マネージド ID SQL Server 2022 CU17 以降 AZURE VM はい
マネージド ID SQL Server 2025 以降 Azure Arc によって有効化された SQL Server はい
マネージド ID Any On-premises いいえ

SQL Server インスタンスのアクセス許可を Azure Key Vault に付与するためには、Microsoft Entra ID にサービス プリンシパル アカウントが必要です。

  1. Azure ポータルにサインインし、次のいずれかの手順を実行します。

    • [Microsoft Entra ID] ボタンを選択します。

      [Azure サービス] ウィンドウのスクリーンショット。

    • [その他のサービス] を選択してから、[すべてのサービス] ウィンドウに [Microsoft Entra ID] と入力します。

  2. 次の手順を実行して、アプリケーションをMicrosoft Entra IDに登録します。 詳しい段階的な手順については、Azure Key Vault のブログ投稿である、「Azure Key Vault - 段階的な説明」の「アプリケーションの ID を取得する」セクションを参照してください。

    1. [Microsoft Entra ID] リソースの [管理] セクションで、[アプリの登録] を選択します。

      Azure portal の [Microsoft Entra ID の概要] ページのスクリーンショット。

    2. アプリの登録 ページで、新しい登録 を選択します。

      Azure portal の [アプリの登録] ウィンドウのスクリーンショット。

    3. [アプリケーションの登録] ペインで、アプリのユーザー向け表示名を入力してから、[登録] を選択します。

      [アプリケーションの登録] ウィンドウのスクリーンショット。

    4. 左側のウィンドウで、 証明書とシークレット>クライアント シークレット>新しいクライアント シークレットの順に選択します。

      Azure portal のアプリの [証明書とシークレット] ウィンドウのスクリーンショット。

    5. [クライアント シークレットの追加] で、説明と適切な有効期限を入力してから、[追加] を選択します。 24 か月を超える有効期限を選択することはできません。 詳細については、「クライアント シークレットの追加」を参照してください。

      Azure portal のアプリの [クライアント シークレットの追加] セクションのスクリーンショット。

    6. [証明書とシークレット] ウィンドウの [] で、クライアント シークレットの値の横にある [コピー] ボタンを選択して、それを使用してSQL Serverに非対称キーを作成します。

      Azure portal のシークレット値のスクリーンショット。

    7. 左側のウィンドウで [概要] を選択し、[アプリケーション (クライアント) ID] ボックスで値をコピーし、それを使用してSQL Serverに非対称キーを作成します。

      [概要] ウィンドウの [アプリケーション (クライアント) ID] のスクリーンショット。

手順 2: キー ボールトを作成する

キー ボールトの作成方法を選択します。

Note

Azure Key Vault と Azure Key Vault Managed HSM のみがサポートされています。 Azure Cloud HSM はサポートされていません。

Azure portal を使用してキー ボルトを作成する

Azure ポータルを使用してキー コンテナーを作成するには、「クイック スタート: Azure ポータルを使用してキー コンテナーを作成する」を参照してください。

Azure ロールベースのアクセス制御

Azureロールベースのアクセス制御 (RBAC) を使用して、Azure Key Vaultへのアクセスを管理します。 従来のアクセス ポリシーは使用しないでください。 レガシ アクセス ポリシーには既知のセキュリティ脆弱性があり、Privileged Identity Management (PIM) のサポートがないため、重要なデータやワークロードには使用しないでください。 Azure Key Vault RBAC アクセス許可の詳細については、「キー コンテナー データ プレーン操作用の Azure 組み込みロール」を参照してください。

  1. 作成したキー コンテナー リソースに移動し、[アクセス制御 (IAM)] 設定を選択します。

  2. [追加>][ロール割り当ての追加] の順に選択します。

    Azure portal の [アクセス制御 (IAM)] ウィンドウの [ロールの割り当ての追加] ボタンのスクリーンショット。

  3. EKM アプリケーションまたはマネージド ID では、ラップ操作とラップ解除操作を実行するために、Key Vault Crypto Service Encryption ユーザー ロールが必要です。 [キー コンテナー暗号化サービスの暗号化ユーザー] を検索してロールを選択します。 次へを選択します。

    Azure portal のロールの割り当ての選択のスクリーンショット。

  4. [メンバー] タブで、[メンバーの選択] オプションを選択し、手順 1 で作成したMicrosoft Entra アプリケーションまたはマネージド ID を検索します。 アプリケーションまたはマネージド ID を選択し、[選択] ボタンを 選択 します。

    Azure portal でロール割り当てを追加するための [メンバーの選択] ウィンドウのスクリーンショット。

  5. [確認と割り当て] を 2 回選択して、ロールの割り当てを完了します。

キーを作成する

キーを作成するユーザーには、キー コンテナー 管理者 ロールが必要です。 前の手順と同様に、キーを作成するメンバーを追加し、ロールを割り当てます。

  1. [キー コンテナー] ウィンドウで [キー] を選択し、[生成/インポート] オプションを選択します。 この操作により、[ キーの作成 ] ウィンドウが開きます。 [生成] オプションを選択し、キーの名前を入力します。 SQL Server コネクタを使用する場合、キー名に使用できる文字は、"a ~ z"、"A ~ Z"、"0 ~ 9"、"-" に限られます。また、26 文字が長さの上限となります。

  2. キーの種類は [RSA] を、RSA キー サイズ[2048] を使用します。 EKM では現在、RSA キーのみがサポートされています。 アクティブ化と有効期限の日付を適宜設定し、[有効][はい] に設定します。

    [キーの作成] ウィンドウのスクリーンショット。

Azure Key Vault Managed HSM の構成 (省略可能)

Azure Key Vault Managed HSM (ハードウェア セキュリティ モジュール) では、最新バージョンの SQL Server コネクタとAzure SQLを使用する場合に、SQL ServerとSQL Server on Azure Virtual Machines (VM) がサポートされます。 マネージド HSM は、フルマネージド、高可用性、シングルテナント HSM サービスです。 マネージド HSM は、暗号化操作とキー ストレージ用のセキュリティで保護された基盤を提供します。 マネージド HSM は、最も厳格なセキュリティとコンプライアンスの要件を満たすように設計されています。

手順 2 では、Azure Key Vaultでキー コンテナーとキーを作成する方法を示します。 必要に応じて、Azure Key Vault Managed HSM を使用して、SQL Server コネクタのキーを格納または作成できます。 次の手順に従います。

  1. Azure ポータル、Azure CLI、PowerShell、または ARM テンプレートを使用して、Azure Key Vault Managed HSM を作成します。

  2. マネージド HSM のアクティブ化。 アクティブ化できるのは、作成時に割り当てられた指定された管理者だけです。 Azure ポータルで、Managed HSM リソースを選択し、[概要] メニューの [セキュリティ ドメインのダウンロード] を選択します。 いずれかのクイックスタートに従って 、Managed HSM をアクティブ化します

  3. Microsoft Entra サービス プリンシパルまたはマネージド ID に対して、Managed HSM にアクセスするためのアクセス許可を付与します。 マネージド HSM 管理者ロールでは、キーを作成するためのアクセス許可は付与されません。 手順 2 と同様に、EKM アプリケーションまたはマネージド ID では、ラップ操作とラップ解除操作を実行するために、Managed HSM Crypto User ロールまたは Managed HSM Crypto Service Encryption User ロールが必要です。 詳細については、「マネージド HSM のローカル RBAC 組み込みロール」を参照してください。

  4. Azure Key Vault マネージド HSM サービス メニューの [設定] で、[キー] を選択します。 [キー] ウィンドウで、[バックアップの生成/インポート/復元] を選択してキーを作成するか、既存のキーをインポートします。

    Note

    アルゴリズムの RSA-HSM_2048 と RSA-HSM_3072 は、SQL Server 2022 (16.x) 累積更新プログラム 13 以降でサポートされています。

    Azure Key Vault Managed HSM では、キーの自動ローテーションがサポートされます。 詳細については、「Azure Managed HSM でキーの自動ローテーションを構成する」を参照してください。

    マネージド HSM はプライベート エンドポイント接続をサポートします。 詳しくは、「マネージド HSM と Azure Private Link を統合する」をご覧ください。 この構成では、Azure Key Vault Managed HSM ネットワーク設定でMicrosoft信頼されたサービス バイパス オプション有効にする必要があります。

手順 3: SQL Server コネクタのインストール

SQL Server管理者に、Microsoft ダウンロード センターから最新バージョンの SQL Server Connector for Microsoft Azure Key Vaultをダウンロードし、インストーラーを実行させます。

SQL Server コネクタ インストール ウィザードのスクリーンショット。

デフォルトでコネクタは C:\Program Files\SQL Server Connector for Microsoft Azure Key Vault にインストールされています。 この場所はセットアップ時に変更できます。 変更する場合は、次のセクションでスクリプトを調整します。

正常にインストールされると、コンピューターに Microsoft.AzureKeyVaultService.EKM.dll が配置されます。 このアセンブリは、暗号化 EKM プロバイダー DLL です。 CREATE CRYPTOGRAPHIC PROVIDER ステートメントを使用して、SQL Serverに登録します。

インストーラーには、SQL Server暗号化用のサンプル スクリプトも用意されています。

エラー コードの説明、構成設定、またはメンテナンス タスクについては、次を参照してください。

手順 4: EKM プロバイダーをサポートするレジストリ キーを追加する

Warning

何を行っているかを正確に把握しているSQL Server管理者のみが、レジストリを変更する必要があります。 変更が正しくないと、重大な問題が発生する可能性があります。 問題が発生した場合に復元できるように、変更を加える前にレジストリをバックアップします。

  1. regeditを実行して、レジストリ エディターを開きます。

  2. SQL Server Cryptographic ProviderHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SQL Server Cryptographic Providerレジストリ キーを作成します。

  3. SQL Server Cryptographic Provider レジストリ キーを右クリックし、[アクセス許可] を選択します。

  4. SQL Server サービスを実行しているユーザー アカウントに、 キーのSQL Server Cryptographic Providerを付与します。

    レジストリ エディターの EKM レジストリ キーのスクリーンショット。

  5. [Apply](適用)[OK] の順に選択します。

  6. レジストリ エディターを閉じて、SQL Server サービスを再起動します。

    Note

    フェールオーバー クラスター インスタンスで TDE と EKM またはAzure Key Vaultを使用する場合は、クラスター レジストリ チェックポイント ルーチンにもHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SQL Server Cryptographic Providerを追加して、レジストリがノード間で同期されるようにします。これによって、フェールオーバー後のデータベースの復旧とキーのローテーションが容易になります。

    次の PowerShell コマンドを実行して、チェックポイント ルーチンにレジストリ キーを追加します。

    Add-ClusterCheckpoint -RegistryCheckpoint "SOFTWARE\Microsoft\SQL Server Cryptographic Provider" -Resourcename "SQL Server"
    

手順 5: SQL Server を構成する

このセクションの各操作に最低限必要な権限レベルについては、「B. よく寄せられる質問」を参照してください。

フェーズ 1: 暗号化プロバイダーと資格情報を構成する master

認証モデルを選択し、一致する手順に従います。

  1. sqlcmd を実行するか、SQL Server Management Studio を開きます。

  2. 次の Transact-SQL スクリプトを実行して、EKM を使用するように SQL Server を構成します。

    -- Enable advanced options.
    USE master;
    GO
    
    EXEC sp_configure 'show advanced options', 1;
    GO
    RECONFIGURE;
    GO
    
    -- Enable EKM provider
    EXEC sp_configure 'EKM provider enabled', 1;
    GO
    RECONFIGURE;
    
  3. SQL Server に EKM プロバイダーとして SQL Server コネクタを登録します。

    Azure Key Vault の EKM プロバイダーである SQL Server コネクタを使用して暗号化サービス プロバイダーを作成します。 この例では、プロバイダー名は AzureKeyVault_EKM です。

    CREATE CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM
    FROM FILE = 'C:\Program Files\SQL Server Connector for Microsoft Azure Key Vault\Microsoft.AzureKeyVaultService.EKM.dll';
    GO
    

    Note

    ファイル パスは 256 文字以内で指定してください。

  4. キー コンテナーを使用するために SQL Server ログイン用の SQL Server 資格情報を設定します。

    キー コンテナーのキーを使用して暗号化を実行する資格情報を各ログインに追加します。 資格情報とログインの間には 1 対 1 のマッピングがあります。各ログインには一意の資格情報が必要です。

    この Transact-SQL スクリプトを以下のように変更します。

    • IDENTITY 引数 (DocsSampleEKMKeyVault) を編集し、Azure Key Vault を参照するようにします。

      • グローバル Azure を使用している場合は、IDENTITY 引数を「手順 2: キー コンテナーを作成する」のお使いの Azure Key Vault の名前に置き換えます。
      • プライベート Azure クラウド (たとえば、Azure Government、21Vianet によって動作するMicrosoft Azure、Azure Germany) を使用している場合は、「IDENTITYする」で返されるコンテナー URI で引数を置き換えます。 キー コンテナー URI に https:// は含めないでください。
    • SECRET引数の最初の部分を、「手順 1: 認証モデルを設定する」の Microsoft Entra クライアント ID に置き換えます。 この例のクライアント IDd956f6b9xxxxxxx です。

      Important

      アプリ (クライアント) ID からハイフンを削除します。

    • 手順 1 のSECRETを使用して、引数の 2 番目の部分を完了します。 最後の文字列は、ハイフンのない長い文字と数字のシーケンスです (クライアント シークレット自体のハイフンを除きます)。

    USE master;
    CREATE CREDENTIAL sysadmin_ekm_cred
       -- Set IDENTITY to the vault name (public Azure) or full vault hostname without https:// (sovereign clouds / Managed HSM)
       -- See https://learn.microsoft.com/azure/key-vault/general/about-keys-secrets-certificates#dns-suffixes-for-base-url
       WITH IDENTITY = 'DocsSampleEKMKeyVault',
             --<----Application (Client) ID ---><--Microsoft Entra app (Client) ID secret-->
       SECRET = 'd956f6b9xxxxxxxyrA8X~PldtMCvUZPxxxxxxxx'
    FOR CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM;
    
    -- Add the credential to the SQL Server administrator's domain login
    ALTER LOGIN [<domain>\<login>]
        ADD CREDENTIAL sysadmin_ekm_cred;
    

    変数を使用し、プログラムによってクライアント ID からハイフンを削除する例については、 CREATE CREDENTIALを参照してください。

  5. SQL Server インスタンスでAzure Key Vault キーを開きます。

    新しいキーを作成したか、「手順 2: キー コンテナーを作成する」で非対称キーをインポートしたかに関係なく、CREATE ASYMMETRIC KEYを使用してSQL Serverでキーを開きます。

    Important

    この手順を実行する前に、レジストリの前提条件を完了してください。

    次の例では:

    • EKMSampleASYKeyを、SQL Serverで使用する名前に置き換えます。
    • ContosoRSAKey0を、Azure Key Vault または Managed HSM のキー名に置き換えます。

    バージョンレス キー名を使用します (ほとんどのシナリオで推奨)。

    CREATE ASYMMETRIC KEY EKMSampleASYKey
       FROM PROVIDER [AzureKeyVault_EKM]
       WITH PROVIDER_KEY_NAME = 'ContosoRSAKey0',
          CREATION_DISPOSITION = OPEN_EXISTING;
    

    操作を 1 つのバージョンにピン留めする必要がある場合は、特定のキー バージョンを使用します。

    CREATE ASYMMETRIC KEY EKMSampleASYKey
       FROM PROVIDER [AzureKeyVault_EKM]
       WITH PROVIDER_KEY_NAME = 'ContosoRSAKey0/1a4d3b9b393c4678831ccc60def75379',
          CREATION_DISPOSITION = OPEN_EXISTING;
    

    この例では、1a4d3b9b393c4678831ccc60def75379は、データベース操作SQL Server使用する特定のキー バージョンです。

  6. 前の手順で作成した SQL Server の非対称キーを使用して、新しいログインを作成します。

    -- Create a login that associates the asymmetric key with this login
    CREATE LOGIN TDE_Login
        FROM ASYMMETRIC KEY EKMSampleASYKey;
    
  7. 資格情報マッピングを元の管理者ログインから非対称キーから作成されたログインに移動します。

    SQL Serverは、EKM 操作に非対称キー (TDE_Login) から作成されたログインを使用します。 暗号化と回復の操作中にSQL ServerがAzure Key Vaultにアクセスできるようにするには、元のセットアップ ログインではなく、資格情報をTDE_Loginにマップします。

    -- Remove the service principal credential from the original setup login
    ALTER LOGIN [<domain>\<login>]
       DROP CREDENTIAL sysadmin_ekm_cred;
    
    -- Map the service principal credential to the login created from the asymmetric key
    ALTER LOGIN TDE_Login
       ADD CREDENTIAL sysadmin_ekm_cred;
    

フェーズ 2: ユーザー データベースを暗号化して検証する

暗号化するユーザー データベースを構成する

  1. Azure Key Vault キーを使用して暗号化するテスト データベースを作成します。

    -- Create a test database for the TDE example.
    CREATE DATABASE TestTDE;
    
  2. サーバー非対称キー (EKMSampleASYKey) を使用してデータベース暗号化キーを作成します。

    USE TestTDE;
    -- Create a DEK protected by the EKM asymmetric key.
    CREATE DATABASE ENCRYPTION KEY
    WITH ALGORITHM = AES_256
    ENCRYPTION BY SERVER ASYMMETRIC KEY EKMSampleASYKey;
    
  3. ENCRYPTION ON設定して、データベースで TDE を有効にします。

    -- Enable TDE for the database.
    ALTER DATABASE TestTDE
        SET ENCRYPTION ON;
    

キーの使用状況と暗号化の状態を確認する

  1. master データベースで、次の Transact-SQL クエリを実行して、EKM 非対称キーが存在することを確認し、その拇印をキャプチャします。

    SELECT name,
           algorithm_desc,
           thumbprint
    FROM sys.asymmetric_keys;
    

    このステートメントは、次のような出力を返します。

    name            algorithm_desc    thumbprint
    EKMSampleASYKey RSA_2048          <key thumbprint>
    
  2. ユーザー データベース (TestTDE) で、次の Transact-SQL クエリを実行して、TDE が有効であること、およびデータベース暗号化キーが非対称キーによって保護されていることを確認します。

    SELECT encryptor_type,
           encryption_state_desc,
           encryptor_thumbprint
    FROM sys.dm_database_encryption_keys
    WHERE database_id = DB_ID('TestTDE');
    

    このステートメントは、次のような出力を返します。

    encryptor_type encryption_state_desc encryptor_thumbprint
    ASYMMETRIC KEY ENCRYPTED             <key thumbprint>
    

    encryptor_thumbprintsys.asymmetric_keysから返された拇印と一致することを確認します。 不一致は、通常、データベース暗号化キーが想定とは異なるキーによって保護されていることを示します。

クリーンアップ

構成した認証モデルに一致するクリーンアップ手順を使用します。

  1. この手順で作成したテスト オブジェクトをクリーンアップします。

    -- CLEAN UP: shared objects + service principal credential
    USE master;
    GO
    ALTER DATABASE [TestTDE] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
    DROP DATABASE [TestTDE];
    GO
    
    DROP LOGIN [TDE_Login];
    GO
    
    DROP ASYMMETRIC KEY [EKMSampleASYKey];
    DROP CRYPTOGRAPHIC PROVIDER [AzureKeyVault_EKM];
    GO
    
    DROP CREDENTIAL [sysadmin_ekm_cred];
    GO
    
  2. SQL Server Cryptographic Providerレジストリ キーを削除する必要があるかどうかを確認します。

    Important

    EKM キーを削除した後、 SQL Server Cryptographic Provider レジストリ キーは自動的に削除されません。

    インスタンスで EKM が不要になった場合にのみ、このレジストリ キーを削除します。 早期に削除すると、EKM の機能と回復操作が中断される可能性があります。

    レジストリ パス: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SQL Server Cryptographic Provider

Azure Key Vaultを使用して TDE の非対称キーをローテーションする

認証固有のスクリプト、検証、安全性チェックなど、キーローテーションの手順に専用の運用ガイドを使用します。

Important

ローテーション後に以前のバージョンのキーは削除しないでください。 古いバックアップ、ログ ファイル、回復成果物を復元するには、以前のバージョンが必要な場合があります。